{
  "contractName": "TestnetRelay",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_genesisHeader",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_height",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_periodStart",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_firstID",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_first",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_last",
          "type": "bytes32"
        }
      ],
      "name": "Extension",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_requester",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_paysValue",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_spends",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_pays",
          "type": "bytes"
        }
      ],
      "name": "NewProofRequest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_from",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_to",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_gcd",
          "type": "bytes32"
        }
      ],
      "name": "NewTip",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "RequestClosed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_txid",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "RequestFilled",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "BASE_COST",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "HEIGHT_INTERVAL",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_anchor",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_headers",
          "type": "bytes"
        }
      ],
      "name": "addHeaders",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_oldPeriodStartHeader",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_oldPeriodEndHeader",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_headers",
          "type": "bytes"
        }
      ],
      "name": "addHeadersWithRetarget",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "cancelRequest",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_digest",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_offset",
          "type": "uint256"
        }
      ],
      "name": "findAncestor",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_digest",
          "type": "bytes32"
        }
      ],
      "name": "findHeight",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getBestKnownDigest",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentEpochDifficulty",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLastReorgCommonAncestor",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLatestValidatedTx",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getPrevEpochDifficulty",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRelayGenesis",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "getRequest",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "spends",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "pays",
          "type": "bytes32"
        },
        {
          "internalType": "uint64",
          "name": "paysValue",
          "type": "uint64"
        },
        {
          "internalType": "uint8",
          "name": "state",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "consumer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "numConfs",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "notBefore",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_ancestor",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_descendant",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_limit",
          "type": "uint256"
        }
      ],
      "name": "isAncestor",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "latestValidatedTx",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_ancestor",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_currentBest",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_newBest",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_limit",
          "type": "uint256"
        }
      ],
      "name": "markNewHeaviest",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nextID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_header",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_proof",
          "type": "bytes"
        },
        {
          "internalType": "bytes4",
          "name": "_version",
          "type": "bytes4"
        },
        {
          "internalType": "bytes4",
          "name": "_locktime",
          "type": "bytes4"
        },
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "uint16",
          "name": "_reqIndices",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_vin",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_vout",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "provideProof",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "remoteGasAllowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_spends",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_pays",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_paysValue",
          "type": "uint64"
        },
        {
          "internalType": "address",
          "name": "_consumer",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "_numConfs",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "_notBefore",
          "type": "uint256"
        }
      ],
      "name": "request",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_genesisHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_periodStart\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_firstID\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_first\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_last\",\"type\":\"bytes32\"}],\"name\":\"Extension\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_requester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_paysValue\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_spends\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_pays\",\"type\":\"bytes\"}],\"name\":\"NewProofRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_from\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_to\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_gcd\",\"type\":\"bytes32\"}],\"name\":\"NewTip\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"RequestClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_txid\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"RequestFilled\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"BASE_COST\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"HEIGHT_INTERVAL\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_anchor\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_headers\",\"type\":\"bytes\"}],\"name\":\"addHeaders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_oldPeriodStartHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_oldPeriodEndHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_headers\",\"type\":\"bytes\"}],\"name\":\"addHeadersWithRetarget\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"cancelRequest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_offset\",\"type\":\"uint256\"}],\"name\":\"findAncestor\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"}],\"name\":\"findHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getBestKnownDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentEpochDifficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getLastReorgCommonAncestor\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getLatestValidatedTx\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getPrevEpochDifficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getRelayGenesis\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"getRequest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"spends\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pays\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"paysValue\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numConfs\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"notBefore\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_ancestor\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_descendant\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_limit\",\"type\":\"uint256\"}],\"name\":\"isAncestor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"latestValidatedTx\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_ancestor\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_currentBest\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_newBest\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_limit\",\"type\":\"uint256\"}],\"name\":\"markNewHeaviest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nextID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_header\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"_version\",\"type\":\"bytes4\"},{\"internalType\":\"bytes4\",\"name\":\"_locktime\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"_reqIndices\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_vin\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_vout\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"provideProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"remoteGasAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_spends\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_pays\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"_paysValue\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_consumer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_numConfs\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_notBefore\",\"type\":\"uint256\"}],\"name\":\"request\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"addHeaders(bytes,bytes)\":{\"details\":\"We check integrity and consistency of the header chain\",\"params\":{\"_anchor\":\"The header immediately preceeding the new chain\",\"_headers\":\"A tightly-packed list of 80-byte Bitcoin headers\"},\"return\":\"True if successfully written, error otherwise\"},\"addHeadersWithRetarget(bytes,bytes,bytes)\":{\"details\":\"Checks the retarget, the heights, and the linkage\",\"params\":{\"_headers\":\"A tightly-packed list of 80-byte Bitcoin headers\",\"_oldPeriodEndHeader\":\"The last header in the difficulty period being closed\",\"_oldPeriodStartHeader\":\"The first header in the difficulty period being closed\"},\"return\":\"True if successfully written, error otherwise\"},\"cancelRequest(uint256)\":{\"details\":\"Prevents the relay from forwarding tx infromation\",\"params\":{\"_requestID\":\"The ID of the request to be cancelled\"},\"return\":\"True if succesful, error otherwise\"},\"findAncestor(bytes32,uint256)\":{\"details\":\"Will fail if the header is unknown\",\"params\":{\"_digest\":\"The header digest to search for\"},\"return\":\"The height of the header, or error if unknown\"},\"findHeight(bytes32)\":{\"details\":\"Will fail if the header is unknown\",\"params\":{\"_digest\":\"The header digest to search for\"},\"return\":\"The height of the header, or error if unknown\"},\"getBestKnownDigest()\":{\"details\":\"This updated only by calling markNewHeaviest\",\"return\":\"The hash of the best marked chain tip\"},\"getCurrentEpochDifficulty()\":{\"details\":\"This is updated when a new heavist header has a new diff\",\"return\":\"The difficulty of the bestKnownDigest\"},\"getLastReorgCommonAncestor()\":{\"details\":\"This is updated only by calling markNewHeaviest\",\"return\":\"The hash of the shared ancestor of the most recent fork\"},\"getPrevEpochDifficulty()\":{\"details\":\"This is updated when a difficulty change is accepted\",\"return\":\"The difficulty of the previous epoch\"},\"getRelayGenesis()\":{\"details\":\"This is an initialization parameter\",\"return\":\"The hash of the first block of the relay\"},\"getRequest(uint256)\":{\"details\":\"Requests ids are numerical\",\"params\":{\"_requestID\":\"The numerical ID of the request\"},\"return\":\"A tuple representation of the request struct\"},\"isAncestor(bytes32,bytes32,uint256)\":{\"details\":\"Limit the amount of lookups (and thus gas usage) with _limit\",\"params\":{\"_ancestor\":\"The prospective ancestor\",\"_descendant\":\"The descendant to check\",\"_limit\":\"The maximum number of blocks to check\"},\"return\":\"true if ancestor is at most limit blocks lower than descendant, otherwise false\"},\"markNewHeaviest(bytes32,bytes,bytes,uint256)\":{\"details\":\"We don't check this AT ALL really. Don't use relays with bad genesis\",\"params\":{\"_ancestor\":\"The digest of the most recent common ancestor\",\"_currentBest\":\"The 80-byte header referenced by bestKnownDigest\",\"_limit\":\"Limit the amount of traversal of the chain\",\"_newBest\":\"The 80-byte header to mark as the new best\"},\"return\":\"True if successfully updates bestKnownDigest, error otherwise\"},\"provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)\":{\"details\":\"The caller must specify which inputs, which outputs, and which request\",\"params\":{\"_header\":\"The header containing the merkleroot committing to the tx\",\"_index\":\"The index of the tx in the merkle tree's leaves\",\"_locktime\":\"The tx locktime, always the last 4 bytes of the tx\",\"_proof\":\"The merkle proof intermediate nodes\",\"_reqIndices\":\"The input and output index to check against the request, packed\",\"_requestID\":\"The id of the request that has been triggered\",\"_version\":\"The tx version, always the first 4 bytes of the tx\",\"_vin\":\"The tx input vector\",\"_vout\":\"The tx output vector\"},\"return\":\"True if succesful, error otherwise\"},\"request(bytes,bytes,uint64,address,uint8,uint256)\":{\"details\":\"The request can be a spent utxo and/or a created utxo\",\"params\":{\"_consumer\":\"The address of a ISPVConsumer exposing spv\",\"_notBefore\":\"A timestamp before which proofs are not accepted\",\"_numConfs\":\"The minimum number of Bitcoin confirmations to accept\",\"_pays\":\"An output script that must be paid in acceptable txns (optional)\",\"_paysValue\":\"A minimum value that must be paid to the output script (optional)\",\"_spends\":\"An outpoint that must be spent in acceptable txns (optional)\"},\"return\":\"A unique request ID.\"}}},\"userdoc\":{\"methods\":{\"addHeaders(bytes,bytes)\":{\"notice\":\"Adds headers to storage after validating\"},\"addHeadersWithRetarget(bytes,bytes,bytes)\":{\"notice\":\"Adds headers to storage, performs additional validation of retarget\"},\"cancelRequest(uint256)\":{\"notice\":\"Cancel a bitcoin event request.\"},\"findAncestor(bytes32,uint256)\":{\"notice\":\"Finds an ancestor for a block by its digest\"},\"findHeight(bytes32)\":{\"notice\":\"Finds the height of a header by its digest\"},\"getBestKnownDigest()\":{\"notice\":\"Getter for bestKnownDigest\"},\"getCurrentEpochDifficulty()\":{\"notice\":\"Getter for currentEpochDiff\"},\"getLastReorgCommonAncestor()\":{\"notice\":\"Getter for relayGenesis\"},\"getPrevEpochDifficulty()\":{\"notice\":\"Getter for prevEpochDiff\"},\"getRelayGenesis()\":{\"notice\":\"Getter for relayGenesis\"},\"getRequest(uint256)\":{\"notice\":\"Retrieve info about a request\"},\"isAncestor(bytes32,bytes32,uint256)\":{\"notice\":\"Checks if a digest is an ancestor of the current one\"},\"markNewHeaviest(bytes32,bytes,bytes,uint256)\":{\"notice\":\"Gives a starting point for the relay\"},\"provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)\":{\"notice\":\"Provide a proof of a tx that satisfies some request\"},\"request(bytes,bytes,uint64,address,uint8,uint256)\":{\"notice\":\"Subscribe to a feed of Bitcoin txns matching a request\"}}}},\"settings\":{\"compilationTarget\":{\"@summa-tx/relay-sol/contracts/TestnetRelay.sol\":\"TestnetRelay\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol\":{\"keccak256\":\"0x461cc52e40ba53e646f5c9505b992baa3d5b3c98ae5718561e61b3bc6c726d52\",\"urls\":[\"bzz-raw://90cf2e608b660671642a616ec044e2a39e8ceb7079315b6133ec978c47af9f98\",\"dweb:/ipfs/QmX4hyYS99RYWiQ7BwLXuvQpU5x62YbjJWLgYFwrPkYbzT\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\":{\"keccak256\":\"0x43451fdb4c4d55c01122411a4cf89a5c544c2bd4b646ee1d1f306626275324bf\",\"urls\":[\"bzz-raw://db93f07c32fa294d416aaab1b19a205772f2a3fa573fd380e5641e7770193ccf\",\"dweb:/ipfs/QmVE4y8cFKWZGKEfTM9Q3YreAArpMTTALHNr2tcvcNDnbi\"]},\"@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol\":{\"keccak256\":\"0x22d34c04c68c2a77ee83e2ef3756f6e6bad6ad675560d777e612315d7eb83935\",\"urls\":[\"bzz-raw://b642c61be1d34e153e4f9cc139291fa26f4ecf31a3acc5b960aad20f4f689eeb\",\"dweb:/ipfs/QmWADdVTCSyvtgb76AxFFkAr9h9jbY57Mj5X6xiEqCqmMu\"]},\"@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol\":{\"keccak256\":\"0x9af3b3f36de63e95977f09548617989e391b3c511cf0383ee35cefd5da7d3bfd\",\"urls\":[\"bzz-raw://97ce025c7d18540e4c24578db61cc5e33828be8e9a82b5cb5f46c99212f75ed1\",\"dweb:/ipfs/QmRrdWnd95rgCZzeaNiU4KUcGe1j7oDBj7LatpXhUmjbEE\"]},\"@summa-tx/relay-sol/contracts/Interfaces.sol\":{\"keccak256\":\"0x6f2698f8aab5cee319f36d69438b6870496a5523e7ccac4b465cdb38661242fa\",\"urls\":[\"bzz-raw://7f854c72db81631d1df800ae0c5fb0a50dc9efd97b0e6593b063c9fb1c61ef9e\",\"dweb:/ipfs/QmUMSQhzYKRSkLTGcHekjqvw1mLpeUULZkfffRdN521NBg\"]},\"@summa-tx/relay-sol/contracts/OnDemandSPV.sol\":{\"keccak256\":\"0x56757b0c8220558cd8c34a8c2679d74b7fe4769c087d6539068608a1ccc1bce2\",\"urls\":[\"bzz-raw://625fee9260c177bcf13bcca7001cec542edb91e9f0150fc5f2943df5a9961877\",\"dweb:/ipfs/QmfJWuP4snnVYnpjHypJgZLxzBW17ZhnfPnzpBtt2yLAUG\"]},\"@summa-tx/relay-sol/contracts/Relay.sol\":{\"keccak256\":\"0x4a6d12fa6570e2c787f9dc234edae9c1eb326e78eb2c6384c84d2b6ba0a0ad7e\",\"urls\":[\"bzz-raw://fa5365dc5a8312d0305568dbf297964be13567a7879395bfc3e99be2510e4e10\",\"dweb:/ipfs/QmfGZz6iL45xPcwQTT3XFAqb7McuY89niBEvfbhy513moF\"]},\"@summa-tx/relay-sol/contracts/TestnetRelay.sol\":{\"keccak256\":\"0x04883856ccd9e6688d757af666ab04f0ab5e56bbb2f500966da3b27f3031366b\",\"urls\":[\"bzz-raw://204a0a0683bc53608086ed3ed0ef41b36bc96b5df5862fd0c2b72dfad0bf8541\",\"dweb:/ipfs/QmdVUw96EjBBks1cRnX6uCwXtsjJVR7P5zHhwaedjEfpFE\"]}},\"version\":1}",
  "bytecode": "0x60806040526207a120600b553480156200001857600080fd5b5060405162003c3d38038062003c3d833981810160405260808110156200003e57600080fd5b81019080805160405193929190846401000000008211156200005f57600080fd5b9083019060208201858111156200007557600080fd5b82516401000000008111828201881017156200009057600080fd5b82525081516020918201929091019080838360005b83811015620000bf578181015183820152602001620000a5565b50505050905090810190601f168015620000ed5780820380516001836020036101000a031916815260200191505b506040908152602082015190820151606090920151855191945091925084908490849084908490849084906050146200015f576040805162461bcd60e51b815260206004820152600f60248201526e29ba37b8103132b4b73390323ab6b160891b604482015290519081900360640190fd5b600062000177846200024060201b6200162a1760201c565b905062ffffff821615620001bd5760405162461bcd60e51b815260040180806020018281038252603d81526020018062003c00603d913960400191505060405180910390fd5b600081815560018290556002829055818152600460205260409020839055620001f96107e08406846200037960201b62002f041790919060201c565b60046000848152602001908152602001600020819055506200022684620003d760201b620023cc1760201c565b600555505050600991909155505050505050505062000658565b6000600280836040518082805190602001908083835b60208310620002775780518252601f19909201916020918201910162000256565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015620002b7573d6000803e3d6000fd5b5050506040513d6020811015620002cd57600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b602083106200031b5780518252601f199092019160209182019101620002fa565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa1580156200035b573d6000803e3d6000fd5b5050506040513d60208110156200037157600080fd5b505192915050565b600082821115620003d1576040805162461bcd60e51b815260206004820152601d60248201527f556e646572666c6f7720647572696e67207375627472616374696f6e2e000000604482015290519081900360640190fd5b50900390565b600062000400620003f1836001600160e01b036200040616565b6001600160e01b036200048616565b92915050565b60006060620004286048600385620004a760201b62002aab179092919060201c565b9050600083604b815181106200043a57fe5b016020015160f81c905060006200046d6200045e846001600160e01b036200057216565b6001600160e01b036200060416565b6002199290920160ff166101000a909102949350505050565b6000620004008261ffff60d01b6200064460201b6200326d1790919060201c565b606081620004c557506040805160208101909152600081526200056b565b8282018381118015620004d9575080855110155b6200052b576040805162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e647300000000000000000000000000604482015290519081900360640190fd5b604051915082604083010160405282825283850182038460208701018481015b8082101562000566578151838301526020820191506200054b565b505050505b9392505050565b60608082516040519080825280601f01601f191660200182016040528015620005a2576020820181803883390190505b50905060005b8351811015620005fd57838181518110620005bf57fe5b602001015160f81c60f81b826001838751030381518110620005dd57fe5b60200101906001600160f81b031916908160001a905350600101620005a8565b5092915050565b600080805b8351811015620005fd578060010184510360080260020a8482815181106200062d57fe5b016020015160f81c02919091019060010162000609565b60008183816200065057fe5b049392505050565b61359880620006686000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806374c3a3a9116100b8578063a882e8641161007c578063a882e8641461058f578063ad401de614610597578063b985621a1461071e578063c58242cd14610747578063c58343ef1461074f578063e3d8d8d8146107c357610137565b806374c3a3a9146102c65780637fa637fc1461038b5780639426323414610499578063a00d95261461057f578063a24022aa1461058757610137565b806330017b3b116100ff57806330017b3b146101765780633015394c1461019957806360b5c390146101ca57806365da41b9146101e757806370d53c18146102a557610137565b8063113764be1461013c5780631910d973146101565780631e96917d1461015e57806329798b96146101665780632b97be241461016e575b600080fd5b6101446107cb565b60408051918252519081900360200190f35b6101446107d1565b6101446107d7565b6101446107dd565b6101446107e3565b6101446004803603604081101561018c57600080fd5b50803590602001356107e9565b6101b6600480360360208110156101af57600080fd5b50356107fe565b604080519115158252519081900360200190f35b610144600480360360208110156101e057600080fd5b503561091c565b6101b6600480360360408110156101fd57600080fd5b810190602081018135600160201b81111561021757600080fd5b82018360208201111561022957600080fd5b803590602001918460018302840111600160201b8311171561024a57600080fd5b919390929091602081019035600160201b81111561026757600080fd5b82018360208201111561027957600080fd5b803590602001918460018302840111600160201b8311171561029a57600080fd5b509092509050610927565b6102ad6109a7565b6040805163ffffffff9092168252519081900360200190f35b6101b6600480360360808110156102dc57600080fd5b81359190810190604081016020820135600160201b8111156102fd57600080fd5b82018360208201111561030f57600080fd5b803590602001918460018302840111600160201b8311171561033057600080fd5b919390929091602081019035600160201b81111561034d57600080fd5b82018360208201111561035f57600080fd5b803590602001918460018302840111600160201b8311171561038057600080fd5b9193509150356109ac565b6101b6600480360360608110156103a157600080fd5b810190602081018135600160201b8111156103bb57600080fd5b8201836020820111156103cd57600080fd5b803590602001918460018302840111600160201b831117156103ee57600080fd5b919390929091602081019035600160201b81111561040b57600080fd5b82018360208201111561041d57600080fd5b803590602001918460018302840111600160201b8311171561043e57600080fd5b919390929091602081019035600160201b81111561045b57600080fd5b82018360208201111561046d57600080fd5b803590602001918460018302840111600160201b8311171561048e57600080fd5b509092509050610a2f565b610144600480360360c08110156104af57600080fd5b810190602081018135600160201b8111156104c957600080fd5b8201836020820111156104db57600080fd5b803590602001918460018302840111600160201b831117156104fc57600080fd5b919390929091602081019035600160201b81111561051957600080fd5b82018360208201111561052b57600080fd5b803590602001918460018302840111600160201b8311171561054c57600080fd5b919350915067ffffffffffffffff813516906001600160a01b036020820135169060ff6040820135169060600135610ad8565b610144610b60565b610144610b67565b610144610b6d565b6101b660048036036101208110156105ae57600080fd5b810190602081018135600160201b8111156105c857600080fd5b8201836020820111156105da57600080fd5b803590602001918460018302840111600160201b831117156105fb57600080fd5b919390929091602081019035600160201b81111561061857600080fd5b82018360208201111561062a57600080fd5b803590602001918460018302840111600160201b8311171561064b57600080fd5b919390926001600160e01b0319833581169360208101359091169260408201359261ffff6060840135169260a081019060800135600160201b81111561069057600080fd5b8201836020820111156106a257600080fd5b803590602001918460018302840111600160201b831117156106c357600080fd5b919390929091602081019035600160201b8111156106e057600080fd5b8201836020820111156106f257600080fd5b803590602001918460018302840111600160201b8311171561071357600080fd5b919350915035610b73565b6101b66004803603606081101561073457600080fd5b5080359060208101359060400135610dad565b610144610dc4565b61076c6004803603602081101561076557600080fd5b5035610dca565b60408051988952602089019790975267ffffffffffffffff9095168787015260ff93841660608801526001600160a01b039283166080880152911660a08601521660c084015260e083015251908190036101000190f35b610144610e56565b60055490565b60015490565b60095481565b600a5481565b60065490565b60006107f58383610e5c565b90505b92915050565b600081815260086020526040812060016004820154600160a01b900460ff16600281111561082857fe5b1461086f576040805162461bcd60e51b815260206004820152601260248201527152657175657374206e6f742061637469766560701b604482015290519081900360640190fd5b60038101546001600160a01b0316331480610896575060048101546001600160a01b031633145b6108d15760405162461bcd60e51b815260040180806020018281038252602a8152602001806134ae602a913960400191505060405180910390fd5b60048101805460ff60a01b1916600160a11b17905560405183907f4287938c90f288c18d761d34c3a5ad998017f7e890a72628c9636bb82ea286bd90600090a260019150505b919050565b60006107f882610ed8565b600061099c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8901819004810282018101909252878152925087915086908190840183828082843760009201829052509250610f83915050565b90505b949350505050565b600481565b6000610a248787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250889250610f8f915050565b979650505050505050565b6000610a2487878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525050604080516020601f8a01819004810282018101909252888152925088915087908190840183828082843760009201919091525061118c92505050565b6000610b5389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a925089915088905087611198565b9998505050505050505050565b6201518081565b600b5481565b600a5490565b600080610be78b888888888f60405160200180876001600160e01b0319166001600160e01b03191681526004018686808284379190910190508484808284376001600160e01b03199094169190930190815260408051601b1981840301815260049092019052965061162a95505050505050565b60008181526007602052604090205490915060ff16610ca957610c898f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e925086915088905061175b565b506000818152600760205260409020805460ff19166001179055600a8190555b610d1f8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a91508990819084018382808284376000920191909152508992506118c1915050565b50610d97818989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a9250611c14915050565b5060019f9e505050505050505050505050505050565b6000610dba848484611eeb565b90505b9392505050565b60025490565b600081815260086020526040812080546001820154600383015460048401549294919367ffffffffffffffff600160a01b928390041693839283928392839260ff9104166002811115610e1957fe5b600382015460048301546002909301549a9c999b50979990986001600160a01b03808a169993169750600160e01b90920460ff1695509350915050565b60005490565b600082815b83811015610e92576000918252600360205260409091205490610e8b81600163ffffffff611f4016565b9050610e61565b50806107f5576040805162461bcd60e51b815260206004820152601060248201526f2ab735b737bbb71030b731b2b9ba37b960811b604482015290519081900360640190fd5b60008082815b6005811015610f4557600082815260046020526040902054925082610f13576000918252600360205260409091205490610f2d565b610f23838263ffffffff611f4016565b9350505050610917565b610f3e81600163ffffffff611f4016565b9050610ede565b506040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20626c6f636b60981b604482015290519081900360640190fd5b6000610dba8484611f98565b60006107e0821115610fd25760405162461bcd60e51b815260040180806020018281038252603381526020018061342e6033913960400191505060405180910390fd5b6000610fdd8461162a565b90506000610fea8661162a565b90506001548114611042576040805162461bcd60e51b815260206004820181905260248201527f50617373656420696e2062657374206973206e6f742062657374206b6e6f776e604482015290519081900360640190fd5b600082815260036020526040902054611098576040805162461bcd60e51b81526020600482015260136024820152722732bb903132b9ba1034b9903ab735b737bbb760691b604482015290519081900360640190fd5b6110a68760015484876121ce565b6110e15760405162461bcd60e51b815260040180806020018281038252602981526020018061353b6029913960400191505060405180910390fd5b816110ed888888612270565b146111295760405162461bcd60e51b81526004018080602001828103825260338152602001806134d86033913960400191505060405180910390fd5b60018290556002879055600061113e866123cc565b9050600554811461114f5760058190555b8783837f3cc13de64df0f0239626235c51a2da251bbc8c85664ecce39263da3ee03f606c60405160405180910390a4506001979650505050505050565b6000610dba8383611f98565b60098054600181019091558651600091908790602414806111b857508851155b6111fc576040805162461bcd60e51b815260206004820152601060248201526f4e6f7420612076616c6964205554584f60801b604482015290519081900360640190fd5b805180158015906112245750600181038260008151811061121957fe5b016020015160f81c14155b156112aa578082604051602001808360ff1660ff1660f81b815260010182805190602001908083835b6020831061126c5780518252601f19909201916020918201910161124d565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405291506001810190505b6040516000602080830182815285516060948793602890910191908401908083835b602083106112eb5780518252601f1990920191602091820191016112cc565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050816000148061133a57506000611337826123df565b51115b8061134e5750600061134b82612613565b51115b61139f576040805162461bcd60e51b815260206004820152601a60248201527f4e6f742061207374616e64617264206f75747075742074797065000000000000604482015290519081900360640190fd5b60008b5111806113af5750600082115b6113f7576040805162461bcd60e51b8152602060048201526014602482015273139bc81c995c5d595cdd081cdc1958da599a595960621b604482015290519081900360640190fd5b60008481526008602052604090206004810180546001600160a01b031916331790558b511561142a578b5160208d012081555b821561143d578351602085012060018201555b67ffffffffffffffff8a16156114765760038101805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8d16021790555b60008860ff1611801561148c575060f18860ff16105b156114ac5760038101805460ff60e01b1916600160e01b60ff8b16021790555b86156114ba57600281018790555b6003810180546001600160a01b0319166001600160a01b038b161790556004810180546001919060ff60a01b1916600160a01b83021790555084336001600160a01b03167ff6744579059b48cd66d2c2dfe223754f166f2200b6de2bc6e0d239cd52d1a8c48c8f88604051808467ffffffffffffffff1667ffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561157d578181015183820152602001611565565b50505050905090810190601f1680156115aa5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156115dd5781810151838201526020016115c5565b50505050905090810190601f16801561160a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350929a9950505050505050505050565b6000600280836040518082805190602001908083835b6020831061165f5780518252601f199092019160209182019101611640565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801561169e573d6000803e3d6000fd5b5050506040513d60208110156116b357600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b602083106116ff5780518252601f1990920191602091820191016116e0565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801561173e573d6000803e3d6000fd5b5050506040513d602081101561175357600080fd5b505192915050565b60006117798361177261176d89612688565b61269d565b87876126b9565b6117c0576040805162461bcd60e51b81526020600482015260136024820152722130b21034b731b63ab9b4b7b710383937b7b360691b604482015290519081900360640190fd5b60006117cb8761162a565b905060006117d7610dc4565b90506117e5828260f0611eeb565b611836576040805162461bcd60e51b815260206004820152601b60248201527f47434420646f6573206e6f7420636f6e6669726d206865616465720000000000604482015290519081900360640190fd5b600084815260086020526040902060030154600160e01b900460ff168061185c84612767565b60ff1610156118b2576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420636f6e6669726d6174696f6e73000000000000604482015290519081900360640190fd5b50600198975050505050505050565b60006118cc84612784565b611913576040805162461bcd60e51b8152602060048201526013602482015272159a5b881a5cc81b585b199bdc9b585d1d1959606a1b604482015290519081900360640190fd5b61191c83612836565b611964576040805162461bcd60e51b8152602060048201526014602482015273159bdd5d081a5cc81b585b199bdc9b585d1d195960621b604482015290519081900360640190fd5b6000828152600860208190526040909120600281015460ff9288901c831692881691904210156119db576040805162461bcd60e51b815260206004820152601e60248201527f52657175657374206973207375626d697474656420746f6f206561726c790000604482015290519081900360640190fd5b60016004820154600160a01b900460ff1660028111156119f757fe5b14611a41576040805162461bcd60e51b815260206004820152601560248201527452657175657374206973206e6f742061637469766560581b604482015290519081900360640190fd5b60018101548015801590611b72576060611a648960ff871663ffffffff6128db16565b90506060611a8160088084510384612aab9092919063ffffffff16565b905083818051906020012014611ade576040805162461bcd60e51b815260206004820152601b60248201527f446f6573206e6f74206d61746368207061797320726571756573740000000000604482015290519081900360640190fd5b6003850154600160a01b900467ffffffffffffffff16801580611b1d57508067ffffffffffffffff16611b1084612b65565b67ffffffffffffffff1610155b611b6e576040805162461bcd60e51b815260206004820152601c60248201527f446f6573206e6f74206d617463682076616c7565207265717565737400000000604482015290519081900360640190fd5b5050505b82548015801590611c02576060611b928c60ff8a1663ffffffff612b8a16565b9050811580611baf575082611ba682612d30565b80519060200120145b611c00576040805162461bcd60e51b815260206004820152601d60248201527f446f6573206e6f74206d61746368207370656e64732072657175657374000000604482015290519081900360640190fd5b505b5060019b9a5050505050505050505050565b60008060086000848152602001908152602001600020905060008160030160009054906101000a90046001600160a01b03169050600060088861ffff16901c905060008860ff169050826001600160a01b0316600b54846001600160a01b0316630140356d905060e01b8c8b8b8b88886040516020018087815260200180602001806020018681526020018560ff1660ff1681526020018460ff1660ff168152602001838103835288818151815260200191508051906020019080838360005b83811015611cec578181015183820152602001611cd4565b50505050905090810190601f168015611d195780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b83811015611d4c578181015183820152602001611d34565b50505050905090810190601f168015611d795780820380516001836020036101000a031916815260200191505b509850505050505050505060405160208183030381529060405260405160200180836001600160e01b0319166001600160e01b031916815260040182805190602001908083835b60208310611ddf5780518252601f199092019160209182019101611dc0565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b60208310611e435780518252601f199092019160209182019101611e24565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d8060008114611ea6576040519150601f19603f3d011682016040523d82523d6000602084013e611eab565b606091505b50506040518791508b907f97b6ce150a3b8e94c442fb09fe13c2b262f0e9b3bfc83ef2309675e09dcb453b90600090a35060019998505050505050505050565b600082815b83811015611f345785821415611f0b57600192505050610dbd565b6000918252600360205260409091205490611f2d81600163ffffffff611f4016565b9050611ef0565b50600095945050505050565b818101828110156107f8576040805162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b6000806060600080611fa98761162a565b90506000611fb682610ed8565b90506050875181611fc357fe5b06156120005760405162461bcd60e51b815260040180806020018281038252602b815260200180613483602b913960400191505060405180910390fd5b60005b605088518161200e57fe5b0481101561218c5761203961202a82605063ffffffff612d4516565b8990605063ffffffff612aab16565b945061204e826001830163ffffffff611f4016565b95506120598561162a565b6000818152600360205260409020549094506121265761207885612db5565b6120a86120a38660405160200180828152602001915050604051602081830303815290604052612e0e565b612e9b565b11156120fb576040805162461bcd60e51b815260206004820152601b60248201527f48656164657220776f726b20697320696e73756666696369656e740000000000604482015290519081900360640190fd5b6000848152600360205260409020839055600486066121265760008481526004602052604090208690555b612136858463ffffffff612ed816565b6121715760405162461bcd60e51b81526004018080602001828103825260268152602001806134086026913960400191505060405180910390fd5b83925061218581600163ffffffff611f4016565b9050612003565b50826121978961162a565b6040517ff90e4f1d9cd0dd55e339411cbc9b152482307c3a23ed64715e4a2858f641a3f590600090a3506001979650505050505050565b600083851480156121de57508285145b156121eb5750600161099f565b8383818160005b8681101561224657898314612214576000838152600360205260409020549294505b89821461222e576000828152600360205260409020549193505b61223f81600163ffffffff611f4016565b90506121f2565b508284141561225c57600094505050505061099f565b8082146118b257600094505050505061099f565b60008061227c85610ed8565b9050600061229161228c8661162a565b610ed8565b905060006122a161228c8661162a565b90508282101580156122b35750828110155b6122ee5760405162461bcd60e51b815260040180806020018281038252603081526020018061350b6030913960400191505060405180910390fd5b60006123166107e0850661230a866107e063ffffffff611f4016565b9063ffffffff612f0416565b90508083108183108115826123285750805b15612343576123368961162a565b9650505050505050610dbd565b81801561234e575080155b1561235c576123368861162a565b8180156123665750805b1561238a57838510156123815761237c8861162a565b612336565b6123368961162a565b6123a8612396896123cc565b6107e0865b069063ffffffff612d4516565b6123bd6123b48b6123cc565b6107e08861239b565b1015612381576123368861162a565b60006107f86123da83612db5565b612f61565b60606000826008815181106123f057fe5b0160200151835160f89190911c91506009820160ff1614612421575050604080516020810190915260008152610917565b8260098151811061242e57fe5b016020015160f81c6124d15760028160ff16101561245c575050604080516020810190915260008152610917565b600083600a8151811061246b57fe5b016020015160f81c9050600119820160ff1681141580612498575080602014158015612498575080601414155b156124b6576040518060200160405280600081525092505050610917565b6124c884600b8363ffffffff612aab16565b92505050610917565b60006124e6846008600363ffffffff612f7816565b60408051621976a960e81b815290519081900360030190209091508114156125915783600b8151811061251557fe5b60209101015160f81c60141415806125605750604051808061222b60f21b8152506002019050604051809103902061255d6002865103600287612f789092919063ffffffff16565b14155b1561257e576040518060200160405280600081525092505050610917565b6124c884600c601463ffffffff612aab16565b604080516205ea4560ea1b815290519081900360030190208114156125fc57836001855103815181106125c057fe5b60209101015160f81c6087146125e9576040518060200160405280600081525092505050610917565b6124c884600b601463ffffffff612aab16565b505050604080516020810190915260008152919050565b60408051603560f91b815290516001918190038201902060609161263b908490600990612f78565b146126555750604080516020810190915260008152610917565b606061266a83600a600163ffffffff612aab16565b9050610dbd600b61267a83612e9b565b85919063ffffffff612aab16565b60606107f8826024602063ffffffff612aab16565b60008151600014156126b157506000610917565b506020015190565b600083851480156126c8575081155b80156126d357508251155b156126e05750600161099f565b60608584866040516020018084815260200183805190602001908083835b6020831061271d5780518252601f1990920191602091820191016126fe565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293909101905250925061275d915082905084612fdf565b9695505050505050565b600061277282610ed8565b61277d600154610ed8565b0392915050565b60008060006127928461311e565b90925090508015806127a5575060001982145b156127b557600092505050610917565b6001820160005b8281101561282957855182106127d9576000945050505050610917565b60606127f3838489510389612aab9092919063ffffffff16565b90506000612800826131aa565b905060001981141561281b5760009650505050505050610917565b9290920191506001016127bc565b5084511492505050919050565b60008060006128448461311e565b9092509050801580612857575060001982145b1561286757600092505050610917565b6001820160005b82811015612829578551821061288b576000945050505050610917565b60606128a5838489510389612aab9092919063ffffffff16565b905060006128b2826131dd565b90506000198114156128cd5760009650505050505050610917565b92909201915060010161286e565b60606000806128e98561311e565b909250905060001982141561292f5760405162461bcd60e51b81526004018080602001828103825260228152602001806134616022913960400191505060405180910390fd5b808410612977576040805162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b604482015290519081900360640190fd5b6060600060018401815b87811015612a11576129a182838b51038b612aab9092919063ffffffff16565b93506129ac846131dd565b9250600019831415612a05576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b90820190600101612981565b50612a2a81828a51038a612aab9092919063ffffffff16565b9250612a35836131dd565b9150600019821415612a8e576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b612a9f88828463ffffffff612aab16565b98975050505050505050565b606081612ac75750604080516020810190915260008152610dbd565b8282018381118015612ada575080855110155b612b21576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b604051915082604083010160405282825283850182038460208701018481015b80821015612b5a57815183830152602082019150612b41565b505050509392505050565b60006060612b7283613243565b90506060612b7f82612e0e565b905061099f81612e9b565b6060600080612b988561311e565b9092509050600019821415612bde5760405162461bcd60e51b81526004018080602001828103825260228152602001806134616022913960400191505060405180910390fd5b808410612c25576040805162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015290519081900360640190fd5b6060600060018401815b87811015612cb957612c4f82838b51038b612aab9092919063ffffffff16565b9350612c5a846131aa565b9250600019831415612cad576040805162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b604482015290519081900360640190fd5b90820190600101612c2f565b50612cd281828a51038a612aab9092919063ffffffff16565b9250612cdd836131aa565b9150600019821415612a8e576040805162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b604482015290519081900360640190fd5b60606107f8826000602463ffffffff612aab16565b600082612d54575060006107f8565b5081810281838281612d6257fe5b04146107f8576040805162461bcd60e51b815260206004820152601f60248201527f4f766572666c6f7720647572696e67206d756c7469706c69636174696f6e2e00604482015290519081900360640190fd5b60006060612dcc836048600363ffffffff612aab16565b9050600083604b81518110612ddd57fe5b016020015160f81c90506000612df56120a384612e0e565b6002199290920160ff166101000a909102949350505050565b60608082516040519080825280601f01601f191660200182016040528015612e3d576020820181803883390190505b50905060005b8351811015612e9457838181518110612e5857fe5b602001015160f81c60f81b826001838751030381518110612e7557fe5b60200101906001600160f81b031916908160001a905350600101612e43565b5092915050565b600080805b8351811015612e94578060010184510360080260020a848281518110612ec257fe5b016020015160f81c029190910190600101612ea0565b600080612ee761176d85613258565b9050828114612efa5760009150506107f8565b5060019392505050565b600082821115612f5b576040805162461bcd60e51b815260206004820152601d60248201527f556e646572666c6f7720647572696e67207375627472616374696f6e2e000000604482015290519081900360640190fd5b50900390565b60006107f861ffff60d01b8363ffffffff61326d16565b60008282018381118015612f8d575080855110155b612fd4576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b505091016020012090565b60006020835181612fec57fe5b0615612ffa575060006107f8565b82516020141561300c575060016107f8565b82516040141561301e575060006107f8565b825182906000906130409061176d908790601f1901602063ffffffff612aab16565b9050600061305961176d8783602063ffffffff612aab16565b905060015b865160019061307490602063ffffffff61326d16565b038110156131145760028406600114156130cc576130c56130a08860208085029063ffffffff612aab16565b8360405160200180828152602001915050604051602081830303815290604052613280565b9150613108565b60408051602080820185905282518083038201815291830190925261310591613100908a908581029063ffffffff612aab16565b613280565b91505b600193841c930161305e565b5014949350505050565b600080600061312c8461333b565b905060ff81166131595760008460008151811061314557fe5b016020015190935060f81c91506131a59050565b8060010160ff168451101561317757506000199150600090506131a5565b60006131996120a361319487600160ff871663ffffffff612aab16565b612e0e565b60ff9092169350909150505b915091565b60008060006131b8846133b7565b90925090506000198214156131d35760001992505050610917565b0160290192915050565b60006009825110156131f25750600019610917565b606061320d60088085510385612aab9092919063ffffffff16565b905060008061321b8361311e565b9092509050600019821415613237576000199350505050610917565b01600901915050919050565b60606107f8826000600863ffffffff612aab16565b60606107f8826004602063ffffffff612aab16565b600081838161327857fe5b049392505050565b60006107f583836040516020018083805190602001908083835b602083106132b95780518252601f19909201916020918201910161329a565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106133015780518252601f1990920191602091820191016132e2565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405261162a565b60008160008151811061334a57fe5b60209101015160f81c60ff141561336357506008610917565b8160008151811061337057fe5b60209101015160f81c60fe141561338957506004610917565b8160008151811061339657fe5b60209101015160f81c60fd14156133af57506002610917565b506000919050565b6000806025835110156133d15750600019905060006131a5565b60606133ec60248086510386612aab9092919063ffffffff16565b90506000806133fa8361311e565b909550935050505091509156fe4865616465727320646f206e6f7420666f726d206120636f6e73697374656e7420636861696e526571756573746564206c696d69742069732067726561746572207468616e203120646966666963756c747920706572696f6452656164206f76657272756e20647572696e6720566172496e742070617273696e67486561646572206172726179206c656e677468206d75737420626520646976697369626c6520627920383043616e206f6e6c792062652063616e63656c6c6564206279206f776e6572206f7220636f6e73756d65724e65772062657374206861736820646f6573206e6f742068617665206d6f726520776f726b207468616e2070726576696f7573412064657363656e64616e74206865696768742069732062656c6f772074686520616e636573746f7220686569676874416e636573746f72206d75737420626520686561766965737420636f6d6d6f6e20616e636573746f72a265627a7a723158206ed290dbc9fcda5971cb159e23f675634d1db5dd03f740332fadc483c744b45564736f6c63430005110032506572696f64207374617274206861736820646f6573206e6f74206861766520776f726b2e2048696e743a2077726f6e672062797465206f726465723f",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806374c3a3a9116100b8578063a882e8641161007c578063a882e8641461058f578063ad401de614610597578063b985621a1461071e578063c58242cd14610747578063c58343ef1461074f578063e3d8d8d8146107c357610137565b806374c3a3a9146102c65780637fa637fc1461038b5780639426323414610499578063a00d95261461057f578063a24022aa1461058757610137565b806330017b3b116100ff57806330017b3b146101765780633015394c1461019957806360b5c390146101ca57806365da41b9146101e757806370d53c18146102a557610137565b8063113764be1461013c5780631910d973146101565780631e96917d1461015e57806329798b96146101665780632b97be241461016e575b600080fd5b6101446107cb565b60408051918252519081900360200190f35b6101446107d1565b6101446107d7565b6101446107dd565b6101446107e3565b6101446004803603604081101561018c57600080fd5b50803590602001356107e9565b6101b6600480360360208110156101af57600080fd5b50356107fe565b604080519115158252519081900360200190f35b610144600480360360208110156101e057600080fd5b503561091c565b6101b6600480360360408110156101fd57600080fd5b810190602081018135600160201b81111561021757600080fd5b82018360208201111561022957600080fd5b803590602001918460018302840111600160201b8311171561024a57600080fd5b919390929091602081019035600160201b81111561026757600080fd5b82018360208201111561027957600080fd5b803590602001918460018302840111600160201b8311171561029a57600080fd5b509092509050610927565b6102ad6109a7565b6040805163ffffffff9092168252519081900360200190f35b6101b6600480360360808110156102dc57600080fd5b81359190810190604081016020820135600160201b8111156102fd57600080fd5b82018360208201111561030f57600080fd5b803590602001918460018302840111600160201b8311171561033057600080fd5b919390929091602081019035600160201b81111561034d57600080fd5b82018360208201111561035f57600080fd5b803590602001918460018302840111600160201b8311171561038057600080fd5b9193509150356109ac565b6101b6600480360360608110156103a157600080fd5b810190602081018135600160201b8111156103bb57600080fd5b8201836020820111156103cd57600080fd5b803590602001918460018302840111600160201b831117156103ee57600080fd5b919390929091602081019035600160201b81111561040b57600080fd5b82018360208201111561041d57600080fd5b803590602001918460018302840111600160201b8311171561043e57600080fd5b919390929091602081019035600160201b81111561045b57600080fd5b82018360208201111561046d57600080fd5b803590602001918460018302840111600160201b8311171561048e57600080fd5b509092509050610a2f565b610144600480360360c08110156104af57600080fd5b810190602081018135600160201b8111156104c957600080fd5b8201836020820111156104db57600080fd5b803590602001918460018302840111600160201b831117156104fc57600080fd5b919390929091602081019035600160201b81111561051957600080fd5b82018360208201111561052b57600080fd5b803590602001918460018302840111600160201b8311171561054c57600080fd5b919350915067ffffffffffffffff813516906001600160a01b036020820135169060ff6040820135169060600135610ad8565b610144610b60565b610144610b67565b610144610b6d565b6101b660048036036101208110156105ae57600080fd5b810190602081018135600160201b8111156105c857600080fd5b8201836020820111156105da57600080fd5b803590602001918460018302840111600160201b831117156105fb57600080fd5b919390929091602081019035600160201b81111561061857600080fd5b82018360208201111561062a57600080fd5b803590602001918460018302840111600160201b8311171561064b57600080fd5b919390926001600160e01b0319833581169360208101359091169260408201359261ffff6060840135169260a081019060800135600160201b81111561069057600080fd5b8201836020820111156106a257600080fd5b803590602001918460018302840111600160201b831117156106c357600080fd5b919390929091602081019035600160201b8111156106e057600080fd5b8201836020820111156106f257600080fd5b803590602001918460018302840111600160201b8311171561071357600080fd5b919350915035610b73565b6101b66004803603606081101561073457600080fd5b5080359060208101359060400135610dad565b610144610dc4565b61076c6004803603602081101561076557600080fd5b5035610dca565b60408051988952602089019790975267ffffffffffffffff9095168787015260ff93841660608801526001600160a01b039283166080880152911660a08601521660c084015260e083015251908190036101000190f35b610144610e56565b60055490565b60015490565b60095481565b600a5481565b60065490565b60006107f58383610e5c565b90505b92915050565b600081815260086020526040812060016004820154600160a01b900460ff16600281111561082857fe5b1461086f576040805162461bcd60e51b815260206004820152601260248201527152657175657374206e6f742061637469766560701b604482015290519081900360640190fd5b60038101546001600160a01b0316331480610896575060048101546001600160a01b031633145b6108d15760405162461bcd60e51b815260040180806020018281038252602a8152602001806134ae602a913960400191505060405180910390fd5b60048101805460ff60a01b1916600160a11b17905560405183907f4287938c90f288c18d761d34c3a5ad998017f7e890a72628c9636bb82ea286bd90600090a260019150505b919050565b60006107f882610ed8565b600061099c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8901819004810282018101909252878152925087915086908190840183828082843760009201829052509250610f83915050565b90505b949350505050565b600481565b6000610a248787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250889250610f8f915050565b979650505050505050565b6000610a2487878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525050604080516020601f8a01819004810282018101909252888152925088915087908190840183828082843760009201919091525061118c92505050565b6000610b5389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a925089915088905087611198565b9998505050505050505050565b6201518081565b600b5481565b600a5490565b600080610be78b888888888f60405160200180876001600160e01b0319166001600160e01b03191681526004018686808284379190910190508484808284376001600160e01b03199094169190930190815260408051601b1981840301815260049092019052965061162a95505050505050565b60008181526007602052604090205490915060ff16610ca957610c898f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e925086915088905061175b565b506000818152600760205260409020805460ff19166001179055600a8190555b610d1f8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a91508990819084018382808284376000920191909152508992506118c1915050565b50610d97818989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a9250611c14915050565b5060019f9e505050505050505050505050505050565b6000610dba848484611eeb565b90505b9392505050565b60025490565b600081815260086020526040812080546001820154600383015460048401549294919367ffffffffffffffff600160a01b928390041693839283928392839260ff9104166002811115610e1957fe5b600382015460048301546002909301549a9c999b50979990986001600160a01b03808a169993169750600160e01b90920460ff1695509350915050565b60005490565b600082815b83811015610e92576000918252600360205260409091205490610e8b81600163ffffffff611f4016565b9050610e61565b50806107f5576040805162461bcd60e51b815260206004820152601060248201526f2ab735b737bbb71030b731b2b9ba37b960811b604482015290519081900360640190fd5b60008082815b6005811015610f4557600082815260046020526040902054925082610f13576000918252600360205260409091205490610f2d565b610f23838263ffffffff611f4016565b9350505050610917565b610f3e81600163ffffffff611f4016565b9050610ede565b506040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20626c6f636b60981b604482015290519081900360640190fd5b6000610dba8484611f98565b60006107e0821115610fd25760405162461bcd60e51b815260040180806020018281038252603381526020018061342e6033913960400191505060405180910390fd5b6000610fdd8461162a565b90506000610fea8661162a565b90506001548114611042576040805162461bcd60e51b815260206004820181905260248201527f50617373656420696e2062657374206973206e6f742062657374206b6e6f776e604482015290519081900360640190fd5b600082815260036020526040902054611098576040805162461bcd60e51b81526020600482015260136024820152722732bb903132b9ba1034b9903ab735b737bbb760691b604482015290519081900360640190fd5b6110a68760015484876121ce565b6110e15760405162461bcd60e51b815260040180806020018281038252602981526020018061353b6029913960400191505060405180910390fd5b816110ed888888612270565b146111295760405162461bcd60e51b81526004018080602001828103825260338152602001806134d86033913960400191505060405180910390fd5b60018290556002879055600061113e866123cc565b9050600554811461114f5760058190555b8783837f3cc13de64df0f0239626235c51a2da251bbc8c85664ecce39263da3ee03f606c60405160405180910390a4506001979650505050505050565b6000610dba8383611f98565b60098054600181019091558651600091908790602414806111b857508851155b6111fc576040805162461bcd60e51b815260206004820152601060248201526f4e6f7420612076616c6964205554584f60801b604482015290519081900360640190fd5b805180158015906112245750600181038260008151811061121957fe5b016020015160f81c14155b156112aa578082604051602001808360ff1660ff1660f81b815260010182805190602001908083835b6020831061126c5780518252601f19909201916020918201910161124d565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405291506001810190505b6040516000602080830182815285516060948793602890910191908401908083835b602083106112eb5780518252601f1990920191602091820191016112cc565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050816000148061133a57506000611337826123df565b51115b8061134e5750600061134b82612613565b51115b61139f576040805162461bcd60e51b815260206004820152601a60248201527f4e6f742061207374616e64617264206f75747075742074797065000000000000604482015290519081900360640190fd5b60008b5111806113af5750600082115b6113f7576040805162461bcd60e51b8152602060048201526014602482015273139bc81c995c5d595cdd081cdc1958da599a595960621b604482015290519081900360640190fd5b60008481526008602052604090206004810180546001600160a01b031916331790558b511561142a578b5160208d012081555b821561143d578351602085012060018201555b67ffffffffffffffff8a16156114765760038101805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8d16021790555b60008860ff1611801561148c575060f18860ff16105b156114ac5760038101805460ff60e01b1916600160e01b60ff8b16021790555b86156114ba57600281018790555b6003810180546001600160a01b0319166001600160a01b038b161790556004810180546001919060ff60a01b1916600160a01b83021790555084336001600160a01b03167ff6744579059b48cd66d2c2dfe223754f166f2200b6de2bc6e0d239cd52d1a8c48c8f88604051808467ffffffffffffffff1667ffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561157d578181015183820152602001611565565b50505050905090810190601f1680156115aa5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156115dd5781810151838201526020016115c5565b50505050905090810190601f16801561160a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350929a9950505050505050505050565b6000600280836040518082805190602001908083835b6020831061165f5780518252601f199092019160209182019101611640565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801561169e573d6000803e3d6000fd5b5050506040513d60208110156116b357600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b602083106116ff5780518252601f1990920191602091820191016116e0565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801561173e573d6000803e3d6000fd5b5050506040513d602081101561175357600080fd5b505192915050565b60006117798361177261176d89612688565b61269d565b87876126b9565b6117c0576040805162461bcd60e51b81526020600482015260136024820152722130b21034b731b63ab9b4b7b710383937b7b360691b604482015290519081900360640190fd5b60006117cb8761162a565b905060006117d7610dc4565b90506117e5828260f0611eeb565b611836576040805162461bcd60e51b815260206004820152601b60248201527f47434420646f6573206e6f7420636f6e6669726d206865616465720000000000604482015290519081900360640190fd5b600084815260086020526040902060030154600160e01b900460ff168061185c84612767565b60ff1610156118b2576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420636f6e6669726d6174696f6e73000000000000604482015290519081900360640190fd5b50600198975050505050505050565b60006118cc84612784565b611913576040805162461bcd60e51b8152602060048201526013602482015272159a5b881a5cc81b585b199bdc9b585d1d1959606a1b604482015290519081900360640190fd5b61191c83612836565b611964576040805162461bcd60e51b8152602060048201526014602482015273159bdd5d081a5cc81b585b199bdc9b585d1d195960621b604482015290519081900360640190fd5b6000828152600860208190526040909120600281015460ff9288901c831692881691904210156119db576040805162461bcd60e51b815260206004820152601e60248201527f52657175657374206973207375626d697474656420746f6f206561726c790000604482015290519081900360640190fd5b60016004820154600160a01b900460ff1660028111156119f757fe5b14611a41576040805162461bcd60e51b815260206004820152601560248201527452657175657374206973206e6f742061637469766560581b604482015290519081900360640190fd5b60018101548015801590611b72576060611a648960ff871663ffffffff6128db16565b90506060611a8160088084510384612aab9092919063ffffffff16565b905083818051906020012014611ade576040805162461bcd60e51b815260206004820152601b60248201527f446f6573206e6f74206d61746368207061797320726571756573740000000000604482015290519081900360640190fd5b6003850154600160a01b900467ffffffffffffffff16801580611b1d57508067ffffffffffffffff16611b1084612b65565b67ffffffffffffffff1610155b611b6e576040805162461bcd60e51b815260206004820152601c60248201527f446f6573206e6f74206d617463682076616c7565207265717565737400000000604482015290519081900360640190fd5b5050505b82548015801590611c02576060611b928c60ff8a1663ffffffff612b8a16565b9050811580611baf575082611ba682612d30565b80519060200120145b611c00576040805162461bcd60e51b815260206004820152601d60248201527f446f6573206e6f74206d61746368207370656e64732072657175657374000000604482015290519081900360640190fd5b505b5060019b9a5050505050505050505050565b60008060086000848152602001908152602001600020905060008160030160009054906101000a90046001600160a01b03169050600060088861ffff16901c905060008860ff169050826001600160a01b0316600b54846001600160a01b0316630140356d905060e01b8c8b8b8b88886040516020018087815260200180602001806020018681526020018560ff1660ff1681526020018460ff1660ff168152602001838103835288818151815260200191508051906020019080838360005b83811015611cec578181015183820152602001611cd4565b50505050905090810190601f168015611d195780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b83811015611d4c578181015183820152602001611d34565b50505050905090810190601f168015611d795780820380516001836020036101000a031916815260200191505b509850505050505050505060405160208183030381529060405260405160200180836001600160e01b0319166001600160e01b031916815260040182805190602001908083835b60208310611ddf5780518252601f199092019160209182019101611dc0565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b60208310611e435780518252601f199092019160209182019101611e24565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d8060008114611ea6576040519150601f19603f3d011682016040523d82523d6000602084013e611eab565b606091505b50506040518791508b907f97b6ce150a3b8e94c442fb09fe13c2b262f0e9b3bfc83ef2309675e09dcb453b90600090a35060019998505050505050505050565b600082815b83811015611f345785821415611f0b57600192505050610dbd565b6000918252600360205260409091205490611f2d81600163ffffffff611f4016565b9050611ef0565b50600095945050505050565b818101828110156107f8576040805162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b6000806060600080611fa98761162a565b90506000611fb682610ed8565b90506050875181611fc357fe5b06156120005760405162461bcd60e51b815260040180806020018281038252602b815260200180613483602b913960400191505060405180910390fd5b60005b605088518161200e57fe5b0481101561218c5761203961202a82605063ffffffff612d4516565b8990605063ffffffff612aab16565b945061204e826001830163ffffffff611f4016565b95506120598561162a565b6000818152600360205260409020549094506121265761207885612db5565b6120a86120a38660405160200180828152602001915050604051602081830303815290604052612e0e565b612e9b565b11156120fb576040805162461bcd60e51b815260206004820152601b60248201527f48656164657220776f726b20697320696e73756666696369656e740000000000604482015290519081900360640190fd5b6000848152600360205260409020839055600486066121265760008481526004602052604090208690555b612136858463ffffffff612ed816565b6121715760405162461bcd60e51b81526004018080602001828103825260268152602001806134086026913960400191505060405180910390fd5b83925061218581600163ffffffff611f4016565b9050612003565b50826121978961162a565b6040517ff90e4f1d9cd0dd55e339411cbc9b152482307c3a23ed64715e4a2858f641a3f590600090a3506001979650505050505050565b600083851480156121de57508285145b156121eb5750600161099f565b8383818160005b8681101561224657898314612214576000838152600360205260409020549294505b89821461222e576000828152600360205260409020549193505b61223f81600163ffffffff611f4016565b90506121f2565b508284141561225c57600094505050505061099f565b8082146118b257600094505050505061099f565b60008061227c85610ed8565b9050600061229161228c8661162a565b610ed8565b905060006122a161228c8661162a565b90508282101580156122b35750828110155b6122ee5760405162461bcd60e51b815260040180806020018281038252603081526020018061350b6030913960400191505060405180910390fd5b60006123166107e0850661230a866107e063ffffffff611f4016565b9063ffffffff612f0416565b90508083108183108115826123285750805b15612343576123368961162a565b9650505050505050610dbd565b81801561234e575080155b1561235c576123368861162a565b8180156123665750805b1561238a57838510156123815761237c8861162a565b612336565b6123368961162a565b6123a8612396896123cc565b6107e0865b069063ffffffff612d4516565b6123bd6123b48b6123cc565b6107e08861239b565b1015612381576123368861162a565b60006107f86123da83612db5565b612f61565b60606000826008815181106123f057fe5b0160200151835160f89190911c91506009820160ff1614612421575050604080516020810190915260008152610917565b8260098151811061242e57fe5b016020015160f81c6124d15760028160ff16101561245c575050604080516020810190915260008152610917565b600083600a8151811061246b57fe5b016020015160f81c9050600119820160ff1681141580612498575080602014158015612498575080601414155b156124b6576040518060200160405280600081525092505050610917565b6124c884600b8363ffffffff612aab16565b92505050610917565b60006124e6846008600363ffffffff612f7816565b60408051621976a960e81b815290519081900360030190209091508114156125915783600b8151811061251557fe5b60209101015160f81c60141415806125605750604051808061222b60f21b8152506002019050604051809103902061255d6002865103600287612f789092919063ffffffff16565b14155b1561257e576040518060200160405280600081525092505050610917565b6124c884600c601463ffffffff612aab16565b604080516205ea4560ea1b815290519081900360030190208114156125fc57836001855103815181106125c057fe5b60209101015160f81c6087146125e9576040518060200160405280600081525092505050610917565b6124c884600b601463ffffffff612aab16565b505050604080516020810190915260008152919050565b60408051603560f91b815290516001918190038201902060609161263b908490600990612f78565b146126555750604080516020810190915260008152610917565b606061266a83600a600163ffffffff612aab16565b9050610dbd600b61267a83612e9b565b85919063ffffffff612aab16565b60606107f8826024602063ffffffff612aab16565b60008151600014156126b157506000610917565b506020015190565b600083851480156126c8575081155b80156126d357508251155b156126e05750600161099f565b60608584866040516020018084815260200183805190602001908083835b6020831061271d5780518252601f1990920191602091820191016126fe565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293909101905250925061275d915082905084612fdf565b9695505050505050565b600061277282610ed8565b61277d600154610ed8565b0392915050565b60008060006127928461311e565b90925090508015806127a5575060001982145b156127b557600092505050610917565b6001820160005b8281101561282957855182106127d9576000945050505050610917565b60606127f3838489510389612aab9092919063ffffffff16565b90506000612800826131aa565b905060001981141561281b5760009650505050505050610917565b9290920191506001016127bc565b5084511492505050919050565b60008060006128448461311e565b9092509050801580612857575060001982145b1561286757600092505050610917565b6001820160005b82811015612829578551821061288b576000945050505050610917565b60606128a5838489510389612aab9092919063ffffffff16565b905060006128b2826131dd565b90506000198114156128cd5760009650505050505050610917565b92909201915060010161286e565b60606000806128e98561311e565b909250905060001982141561292f5760405162461bcd60e51b81526004018080602001828103825260228152602001806134616022913960400191505060405180910390fd5b808410612977576040805162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b604482015290519081900360640190fd5b6060600060018401815b87811015612a11576129a182838b51038b612aab9092919063ffffffff16565b93506129ac846131dd565b9250600019831415612a05576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b90820190600101612981565b50612a2a81828a51038a612aab9092919063ffffffff16565b9250612a35836131dd565b9150600019821415612a8e576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b612a9f88828463ffffffff612aab16565b98975050505050505050565b606081612ac75750604080516020810190915260008152610dbd565b8282018381118015612ada575080855110155b612b21576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b604051915082604083010160405282825283850182038460208701018481015b80821015612b5a57815183830152602082019150612b41565b505050509392505050565b60006060612b7283613243565b90506060612b7f82612e0e565b905061099f81612e9b565b6060600080612b988561311e565b9092509050600019821415612bde5760405162461bcd60e51b81526004018080602001828103825260228152602001806134616022913960400191505060405180910390fd5b808410612c25576040805162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015290519081900360640190fd5b6060600060018401815b87811015612cb957612c4f82838b51038b612aab9092919063ffffffff16565b9350612c5a846131aa565b9250600019831415612cad576040805162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b604482015290519081900360640190fd5b90820190600101612c2f565b50612cd281828a51038a612aab9092919063ffffffff16565b9250612cdd836131aa565b9150600019821415612a8e576040805162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b604482015290519081900360640190fd5b60606107f8826000602463ffffffff612aab16565b600082612d54575060006107f8565b5081810281838281612d6257fe5b04146107f8576040805162461bcd60e51b815260206004820152601f60248201527f4f766572666c6f7720647572696e67206d756c7469706c69636174696f6e2e00604482015290519081900360640190fd5b60006060612dcc836048600363ffffffff612aab16565b9050600083604b81518110612ddd57fe5b016020015160f81c90506000612df56120a384612e0e565b6002199290920160ff166101000a909102949350505050565b60608082516040519080825280601f01601f191660200182016040528015612e3d576020820181803883390190505b50905060005b8351811015612e9457838181518110612e5857fe5b602001015160f81c60f81b826001838751030381518110612e7557fe5b60200101906001600160f81b031916908160001a905350600101612e43565b5092915050565b600080805b8351811015612e94578060010184510360080260020a848281518110612ec257fe5b016020015160f81c029190910190600101612ea0565b600080612ee761176d85613258565b9050828114612efa5760009150506107f8565b5060019392505050565b600082821115612f5b576040805162461bcd60e51b815260206004820152601d60248201527f556e646572666c6f7720647572696e67207375627472616374696f6e2e000000604482015290519081900360640190fd5b50900390565b60006107f861ffff60d01b8363ffffffff61326d16565b60008282018381118015612f8d575080855110155b612fd4576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b505091016020012090565b60006020835181612fec57fe5b0615612ffa575060006107f8565b82516020141561300c575060016107f8565b82516040141561301e575060006107f8565b825182906000906130409061176d908790601f1901602063ffffffff612aab16565b9050600061305961176d8783602063ffffffff612aab16565b905060015b865160019061307490602063ffffffff61326d16565b038110156131145760028406600114156130cc576130c56130a08860208085029063ffffffff612aab16565b8360405160200180828152602001915050604051602081830303815290604052613280565b9150613108565b60408051602080820185905282518083038201815291830190925261310591613100908a908581029063ffffffff612aab16565b613280565b91505b600193841c930161305e565b5014949350505050565b600080600061312c8461333b565b905060ff81166131595760008460008151811061314557fe5b016020015190935060f81c91506131a59050565b8060010160ff168451101561317757506000199150600090506131a5565b60006131996120a361319487600160ff871663ffffffff612aab16565b612e0e565b60ff9092169350909150505b915091565b60008060006131b8846133b7565b90925090506000198214156131d35760001992505050610917565b0160290192915050565b60006009825110156131f25750600019610917565b606061320d60088085510385612aab9092919063ffffffff16565b905060008061321b8361311e565b9092509050600019821415613237576000199350505050610917565b01600901915050919050565b60606107f8826000600863ffffffff612aab16565b60606107f8826004602063ffffffff612aab16565b600081838161327857fe5b049392505050565b60006107f583836040516020018083805190602001908083835b602083106132b95780518252601f19909201916020918201910161329a565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106133015780518252601f1990920191602091820191016132e2565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405261162a565b60008160008151811061334a57fe5b60209101015160f81c60ff141561336357506008610917565b8160008151811061337057fe5b60209101015160f81c60fe141561338957506004610917565b8160008151811061339657fe5b60209101015160f81c60fd14156133af57506002610917565b506000919050565b6000806025835110156133d15750600019905060006131a5565b60606133ec60248086510386612aab9092919063ffffffff16565b90506000806133fa8361311e565b909550935050505091509156fe4865616465727320646f206e6f7420666f726d206120636f6e73697374656e7420636861696e526571756573746564206c696d69742069732067726561746572207468616e203120646966666963756c747920706572696f6452656164206f76657272756e20647572696e6720566172496e742070617273696e67486561646572206172726179206c656e677468206d75737420626520646976697369626c6520627920383043616e206f6e6c792062652063616e63656c6c6564206279206f776e6572206f7220636f6e73756d65724e65772062657374206861736820646f6573206e6f742068617665206d6f726520776f726b207468616e2070726576696f7573412064657363656e64616e74206865696768742069732062656c6f772074686520616e636573746f7220686569676874416e636573746f72206d75737420626520686561766965737420636f6d6d6f6e20616e636573746f72a265627a7a723158206ed290dbc9fcda5971cb159e23f675634d1db5dd03f740332fadc483c744b45564736f6c63430005110032",
  "sourceMap": "143:3409:56:-;;;1256:6:54;1220:42;;187:252:56;8:9:-1;5:2;;;30:1;27;20:12;5:2;187:252:56;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;187:252:56;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;187:252:56;;420:4:-1;411:14;;;;187:252:56;;;;;411:14:-1;187:252:56;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;187:252:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;187:252:56;;;;;;;;;;;;;;;;;1533:21:55;;187:252:56;;-1:-1:-1;187:252:56;;-1:-1:-1;344:14:56;;187:252;;;;;;344:14;;187:252;;;;1558:2:55;1533:27;1525:55;;;;;-1:-1:-1;;;1525:55:55;;;;;;;;;;;;-1:-1:-1;;;1525:55:55;;;;;;;;;;;;;;;1590:22;1615:24;:14;:22;;;;;:24;;:::i;:::-;1590:49;-1:-1:-1;1694:66:55;1671:90;;:104;1650:203;;;;-1:-1:-1;;;1650:203:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1864:12;:29;;;1903:15;:32;;;1945:23;:40;;;1995:27;;;:11;:27;;;;;:37;;;2070:27;2092:4;2025:7;2082:14;2070:7;:11;;;;;;:27;;;;:::i;:::-;2042:11;:25;2054:12;2042:25;;;;;;;;;;;:55;;;;2127:34;:14;:32;;;;;:34;;:::i;:::-;2108:16;:53;-1:-1:-1;;;1896:6:54;:17;;;;-1:-1:-1;;;;187:252:56;;;;143:3409;;5703:126:48;5760:7;5786:36;5810:10;5817:2;5810:10;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5810:10:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5810:10:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5810:10:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5810:10:48;5793:28;;;5810:10;5793:28;;;;;;;;;26:21:-1;;;22:32;;6:49;;5793:28:48;;;;;;;5786:36;;5793:28;;;;5786:36;;;;;5793:28;5786:36;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5786:36:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5786:36:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5786:36:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5786:36:48;;5703:126;-1:-1:-1;;5703:126:48:o;2288:160:51:-;2348:7;2381:2;2375;:8;;2367:50;;;;;-1:-1:-1;;;2367:50:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2434:7:51;;;2288:160::o;24914:148:48:-;24986:7;25012:43;25032:22;25046:7;-1:-1:-1;;;;;25032:13:48;:22;:::i;:::-;-1:-1:-1;;;;;25012:19:48;:43;:::i;:::-;25005:50;24914:148;-1:-1:-1;;24914:148:48:o;22696:316::-;22764:7;22783:15;22801:20;22815:2;22819:1;22801:7;:13;;;;;;:20;;;;;:::i;:::-;22783:38;;22831:8;22848:7;22856:2;22848:11;;;;;;;;;;;;;;;-1:-1:-1;22870:17:48;22890:34;22902:21;22920:2;-1:-1:-1;;;;;22902:17:48;:21;:::i;:::-;-1:-1:-1;;;;;22890:11:48;:34;:::i;:::-;-1:-1:-1;;22951:6:48;;;;22934:23;;22988:3;:16;22975:30;;;;22696:316;-1:-1:-1;;;;22696:316:48:o;23392:178::-;23461:7;23538:25;23555:7;-1:-1:-1;;;23538:16:48;;;;;;:25;;;;:::i;10345:924:49:-;10432:16;10464:12;10460:55;;-1:-1:-1;10492:12:49;;;;;;;;;-1:-1:-1;10492:12:49;;;;10460:55;10536:16;;;10570:13;;;:38;;;;;10604:4;10587:6;:13;:21;;10570:38;10562:70;;;;;-1:-1:-1;;;10562:70:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;10769:4;10763:11;10756:18;;10818:7;10813:2;10808:3;10804:12;10800:26;10794:4;10787:40;10852:7;10847:3;10840:20;10979:6;10971;10967:19;10962:3;10958:29;11055:6;11050:2;11042:6;11038:15;11034:28;11099:7;11094:3;11090:17;11001:252;11130:3;11125;11122:12;11001:252;;;11234:3;11228:10;11221:4;11216:3;11212:14;11205:34;11169:2;11164:3;11160:12;11153:19;;11001:252;;;11005:116;;10652:611;;;;;;;;:::o;2548:278:48:-;2615:12;2639:22;2674:2;:9;2664:20;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;2664:20:48;87:34:-1;135:17;;-1:-1;2664:20:48;-1:-1:-1;2639:45:48;-1:-1:-1;2700:6:48;2695:98;2716:2;:9;2712:1;:13;2695:98;;;2777:2;2780:1;2777:5;;;;;;;;;;;;;;;;2746:9;2772:1;2768;2756:2;:9;:13;:17;2746:28;;;;;;;;;;;:36;-1:-1:-1;;;;;2746:36:48;;;;;;;;-1:-1:-1;2727:3:48;;2695:98;;;-1:-1:-1;2810:9:48;2548:278;-1:-1:-1;;2548:278:48:o;4382:268::-;4443:7;;;4488:131;4509:2;:9;4505:1;:13;4488:131;;;4599:1;4603;4599:5;4586:2;:9;:19;4581:1;:25;4575:1;:32;4565:2;4568:1;4565:5;;;;;;;;;;;;;;4559:49;4549:59;;;;;4520:3;;4488:131;;1865:301:51;1925:7;2157:2;2152;:7;;;;;;;1865:301;-1:-1:-1;;;1865:301:51:o;143:3409:56:-;;;;;;;",
  "deployedSourceMap": "143:3409:56:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;143:3409:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2357:109:55;;;:::i;:::-;;;;;;;;;;;;;;;;3185:99;;;:::i;1155:21:54:-;;;:::i;1182:32::-;;;:::i;2646:103:55:-;;;:::i;4223:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4223:143:55;;;;;;;:::i;2209:431:54:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2209:431:54;;:::i;:::-;;;;;;;;;;;;;;;;;;3851:113:55;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3851:113:55;;:::i;5378:154::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5378:154:55;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5378:154:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5378:154:55;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5378:154:55;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5378:154:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5378:154:55;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;5378:154:55;;-1:-1:-1;5378:154:55;-1:-1:-1;5378:154:55;:::i;704:42::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6967:259;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6967:259:55;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6967:259:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6967:259:55;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6967:259:55;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6967:259:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6967:259:55;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6967:259:55;;-1:-1:-1;6967:259:55;-1:-1:-1;6967:259:55;;:::i;6088:286::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6088:286:55;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6088:286:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6088:286:55;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6088:286:55;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6088:286:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6088:286:55;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6088:286:55;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6088:286:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6088:286:55;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;6088:286:55;;-1:-1:-1;6088:286:55;-1:-1:-1;6088:286:55;:::i;4365:313:54:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4365:313:54;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4365:313:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4365:313:54;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4365:313:54;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4365:313:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4365:313:54;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4365:313:54;;-1:-1:-1;4365:313:54;-1:-1:-1;4365:313:54;;;;;-1:-1:-1;;;;;4365:313:54;;;;;;;;;;;;;;;;;:::i;1090:48::-;;;:::i;1220:42::-;;;:::i;2646:105::-;;;:::i;8293:973::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;8293:973:54;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8293:973:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8293:973:54;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8293:973:54;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8293:973:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8293:973:54;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8293:973:54;;;;-1:-1:-1;;;;;;8293:973:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8293:973:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8293:973:54;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8293:973:54;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8293:973:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8293:973:54;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8293:973:54;;-1:-1:-1;8293:973:54;-1:-1:-1;8293:973:54;;:::i;4821:172:55:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4821:172:55;;;;;;;;;;;;:::i;3478:115::-;;;:::i;3003:600:54:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3003:600:54;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3003:600:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2916:93:55;;;:::i;2357:109::-;2443:16;;2357:109;:::o;3185:99::-;3262:15;;3185:99;:::o;1155:21:54:-;;;;:::o;1182:32::-;;;;:::o;2646:103:55:-;2729:13;;2646:103;:::o;4223:143::-;4302:7;4328:31;4342:7;4351;4328:13;:31::i;:::-;4321:38;;4223:143;;;;;:::o;2209:431:54:-;2270:4;2314:20;;;:8;:20;;;;;2366;2352:10;;;;-1:-1:-1;;;2352:10:54;;;;:34;;;;;;;;;2344:65;;;;;-1:-1:-1;;;2344:65:54;;;;;;;;;;;;-1:-1:-1;;;2344:65:54;;;;;;;;;;;;;;;2441:13;;;;-1:-1:-1;;;;;2441:13:54;2427:10;:27;;:55;;-1:-1:-1;2472:10:54;;;;-1:-1:-1;;;;;2472:10:54;2458;:24;2427:55;2419:110;;;;-1:-1:-1;;;2419:110:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:10;;;:33;;-1:-1:-1;;;;2539:33:54;-1:-1:-1;;;2539:33:54;;;2587:25;;2601:10;;2587:25;;-1:-1:-1;;2587:25:54;2629:4;2622:11;;;2209:431;;;;:::o;3851:113:55:-;3911:7;3937:20;3949:7;3937:11;:20::i;5378:154::-;5465:4;5488:37;5500:7;;5488:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;5488:37:55;;;;137:4:-1;5488:37:55;;;;;;;;;;;;;;;;;;-1:-1:-1;5509:8:55;;-1:-1:-1;5509:8:55;;;;5488:37;;5509:8;;;;5488:37;1:33:-1;99:1;81:16;;74:27;;;-1:-1;99:1;-1:-1;5488:11:55;;-1:-1:-1;;5488:37:55:i;:::-;5481:44;;5378:154;;;;;;;:::o;704:42::-;745:1;704:42;:::o;6967:259::-;7137:4;7160:59;7177:9;7188:12;;7160:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;7160:59:55;;;;137:4:-1;7160:59:55;;;;;;;;;;;;;;;;;;-1:-1:-1;7202:8:55;;-1:-1:-1;7202:8:55;;;;7160:59;;7202:8;;;;7160:59;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;7212:6:55;;-1:-1:-1;7160:16:55;;-1:-1:-1;;7160:59:55:i;:::-;7153:66;6967:259;-1:-1:-1;;;;;;;6967:259:55:o;6088:286::-;6267:4;6290:77;6314:21;;6290:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;6290:77:55;;;;137:4:-1;6290:77:55;;;;;;;;;;;;;;;;;;-1:-1:-1;6337:19:55;;-1:-1:-1;6337:19:55;;;;6290:77;;6337:19;;;;6290:77;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;6290:77:55;;;;137:4:-1;6290:77:55;;;;;;;;;;;;;;;;;;-1:-1:-1;6358:8:55;;-1:-1:-1;6358:8:55;;;;6290:77;;6358:8;;;;6290:77;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;6290:23:55;;-1:-1:-1;;;6290:77:55:i;4365:313:54:-;4575:7;4601:70;4610:7;;4601:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;4601:70:54;;;;137:4:-1;4601:70:54;;;;;;;;;;;;;;;;;;-1:-1:-1;4619:5:54;;-1:-1:-1;4619:5:54;;;;4601:70;;4619:5;;;;4601:70;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;4626:10:54;;-1:-1:-1;4638:9:54;;-1:-1:-1;4649:9:54;;-1:-1:-1;4660:10:54;4601:8;:70::i;:::-;4594:77;4365:313;-1:-1:-1;;;;;;;;;4365:313:54:o;1090:48::-;1126:12;1090:48;:::o;1220:42::-;;;;:::o;2646:105::-;2727:17;;2646:105;:::o;8293:973::-;8592:4;8608:13;8624:60;8641:8;8651:4;;8657:5;;8664:9;8624:50;;;;;;-1:-1:-1;;;;;8624:50:54;;-1:-1:-1;;;;;8624:50:54;;;;;;;;30:3:-1;22:6;14;1:33;45:16;;;;;-1:-1;8624:50:54;;;;45:16:-1;1:33;-1:-1;;;;;;8624:50:54;;;45:16:-1;;;;8624:50:54;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;8624:50:54;;;;;;;-1:-1:-1;8624:58:54;;-1:-1:-1;;;;;;8624:60:54:i;:::-;8842:20;;;;:13;:20;;;;;;8608:76;;-1:-1:-1;8842:20:54;;8837:272;;8878:140;8911:7;;8878:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8878:140:54;;;;;;8936:6;;8878:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;8960:6:54;;-1:-1:-1;8984:5:54;;-1:-1:-1;9007:10:54;;-1:-1:-1;8878:15:54;:140::i;:::-;-1:-1:-1;9032:20:54;;;;:13;:20;;;;;:27;;-1:-1:-1;;9032:27:54;9055:4;9032:27;;;9073:17;:25;;;8837:272;9118:52;9133:11;9146:4;;9118:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;9118:52:54;;;;137:4:-1;9118:52:54;;;;;;;;;;;;;;;;;;-1:-1:-1;9152:5:54;;-1:-1:-1;9152:5:54;;;;9118:52;;9152:5;;;;9118:52;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;9159:10:54;;-1:-1:-1;9118:14:54;;-1:-1:-1;;9118:52:54:i;:::-;;9180:58;9194:5;9201:11;9214:4;;9180:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;9180:58:54;;;;137:4:-1;9180:58:54;;;;;;;;;;;;;;;;;;-1:-1:-1;9220:5:54;;-1:-1:-1;9220:5:54;;;;9180:58;;9220:5;;;;9180:58;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;9227:10:54;;-1:-1:-1;9180:13:54;;-1:-1:-1;;9180:58:54:i;:::-;-1:-1:-1;9255:4:54;;8293:973;-1:-1:-1;;;;;;;;;;;;;;;8293:973:54:o;4821:172:55:-;4920:4;4943:43;4955:9;4966:11;4979:6;4943:11;:43::i;:::-;4936:50;;4821:172;;;;;;:::o;3478:115::-;3563:23;;3478:115;:::o;3003:600:54:-;3089:14;3317:20;;;:8;:20;;;;;3356:11;;3384:9;;;;3415:14;;;;3453:10;;;;3356:11;;3384:9;;3415:14;-1:-1:-1;;;3415:14:54;;;;;;3089;;;;;;;;3453:10;;;;3447:17;;;;;;;;3485:13;;;;3516:10;;;;3582:14;;;;;3003:600;;;;-1:-1:-1;3003:600:54;;3439:25;;-1:-1:-1;;;;;3485:13:54;;;;3516:10;;;-1:-1:-1;;;;3547:13:54;;;;;;-1:-1:-1;3582:14:54;-1:-1:-1;3003:600:54;-1:-1:-1;;3003:600:54:o;2916:93:55:-;2964:7;2990:12;2916:93;:::o;13510:333::-;13590:7;13628;13590;13645:106;13669:7;13665:1;:11;13645:106;;;13717:23;;;;:13;:23;;;;;;;;13682:8;:1;13688;13682:8;:5;:8;:::i;:::-;13678:12;;13645:106;;;-1:-1:-1;13768:22:55;13760:51;;;;;-1:-1:-1;;;13760:51:55;;;;;;;;;;;;-1:-1:-1;;;13760:51:55;;;;;;;;;;;;;;12794:457;12855:7;;12922;12855;12939:273;12963:19;12959:23;;12939:273;;;13022:21;;;;:11;:21;;;;;;;-1:-1:-1;13061:12:55;13057:145;;13104:23;;;;:13;:23;;;;;;;;13057:145;;;13173:14;:7;13185:1;13173:14;:11;:14;:::i;:::-;13166:21;;;;;;;13057:145;12988:8;:1;12994;12988:8;:5;:8;:::i;:::-;12984:12;;12939:273;;;-1:-1:-1;13221:23:55;;;-1:-1:-1;;;13221:23:55;;;;;;;;;;;;-1:-1:-1;;;13221:23:55;;;;;;;;;;;;;;701:150:56;791:4;814:30;826:7;835:8;814:11;:30::i;15224:1287:55:-;15391:4;15425;15415:6;:14;;15407:78;;;;-1:-1:-1;;;15407:78:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15495:22;15520:18;:8;:16;:18::i;:::-;15495:43;;15548:26;15577:22;:12;:20;:22::i;:::-;15548:51;;15639:15;;15617:18;:37;15609:82;;;;;-1:-1:-1;;;15609:82:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15763:1;15722:29;;;:13;:29;;;;;;15701:100;;;;;-1:-1:-1;;;15701:100:55;;;;;;;;;;;;-1:-1:-1;;;15701:100:55;;;;;;;;;;;;;;;15832:73;15854:9;15865:15;;15882:14;15898:6;15832:21;:73::i;:::-;15811:152;;;;-1:-1:-1;;;15811:152:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16054:14;15994:56;16016:9;16027:12;16041:8;15994:21;:56::i;:::-;:74;15973:163;;;;-1:-1:-1;;;15973:163:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16147:15;:32;;;16189:23;:35;;;-1:-1:-1;16254:28:55;:8;:26;:28::i;:::-;16235:47;;16308:16;;16296:8;:28;16292:86;;16340:16;:27;;;16292:86;16473:9;16445:14;16413:18;16393:90;;;;;;;;;;-1:-1:-1;16500:4:55;;15224:1287;-1:-1:-1;;;;;;;15224:1287:55:o;445:250:56:-;623:4;646:42;658:19;679:8;646:11;:42::i;5439:1913:54:-;5686:6;;;5720:1;5711:10;;5702:19;;;5775:14;;5646:7;;5686:6;5751:5;;5793:2;5775:20;;:43;;-1:-1:-1;5799:14:54;;:19;5775:43;5767:72;;;;;-1:-1:-1;;;5767:72:54;;;;;;;;;;;;-1:-1:-1;;;5767:72:54;;;;;;;;;;;;;;;5952:11;;6035:12;;;;;:46;;;6080:1;6069:8;:12;6057:4;6062:1;6057:7;;;;;;;;;;;;;;6051:30;;6035:46;6031:197;;;6127:8;6138:4;6104:39;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6104:39:54;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6104:39:54;;;6097:46;;6169:1;6157:13;;;;6031:197;6256:33;;6280:1;6256:33;;;;;;;;;6238:15;;6284:4;;6256:33;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6256:33:54;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6256:33:54;;;6238:51;;6320:8;6332:1;6320:13;:74;;;;6393:1;6367:16;:2;:14;:16::i;:::-;:23;:27;6320:74;:147;;;;6466:1;6432:24;:2;:22;:24::i;:::-;:31;:35;6320:147;6299:231;;;;;-1:-1:-1;;;6299:231:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;6566:1;6549:7;:14;:18;:34;;;;6582:1;6571:8;:12;6549:34;6541:67;;;;;-1:-1:-1;;;6541:67:54;;;;;;;;;;;;-1:-1:-1;;;6541:67:54;;;;;;;;;;;;;;;6619:25;6647:20;;;:8;:20;;;;;6677:10;;;:23;;-1:-1:-1;;;;;;6677:23:54;6690:10;6677:23;;;6715:14;;:18;6711:81;;6763:18;;;;;;6749:32;;6711:81;6805:12;;6801:70;;6845:15;;;;;;6833:9;;;:27;6801:70;6884:14;;;;6880:72;;6914:14;;;:27;;-1:-1:-1;;;;6914:27:54;-1:-1:-1;;;6914:27:54;;;;;;;6880:72;6977:1;6965:9;:13;;;:32;;;;;6994:3;6982:9;:15;;;6965:32;6961:116;;;7041:13;;;:25;;-1:-1:-1;;;;7041:25:54;-1:-1:-1;;;7041:25:54;;;;;;;6961:116;7090:14;;7086:72;;7120:14;;;:27;;;7086:72;7167:13;;;:25;;-1:-1:-1;;;;;;7167:25:54;-1:-1:-1;;;;;7167:25:54;;;;;7202:10;;;:33;;-1:-1:-1;;7202:10:54;-1:-1:-1;;;;7202:33:54;-1:-1:-1;;;;7202:33:54;;;;;7279:10;7267;-1:-1:-1;;;;;7251:66:54;;7291:10;7303:7;7312:4;7251:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7251:66:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7251:66:54;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7251:66:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7335:10:54;;5439:1913;-1:-1:-1;;;;;;;;;;5439:1913:54:o;5703:126:48:-;5760:7;5786:36;5810:10;5817:2;5810:10;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5810:10:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5810:10:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5810:10:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5810:10:48;5793:28;;;5810:10;5793:28;;;;;;;;;26:21:-1;;;22:32;;6:49;;5793:28:48;;;;;;;5786:36;;5793:28;;;;5786:36;;;;;5793:28;5786:36;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5786:36:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5786:36:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5786:36:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5786:36:48;;5703:126;-1:-1:-1;;5703:126:48:o;11166:867:54:-;11354:4;11391:148;11426:5;11449:41;:29;:7;:27;:29::i;:::-;:39;:41::i;:::-;11508:6;11532;11391:17;:148::i;:::-;11370:205;;;;;-1:-1:-1;;;11370:205:54;;;;;;;;;;;;-1:-1:-1;;;11370:205:54;;;;;;;;;;;;;;;11586:19;11608:17;:7;:15;:17::i;:::-;11586:39;;11635:12;11650:28;:26;:28::i;:::-;11635:43;;11710:84;11739:11;11768:4;11790:3;11710:11;:84::i;:::-;11689:149;;;;;-1:-1:-1;;;11689:149:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;11848:15;11866:20;;;:8;:20;;;;;:29;;;-1:-1:-1;;;11866:29:54;;;;;11926:22;11936:11;11926:9;:22::i;:::-;:35;;;;11905:99;;;;;-1:-1:-1;;;11905:99:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12022:4:54;;11166:867;-1:-1:-1;;;;;;;;11166:867:54:o;12905:1613::-;13070:4;13094:18;:4;:16;:18::i;:::-;13086:50;;;;;-1:-1:-1;;;13086:50:54;;;;;;;;;;;;-1:-1:-1;;;13086:50:54;;;;;;;;;;;;;;;13154:20;:5;:18;:20::i;:::-;13146:53;;;;;-1:-1:-1;;;13146:53:54;;;;;;;;;;;;-1:-1:-1;;;13146:53:54;;;;;;;;;;;;;;;13210:17;13348:20;;;13251:1;13348:20;;;;;;;;13386:14;;;;13236:16;;;;;;;;13290:18;;;13348:20;13404:15;-1:-1:-1;13386:33:54;13378:76;;;;;-1:-1:-1;;;13378:76:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;13486:20;13472:10;;;;-1:-1:-1;;;13472:10:54;;;;:34;;;;;;;;;13464:68;;;;;-1:-1:-1;;;13464:68:54;;;;;;;;;;;;-1:-1:-1;;;13464:68:54;;;;;;;;;;;;;;;13559:9;;;;13594:19;;;;;13623:503;;13651:17;13671:47;:5;:47;;;;:26;:47;:::i;:::-;13651:67;;13732:26;13761:30;13772:1;13789;13775:4;:11;:15;13761:4;:10;;:30;;;;;:::i;:::-;13732:59;;13858:5;13840:13;13830:24;;;;;;:33;13805:106;;;;;-1:-1:-1;;;13805:106:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;13945:14;;;;-1:-1:-1;;;13945:14:54;;;;13998:15;;;:68;;;14056:10;14033:33;;:19;:4;:17;:19::i;:::-;:33;;;;13998:68;13973:142;;;;;-1:-1:-1;;;13973:142:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;13623:503;;;;14154:11;;14193:21;;;;;14224:267;;14254:16;14273:44;:4;:44;;;;:24;:44;:::i;:::-;14254:63;;14357:10;14356:11;:74;;;;14423:7;14397:21;:3;:19;:21::i;:::-;14387:32;;;;;;:43;14356:74;14331:149;;;;;-1:-1:-1;;;14331:149:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;14224:267;;-1:-1:-1;14507:4:54;;12905:1613;-1:-1:-1;;;;;;;;;;;12905:1613:54:o;9697:892::-;9878:4;9894:25;9922:8;:20;9931:10;9922:20;;;;;;;;;;;9894:48;;9952:14;9982:4;:13;;;;;;;;;;-1:-1:-1;;;;;9982:13:54;9952:44;;10007:17;10048:1;10033:11;:16;;;;10007:43;;10060:18;10087:11;10101:4;10087:18;10060:46;;10308:1;-1:-1:-1;;;;;10300:15:54;10320:18;;10387:1;-1:-1:-1;;;;;10387:5:54;;:14;;;;10430:5;10437:4;10443:5;10450:10;10462:11;10475:12;10419:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10419:69:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10419:69:54;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10419:69:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10419:69:54;;;10353:149;;;;;;-1:-1:-1;;;;;10353:149:54;;-1:-1:-1;;;;;10353:149:54;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10353:149:54;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10353:149:54;;;10300:212;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10300:212:54;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;-1:-1;;10528:32:54;;10549:10;;-1:-1:-1;10542:5:54;;10528:32;;;;;-1:-1:-1;10578:4:54;;9697:892;-1:-1:-1;;;;;;;;;9697:892:54:o;14298:438:55:-;14398:4;14433:11;14398:4;14519:189;14543:6;14539:1;:10;14519:189;;;14595:9;14583:8;:21;14579:71;;;14631:4;14624:11;;;;;;14579:71;14674:23;;;;:13;:23;;;;;;;;14555:8;:1;14561;14555:8;:5;:8;:::i;:::-;14551:12;;14519:189;;;-1:-1:-1;14724:5:55;;14298:438;-1:-1:-1;;;;;14298:438:55:o;2520:172:51:-;2605:7;;;2630;;;;2622:45;;;;;-1:-1:-1;;;2622:45:51;;;;;;;;;;;;;;;;;;;;;;;;;;;1250:2300:56;1334:4;1350:15;1375:20;1405:22;1437:23;1463:17;:7;:15;:17::i;:::-;1437:43;;1562:21;1586:28;1598:15;1586:11;:28::i;:::-;1562:52;;1817:2;1799:8;:15;:20;;;;;;:25;1791:81;;;;-1:-1:-1;;;1791:81:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2127:9;2122:1316;2164:2;2146:8;:15;:20;;;;;;2142:1;:24;2122:1316;;;2206:29;2221:9;:1;2227:2;2221:9;:5;:9;:::i;:::-;2206:8;;2232:2;2206:29;:14;:29;:::i;:::-;2196:39;-1:-1:-1;2259:24:56;:13;2281:1;2277:5;;2259:24;:17;:24;:::i;:::-;2249:34;;2314:17;:7;:15;:17::i;:::-;2573:1;2532:29;;;:13;:29;;;;;;2297:34;;-1:-1:-1;2528:576:56;;2694:23;:7;:21;:23::i;:::-;2624:66;:52;2641:14;2624:32;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2624:32:56;;;:50;:52::i;:::-;:64;:66::i;:::-;:93;;2595:174;;;;;-1:-1:-1;;;2595:174:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;2787:29;;;;:13;:29;;;;;:47;;;745:1:55;2856:7:56;:25;2852:238;;3034:27;;;;:11;:27;;;;;:37;;;2852:238;3290:47;:7;3321:15;3290:47;:30;:47;:::i;:::-;3282:98;;;;-1:-1:-1;;;3282:98:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3413:14;;-1:-1:-1;2172:8:56;:1;2178;2172:8;:5;:8;:::i;:::-;2168:12;;2122:1316;;;;3507:14;3476:17;:7;:15;:17::i;:::-;3453:69;;;;;;;-1:-1:-1;3539:4:56;;1250:2300;-1:-1:-1;;;;;;;1250:2300:56:o;16998:1082:55:-;17156:4;17220:5;17207:9;:18;:41;;;;;17242:6;17229:9;:19;17207:41;17203:83;;;-1:-1:-1;17271:4:55;17264:11;;17203:83;17319:5;17358:6;17319:5;17358:6;17296:20;17447:413;17470:6;17466:1;:10;17447:413;;;17523:9;17510;:22;17506:163;;17616:24;;;;:13;:24;;;;;;17567:9;;-1:-1:-1;17506:163:55;17700:9;17686:10;:23;17682:168;;17796:25;;;;:13;:25;;;;;;17745:10;;-1:-1:-1;17682:168:55;17482:8;:1;17488;17482:8;:5;:8;:::i;:::-;17478:12;;17447:413;;;;17889:13;17873:12;:29;17869:50;;;17912:5;17905:12;;;;;;;;17869:50;17994:10;17981:9;:23;17977:44;;18014:5;18007:12;;;;;;;;18483:1768;18627:7;18646:23;18672:22;18684:9;18672:11;:22::i;:::-;18646:48;;18704:19;18726:28;18738:15;:5;:13;:15::i;:::-;18726:11;:28::i;:::-;18704:50;;18764:20;18787:29;18799:16;:6;:14;:16::i;18787:29::-;18764:52;;18863:15;18848:11;:30;;:65;;;;;18898:15;18882:12;:31;;18848:65;18827:151;;;;-1:-1:-1;;;18827:151:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19086:30;19119:53;19167:4;19149:15;:22;19119:25;:15;19139:4;19119:25;:19;:25;:::i;:::-;:29;:53;:29;:53;:::i;:::-;19086:86;-1:-1:-1;19203:36:55;;;19271:37;;;19648:14;;19203:36;19648:32;;;19666:14;19648:32;19644:63;;;19690:15;:5;:13;:15::i;:::-;19683:22;;;;;;;;;;19644:63;19720:13;:32;;;;;19738:14;19737:15;19720:32;19716:64;;;19762:16;:6;:14;:16::i;19716:64::-;19793:13;:31;;;;;19810:14;19793:31;19789:456;;;19862:12;19847:11;:27;;:64;;19895:16;:6;:14;:16::i;:::-;19847:64;;;19877:15;:5;:13;:15::i;19789:456::-;20063:53;20089:26;:6;:24;:26::i;:::-;20079:4;20064:12;:19;;;20063:53;:25;:53;:::i;:::-;19992:51;20017:25;:5;:23;:25::i;:::-;20007:4;19993:11;:18;;19992:51;19991:125;19987:248;;;20143:16;:6;:14;:16::i;24914:148:48:-;24986:7;25012:43;25032:22;25046:7;25032:13;:22::i;:::-;25012:19;:43::i;17257:1974::-;17323:12;17347:16;17372:7;17380:1;17372:10;;;;;;;;;;;;17649:14;;17372:10;;;;;;-1:-1:-1;17644:1:48;17631:14;;17366:17;17631:32;;17627:75;;-1:-1:-1;;17679:12:48;;;;;;;;;-1:-1:-1;17679:12:48;;;;17627:75;17722:7;17730:1;17722:10;;;;;;;;;;;;;;17712:1413;;17771:1;17758:10;:14;;;17754:65;;;-1:-1:-1;;17792:12:48;;;;;;;;;-1:-1:-1;17792:12:48;;;;17754:65;17832:19;17860:7;17868:2;17860:11;;;;;;;;;;;;;;;-1:-1:-1;;;18048:14:48;;17854:18;18033:29;;;;;:77;;;18067:11;18082:4;18067:19;;:42;;;;;18090:11;18105:4;18090:19;;18067:42;18029:128;;;18130:12;;;;;;;;;;;;;;;;;;18029:128;18177:30;:7;18191:2;18195:11;18177:30;:13;:30;:::i;:::-;18170:37;;;;;;17712:1413;18238:12;18253:28;:7;18276:1;18279;18253:28;:22;:28;:::i;:::-;18328:22;;;-1:-1:-1;;;18328:22:48;;;;;;;;;;;;18238:43;;-1:-1:-1;18320:30:48;;18316:799;;;18514:7;18522:2;18514:11;;;;;;;;;;;;;;;18530:4;18508:26;;;:119;;;18607:20;;;;-1:-1:-1;;;18607:20:48;;;;;;;;;;;;;;18558:45;18598:1;18581:7;:14;:18;18601:1;18558:7;:22;;:45;;;;;:::i;:::-;:69;;18508:119;18504:178;;;18651:12;;;;;;;;;;;;;;;;;;18504:178;18706:21;:7;18720:2;18724;18706:21;:13;:21;:::i;18316:799::-;18779:22;;;-1:-1:-1;;;18779:22:48;;;;;;;;;;;;18771:30;;18767:348;;;18964:7;18989:1;18972:7;:14;:18;18964:27;;;;;;;;;;;;;;;18996:4;18958:42;18954:101;;19024:12;;;;;;;;;;;;;;;;;;18954:101;19079:21;:7;19093:2;19097;19079:21;:13;:21;:::i;18767:348::-;17712:1413;-1:-1:-1;;19134:12:48;;;;;;;;;-1:-1:-1;19134:12:48;;17257:1974;;;:::o;16674:308::-;16808:18;;;-1:-1:-1;;;16808:18:48;;;;;;;;;;;;;16748:12;;16776:28;;:7;;16799:1;;16776:22;:28::i;:::-;:50;16772:93;;-1:-1:-1;16842:12:48;;;;;;;;;-1:-1:-1;16842:12:48;;;;16772:93;16874:21;16898:20;:7;16912:2;16916:1;16898:20;:13;:20;:::i;:::-;16874:44;;16935:40;16949:2;16953:21;16965:8;16953:11;:21::i;:::-;16935:7;;:40;;:13;:40;:::i;22309:133::-;22383:12;22414:21;:7;22428:2;22432;22414:21;:13;:21;:::i;16172:232:49:-;16236:14;16266:7;:14;16284:1;16266:19;16262:60;;;-1:-1:-1;16308:3:49;16301:10;;16262:60;-1:-1:-1;16384:2:49;16371:16;16365:23;;16341:57::o;1686:527:52:-;1844:4;1914:11;1905:5;:20;:35;;;;-1:-1:-1;1929:11:52;;1905:35;:69;;;;-1:-1:-1;1944:25:52;;:30;1905:69;1901:111;;;-1:-1:-1;1997:4:52;1990:11;;1901:111;2022:19;2061:5;2068:18;2088:11;2044:56;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;2044:56:52;;;;;-1:-1:-1;2044:56:52;;;26:21:-1;;;6:49;;2044:56:52;;;;;;-1:-1:-1;2044:56:52;-1:-1:-1;2172:34:52;;-1:-1:-1;2044:56:52;;-1:-1:-1;2199:6:52;2172:26;:34::i;:::-;2165:41;1686:527;-1:-1:-1;;;;;;1686:527:52:o;12299:156:54:-;12362:5;12423:24;12435:11;12423;:24::i;:::-;12392:28;12404:15;;12392:11;:28::i;:::-;:55;;12299:156;-1:-1:-1;;12299:156:54:o;19573:1058:48:-;19636:4;19652:22;19684:13;19734:17;19746:4;19734:11;:17::i;:::-;19708:43;;-1:-1:-1;19708:43:48;-1:-1:-1;19830:10:48;;;:43;;;-1:-1:-1;;19844:14:48;:29;19830:43;19826:86;;;19896:5;19889:12;;;;;;19826:86;19940:1;:18;;19922:15;19969:559;19993:5;19989:1;:9;19969:559;;;20092:4;:11;20081:7;:22;20077:73;;20130:5;20123:12;;;;;;;;20077:73;20225:18;20246:42;20257:7;20280;20266:4;:11;:21;20246:4;:10;;:42;;;;;:::i;:::-;20225:63;;20302:16;20321:27;20342:5;20321:20;:27::i;:::-;20302:46;;-1:-1:-1;;20366:8:48;:23;20362:74;;;20416:5;20409:12;;;;;;;;;;20362:74;20498:19;;;;;-1:-1:-1;20000:3:48;;19969:559;;;-1:-1:-1;20613:11:48;;20602:22;;-1:-1:-1;;;19573:1058:48;;;:::o;20903:1072::-;20968:4;20984:22;21016:14;21068:18;21080:5;21068:11;:18::i;:::-;21041:45;;-1:-1:-1;21041:45:48;-1:-1:-1;21166:11:48;;;:44;;;-1:-1:-1;;21181:14:48;:29;21166:44;21162:87;;;21233:5;21226:12;;;;;;21162:87;21277:1;:18;;21259:15;21306:565;21330:6;21326:1;:10;21306:565;;;21430:5;:12;21419:7;:23;21415:74;;21469:5;21462:12;;;;;;;;21415:74;21613:18;21634:44;21646:7;21670;21655:5;:12;:22;21634:5;:11;;:44;;;;;:::i;:::-;21613:65;;21692:16;21711:28;21733:5;21711:21;:28::i;:::-;21692:47;;-1:-1:-1;;21757:8:48;:23;21753:74;;;21807:5;21800:12;;;;;;;;;;21753:74;21841:19;;;;;-1:-1:-1;21338:3:48;;21306:565;;14590:987;14679:12;14703:22;14735:14;14787:18;14799:5;14787:11;:18::i;:::-;14760:45;;-1:-1:-1;14760:45:48;-1:-1:-1;;;14823:29:48;;;14815:76;;;;-1:-1:-1;;;14815:76:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14918:6;14909;:15;14901:45;;;;;-1:-1:-1;;;14901:45:48;;;;;;;;;;;;-1:-1:-1;;;14901:45:48;;;;;;;;;;;;;;;14957:23;14991:12;15035:1;:18;;14991:12;15064:278;15090:6;15085:2;:11;15064:278;;;15132:44;15144:7;15168;15153:5;:12;:22;15132:5;:11;;:44;;;;;:::i;:::-;15119:57;;15197:33;15219:10;15197:21;:33::i;:::-;15190:40;;-1:-1:-1;;15252:4:48;:19;;15244:58;;;;;-1:-1:-1;;;15244:58:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;15316:15;;;;15098:5;;15064:278;;;;15365:44;15377:7;15401;15386:5;:12;:22;15365:5;:11;;:44;;;;;:::i;:::-;15352:57;;15426:33;15448:10;15426:21;:33::i;:::-;15419:40;;-1:-1:-1;;15477:4:48;:19;;15469:58;;;;;-1:-1:-1;;;15469:58:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;15544:26;:5;15556:7;15565:4;15544:26;:11;:26;:::i;:::-;15537:33;14590:987;-1:-1:-1;;;;;;;;14590:987:48:o;10345:924:49:-;10432:16;10464:12;10460:55;;-1:-1:-1;10492:12:49;;;;;;;;;-1:-1:-1;10492:12:49;;;;10460:55;10536:16;;;10570:13;;;:38;;;;;10604:4;10587:6;:13;:21;;10570:38;10562:70;;;;;-1:-1:-1;;;10562:70:49;;;;;;;;;;;;-1:-1:-1;;;10562:70:49;;;;;;;;;;;;;;;10769:4;10763:11;10756:18;;10818:7;10813:2;10808:3;10804:12;10800:26;10794:4;10787:40;10852:7;10847:3;10840:20;10979:6;10971;10967:19;10962:3;10958:29;11055:6;11050:2;11042:6;11038:15;11034:28;11099:7;11094:3;11090:17;11001:252;11130:3;11125;11122:12;11001:252;;;11234:3;11228:10;11221:4;11216:3;11212:14;11205:34;11169:2;11164:3;11160:12;11153:19;;11001:252;;;11005:116;;10652:611;;;;;;;:::o;16155:246:48:-;16222:6;16240:21;16264:23;16279:7;16264:14;:23::i;:::-;16240:47;;16297:21;16321:27;16339:8;16321:17;:27::i;:::-;16297:51;;16372:21;16384:8;16372:11;:21::i;6862:976::-;6949:12;6973:22;7005:13;7055:17;7067:4;7055:11;:17::i;:::-;7029:43;;-1:-1:-1;7029:43:48;-1:-1:-1;;;7090:29:48;;;7082:76;;;;-1:-1:-1;;;7082:76:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7185:5;7176:6;:14;7168:43;;;;;-1:-1:-1;;;7168:43:48;;;;;;;;;;;;-1:-1:-1;;;7168:43:48;;;;;;;;;;;;;;;7222:23;7256:12;7300:1;:18;;7256:12;7329:281;7355:6;7350:2;:11;7329:281;;;7397:42;7408:7;7431;7417:4;:11;:21;7397:4;:10;;:42;;;;;:::i;:::-;7384:55;;7460:32;7481:10;7460:20;:32::i;:::-;7453:39;;-1:-1:-1;;7514:4:48;:19;;7506:55;;;;;-1:-1:-1;;;7506:55:48;;;;;;;;;;;;-1:-1:-1;;;7506:55:48;;;;;;;;;;;;;;;7585:14;;;;7363:5;;7329:281;;;;7633:42;7644:7;7667;7653:4;:11;:21;7633:4;:10;;:42;;;;;:::i;:::-;7620:55;;7692:32;7713:10;7692:20;:32::i;:::-;7685:39;;-1:-1:-1;;7742:4:48;:19;;7734:55;;;;;-1:-1:-1;;;7734:55:48;;;;;;;;;;;;-1:-1:-1;;;7734:55:48;;;;;;;;;;;;;;12524:126;12593:12;12624:19;:6;12637:1;12640:2;12624:19;:12;:19;:::i;1317:456:51:-;1377:9;1619:7;1615:46;;-1:-1:-1;1649:1:51;1642:8;;1615:46;-1:-1:-1;1675:7:51;;;1680:2;1675;:7;:2;1700:6;;;;;:12;1692:56;;;;;-1:-1:-1;;;1692:56:51;;;;;;;;;;;;;;;;;;;;;;;;;;;22696:316:48;22764:7;22783:15;22801:20;:7;22815:2;22819:1;22801:20;:13;:20;:::i;:::-;22783:38;;22831:8;22848:7;22856:2;22848:11;;;;;;;;;;;;;;;-1:-1:-1;22870:17:48;22890:34;22902:21;22920:2;22902:17;:21::i;22890:34::-;-1:-1:-1;;22951:6:48;;;;22934:23;;22988:3;:16;22975:30;;;;22696:316;-1:-1:-1;;;;22696:316:48:o;2548:278::-;2615:12;2639:22;2674:2;:9;2664:20;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;2664:20:48;87:34:-1;135:17;;-1:-1;2664:20:48;-1:-1:-1;2639:45:48;-1:-1:-1;2700:6:48;2695:98;2716:2;:9;2712:1;:13;2695:98;;;2777:2;2780:1;2777:5;;;;;;;;;;;;;;;;2746:9;2772:1;2768;2756:2;:9;:13;:17;2746:28;;;;;;;;;;;:36;-1:-1:-1;;;;;2746:36:48;;;;;;;;-1:-1:-1;2727:3:48;;2695:98;;;-1:-1:-1;2810:9:48;2548:278;-1:-1:-1;;2548:278:48:o;4382:268::-;4443:7;;;4488:131;4509:2;:9;4505:1;:13;4488:131;;;4599:1;4603;4599:5;4586:2;:9;:19;4581:1;:25;4575:1;:32;4565:2;4568:1;4565:5;;;;;;;;;;;;;;4559:49;4549:59;;;;;4520:3;;4488:131;;5322:391:52;5426:4;5489:17;5509:40;:28;:7;:26;:28::i;:40::-;5489:60;;5651:17;5638:9;:30;5634:51;;5678:5;5671:12;;;;;5634:51;-1:-1:-1;5702:4:52;;5322:391;-1:-1:-1;;;5322:391:52:o;2288:160:51:-;2348:7;2381:2;2375;:8;;2367:50;;;;;-1:-1:-1;;;2367:50:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2434:7:51;;;2288:160::o;23392:178:48:-;23461:7;23538:25;-1:-1:-1;;;23555:7:48;23538:25;:16;:25;:::i;16410:337:49:-;16505:14;16543:16;;;16577:13;;;:38;;;;;16611:4;16594:6;:13;:21;;16577:38;16569:70;;;;;-1:-1:-1;;;16569:70:49;;;;;;;;;;;;-1:-1:-1;;;16569:70:49;;;;;;;;;;;;;;;-1:-1:-1;;16693:28:49;;16709:2;16693:28;16683:48;;16659:82::o;25770:1009:48:-;25856:4;25932:2;25916:6;:13;:18;;;;;;:23;25912:66;;-1:-1:-1;25962:5:48;25955:12;;25912:66;26041:6;:13;26058:2;26041:19;26037:61;;;-1:-1:-1;26083:4:48;26076:11;;26037:61;26142:6;:13;26159:2;26142:19;26138:62;;;-1:-1:-1;26184:5:48;26177:12;;26138:62;26267:13;;26222:6;;26210:9;;26254:48;;:36;;26267:6;;-1:-1:-1;;26267:18:48;26283:2;26254:36;:12;:36;:::i;:48::-;26238:64;-1:-1:-1;26312:16:48;26331:31;:19;:6;26312:16;26347:2;26331:19;:12;:19;:::i;:31::-;26312:50;-1:-1:-1;26387:1:48;26373:366;26395:13;;26420:1;;26395:21;;26413:2;26395:21;:17;:21;:::i;:::-;26394:27;26390:1;:31;26373:366;;;26453:1;26446:4;:8;26458:1;26446:13;26442:257;;;26490:72;26509:24;:6;26526:2;26522:6;;;;26509:24;:12;:24;:::i;:::-;26552:8;26535:26;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26535:26:48;;;26490:18;:72::i;:::-;26479:83;;26442:257;;;26631:26;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;26631:26:48;;;;;;26612:72;;26659:24;;:6;;26672;;;;26659:24;:12;:24;:::i;:::-;26612:18;:72::i;:::-;26601:83;;26442:257;26727:1;26719:9;;;;26423:3;26373:366;;;-1:-1:-1;26755:17:48;;25770:1009;-1:-1:-1;;;;25770:1009:48:o;1907:424::-;1968:7;1977;1996:14;2013:29;2039:2;2013:25;:29::i;:::-;1996:46;-1:-1:-1;2057:13:48;;;2053:68;;2094:1;2103:2;2106:1;2103:5;;;;;;;;;;;;2086:24;;-1:-1:-1;2103:5:48;;;-1:-1:-1;2086:24:48;;-1:-1:-1;2086:24:48;2053:68;2150:8;2146:1;:12;2134:24;;:2;:9;:24;2130:78;;;-1:-1:-1;;;655:66:48;-1:-1:-1;2195:1:48;;-1:-1:-1;2174:23:48;;2130:78;2217:15;2235:53;2247:40;2265:21;:2;2274:1;2265:21;;;;:8;:21;:::i;:::-;2247:17;:40::i;2235:53::-;2298:26;;;;;-1:-1:-1;2217:71:48;;-1:-1:-1;;1907:424:48;;;;:::o;9151:372::-;9225:7;9244:22;9276:21;9341:27;9361:6;9341:19;:27::i;:::-;9307:61;;-1:-1:-1;9307:61:48;-1:-1:-1;;;9382:29:48;;9378:78;;;-1:-1:-1;;9427:18:48;;;;;;9378:78;9473:39;:43;;;9151:372;-1:-1:-1;;9151:372:48:o;13643:582::-;13719:7;13759:1;13742:7;:14;:18;13738:67;;;-1:-1:-1;;;13776:18:48;;13738:67;13814:24;13841:36;13855:1;13875;13858:7;:14;:18;13841:7;:13;;:36;;;;;:::i;:::-;13814:63;;13888:22;13920:27;13997:24;14009:11;13997;:24::i;:::-;13957:64;;-1:-1:-1;13957:64:48;-1:-1:-1;;;14036:29:48;;14032:78;;;-1:-1:-1;;14081:18:48;;;;;;;14032:78;14174:44;:5;:44;;-1:-1:-1;;13643:582:48;;;:::o;15812:126::-;15881:12;15912:19;:7;15926:1;15929;15912:19;:13;:19;:::i;23829:131::-;23902:12;23933:20;:7;23947:1;23950:2;23933:20;:13;:20;:::i;1865:301:51:-;1925:7;2157:2;2152;:7;;;;;;;1865:301;-1:-1:-1;;;1865:301:51:o;25298:151:48:-;25383:7;25409:33;25434:2;25438;25417:24;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;25417:24:48;;;;;;;;;;-1:-1:-1;25417:24:48;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;25417:24:48;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25417:24:48;;;25409:7;:33::i;1052:437::-;1130:5;1157;1163:1;1157:8;;;;;;;;;;;;;;;1151:15;:23;1147:94;;;-1:-1:-1;1197:1:48;1190:8;;1147:94;1260:5;1266:1;1260:8;;;;;;;;;;;;;;;1273:4;1254:23;1250:94;;;-1:-1:-1;1300:1:48;1293:8;;1250:94;1363:5;1369:1;1363:8;;;;;;;;;;;;;;;1376:4;1357:23;1353:94;;;-1:-1:-1;1403:1:48;1396:8;;1353:94;-1:-1:-1;1464:1:48;1052:437;;;:::o;8454:439::-;8527:7;8536;8575:2;8559:6;:13;:18;8555:72;;;-1:-1:-1;;;655:66:48;-1:-1:-1;8614:1:48;8593:23;;8555:72;8636:27;8666:36;8679:2;8699;8683:6;:13;:18;8666:6;:12;;:36;;;;;:::i;:::-;8636:66;;8713:22;8745:21;8810:27;8822:14;8810:11;:27::i;:::-;8776:61;;-1:-1:-1;8776:61:48;-1:-1:-1;;;;8454:439:48;;;:::o",
  "source": "pragma solidity ^0.5.10;\n\n/** @title TestnetRelay */\n/** @author Summa (https://summa.one) */\n\nimport {OnDemandSPV} from \"./OnDemandSPV.sol\";\n\ncontract TestnetRelay is OnDemandSPV {\n\n    constructor(\n        bytes memory _genesisHeader,\n        uint256 _height,\n        bytes32 _periodStart,\n        uint256 _firstID\n    ) OnDemandSPV(\n        _genesisHeader,\n        _height,\n        _periodStart,\n        _firstID\n    ) public {return ;}\n\n    function _addHeadersWithRetarget(\n        bytes memory, // _oldPeriodStartHeader,\n        bytes memory _oldPeriodEndHeader,\n        bytes memory _headers\n    ) internal returns (bool) {\n        return _addHeaders(_oldPeriodEndHeader, _headers);\n    }\n\n    function _addHeaders(bytes memory _anchor, bytes memory _headers, bool) internal returns (bool) {\n        return _addHeaders(_anchor, _headers);\n    }\n\n    /// @notice             Adds headers to storage after validating\n    /// @dev                We check integrity and consistency of the header chain\n    /// @param  _anchor     The header immediately preceeding the new chain\n    /// @param  _headers    A tightly-packed list of new 80-byte Bitcoin headers to record\n    /// @return             True if successfully written, error otherwise\n    function _addHeaders(bytes memory _anchor, bytes memory _headers) internal returns (bool) {\n        uint256 _height;\n        bytes memory _header;\n        bytes32 _currentDigest;\n        bytes32 _previousDigest = _anchor.hash256();\n\n        /* uint256 _target = _headers.slice(0, 80).extractTarget(); */\n        uint256 _anchorHeight = _findHeight(_previousDigest);  /* NB: errors if unknown */\n\n        /* require(\n            _internal || _anchor.extractTarget() == _target,\n            \"Unexpected retarget on external call\"); */\n        require(_headers.length % 80 == 0, \"Header array length must be divisible by 80\");\n\n        /*\n        NB:\n        1. check that the header has sufficient work\n        2. check that headers are in a coherent chain (no retargets, hash links good)\n        3. Store the block connection\n        4. Store the height\n        */\n        for (uint256 i = 0; i < _headers.length / 80; i = i.add(1)) {\n            _header = _headers.slice(i.mul(80), 80);\n            _height = _anchorHeight.add(i + 1);\n            _currentDigest = _header.hash256();\n\n            /*\n            NB:\n            if the block is already authenticated, we don't need to a work check\n            Or write anything to state. This saves gas\n            */\n            if (previousBlock[_currentDigest] == bytes32(0)) {\n                require(\n                    abi.encodePacked(_currentDigest).reverseEndianness().bytesToUint() <= _header.extractTarget(),\n                    \"Header work is insufficient\");\n                previousBlock[_currentDigest] = _previousDigest;\n                if (_height % HEIGHT_INTERVAL == 0) {\n                    /*\n                    NB: We store the height only every 4th header to save gas\n                    */\n                    blockHeight[_currentDigest] = _height;\n                }\n            }\n\n            /* NB: we do still need to make chain level checks tho */\n            /* require(_header.extractTarget() == _target, \"Target changed unexpectedly\"); */\n            require(_header.validateHeaderPrevHash(_previousDigest), \"Headers do not form a consistent chain\");\n\n            _previousDigest = _currentDigest;\n        }\n\n        emit Extension(\n            _anchor.hash256(),\n            _currentDigest);\n        return true;\n    }\n}\n",
  "sourcePath": "@summa-tx/relay-sol/contracts/TestnetRelay.sol",
  "ast": {
    "absolutePath": "@summa-tx/relay-sol/contracts/TestnetRelay.sol",
    "exportedSymbols": {
      "TestnetRelay": [
        16611
      ]
    },
    "id": 16612,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 16402,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".10"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:56"
      },
      {
        "absolutePath": "@summa-tx/relay-sol/contracts/OnDemandSPV.sol",
        "file": "./OnDemandSPV.sol",
        "id": 16404,
        "nodeType": "ImportDirective",
        "scope": 16612,
        "sourceUnit": 15278,
        "src": "95:46:56",
        "symbolAliases": [
          {
            "foreign": 16403,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 16405,
              "name": "OnDemandSPV",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15277,
              "src": "168:11:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OnDemandSPV_$15277",
                "typeString": "contract OnDemandSPV"
              }
            },
            "id": 16406,
            "nodeType": "InheritanceSpecifier",
            "src": "168:11:56"
          }
        ],
        "contractDependencies": [
          14293,
          14393,
          15277,
          16343
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 16611,
        "linearizedBaseContracts": [
          16611,
          15277,
          16343,
          14393,
          14293
        ],
        "name": "TestnetRelay",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 16424,
              "nodeType": "Block",
              "src": "429:10:56",
              "statements": [
                {
                  "expression": null,
                  "functionReturnParameters": 16422,
                  "id": 16423,
                  "nodeType": "Return",
                  "src": "430:8:56"
                }
              ]
            },
            "documentation": null,
            "id": 16425,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 16417,
                    "name": "_genesisHeader",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16408,
                    "src": "344:14:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 16418,
                    "name": "_height",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16410,
                    "src": "368:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 16419,
                    "name": "_periodStart",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16412,
                    "src": "385:12:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 16420,
                    "name": "_firstID",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16414,
                    "src": "407:8:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 16421,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16416,
                  "name": "OnDemandSPV",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 15277,
                  "src": "323:11:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_OnDemandSPV_$15277_$",
                    "typeString": "type(contract OnDemandSPV)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "323:98:56"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16415,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16408,
                  "name": "_genesisHeader",
                  "nodeType": "VariableDeclaration",
                  "scope": 16425,
                  "src": "208:27:56",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16407,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "208:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16410,
                  "name": "_height",
                  "nodeType": "VariableDeclaration",
                  "scope": 16425,
                  "src": "245:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16409,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "245:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16412,
                  "name": "_periodStart",
                  "nodeType": "VariableDeclaration",
                  "scope": 16425,
                  "src": "270:20:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16411,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "270:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16414,
                  "name": "_firstID",
                  "nodeType": "VariableDeclaration",
                  "scope": 16425,
                  "src": "300:16:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16413,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "300:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "198:124:56"
            },
            "returnParameters": {
              "id": 16422,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "429:0:56"
            },
            "scope": 16611,
            "src": "187:252:56",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 16441,
              "nodeType": "Block",
              "src": "629:66:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16437,
                        "name": "_oldPeriodEndHeader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16429,
                        "src": "658:19:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 16438,
                        "name": "_headers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16431,
                        "src": "679:8:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 16436,
                      "name": "_addHeaders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16459,
                        16610
                      ],
                      "referencedDeclaration": 16610,
                      "src": "646:11:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory,bytes memory) returns (bool)"
                      }
                    },
                    "id": 16439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "646:42:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 16435,
                  "id": 16440,
                  "nodeType": "Return",
                  "src": "639:49:56"
                }
              ]
            },
            "documentation": null,
            "id": 16442,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addHeadersWithRetarget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16427,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 16442,
                  "src": "487:12:56",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16426,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "487:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16429,
                  "name": "_oldPeriodEndHeader",
                  "nodeType": "VariableDeclaration",
                  "scope": 16442,
                  "src": "535:32:56",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16428,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "535:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16431,
                  "name": "_headers",
                  "nodeType": "VariableDeclaration",
                  "scope": 16442,
                  "src": "577:21:56",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16430,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "577:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "477:127:56"
            },
            "returnParameters": {
              "id": 16435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16434,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 16442,
                  "src": "623:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16433,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "623:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "622:6:56"
            },
            "scope": 16611,
            "src": "445:250:56",
            "stateMutability": "nonpayable",
            "superFunction": 15844,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 16458,
              "nodeType": "Block",
              "src": "797:54:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16454,
                        "name": "_anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16444,
                        "src": "826:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 16455,
                        "name": "_headers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16446,
                        "src": "835:8:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 16453,
                      "name": "_addHeaders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16459,
                        16610
                      ],
                      "referencedDeclaration": 16610,
                      "src": "814:11:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory,bytes memory) returns (bool)"
                      }
                    },
                    "id": 16456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "814:30:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 16452,
                  "id": 16457,
                  "nodeType": "Return",
                  "src": "807:37:56"
                }
              ]
            },
            "documentation": null,
            "id": 16459,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addHeaders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16444,
                  "name": "_anchor",
                  "nodeType": "VariableDeclaration",
                  "scope": 16459,
                  "src": "722:20:56",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16443,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "722:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16446,
                  "name": "_headers",
                  "nodeType": "VariableDeclaration",
                  "scope": 16459,
                  "src": "744:21:56",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16445,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "744:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16448,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 16459,
                  "src": "767:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16447,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "767:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "721:51:56"
            },
            "returnParameters": {
              "id": 16452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16451,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 16459,
                  "src": "791:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16450,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "791:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "790:6:56"
            },
            "scope": 16611,
            "src": "701:150:56",
            "stateMutability": "nonpayable",
            "superFunction": 15717,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 16609,
              "nodeType": "Block",
              "src": "1340:2210:56",
              "statements": [
                {
                  "assignments": [
                    16469
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16469,
                      "name": "_height",
                      "nodeType": "VariableDeclaration",
                      "scope": 16609,
                      "src": "1350:15:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16468,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1350:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16470,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1350:15:56"
                },
                {
                  "assignments": [
                    16472
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16472,
                      "name": "_header",
                      "nodeType": "VariableDeclaration",
                      "scope": 16609,
                      "src": "1375:20:56",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 16471,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1375:5:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16473,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1375:20:56"
                },
                {
                  "assignments": [
                    16475
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16475,
                      "name": "_currentDigest",
                      "nodeType": "VariableDeclaration",
                      "scope": 16609,
                      "src": "1405:22:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 16474,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1405:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16476,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1405:22:56"
                },
                {
                  "assignments": [
                    16478
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16478,
                      "name": "_previousDigest",
                      "nodeType": "VariableDeclaration",
                      "scope": 16609,
                      "src": "1437:23:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 16477,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1437:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16482,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 16479,
                        "name": "_anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16461,
                        "src": "1463:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 16480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash256",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11851,
                      "src": "1463:15:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 16481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1463:17:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1437:43:56"
                },
                {
                  "assignments": [
                    16484
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16484,
                      "name": "_anchorHeight",
                      "nodeType": "VariableDeclaration",
                      "scope": 16609,
                      "src": "1562:21:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16483,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1562:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16488,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16486,
                        "name": "_previousDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16478,
                        "src": "1598:15:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 16485,
                      "name": "_findHeight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15905,
                      "src": "1586:11:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (bytes32) view returns (uint256)"
                      }
                    },
                    "id": 16487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1586:28:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1562:52:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 16493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 16490,
                              "name": "_headers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16463,
                              "src": "1799:8:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 16491,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1799:15:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3830",
                            "id": 16492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1817:2:56",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_80_by_1",
                              "typeString": "int_const 80"
                            },
                            "value": "80"
                          },
                          "src": "1799:20:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 16494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1823:1:56",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1799:25:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "486561646572206172726179206c656e677468206d75737420626520646976697369626c65206279203830",
                        "id": 16496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1826:45:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_64951f0822ebc61755f01c687a3aabd90c37a5b5a62d0764ef2ec9edb60caca4",
                          "typeString": "literal_string \"Header array length must be divisible by 80\""
                        },
                        "value": "Header array length must be divisible by 80"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_64951f0822ebc61755f01c687a3aabd90c37a5b5a62d0764ef2ec9edb60caca4",
                          "typeString": "literal_string \"Header array length must be divisible by 80\""
                        }
                      ],
                      "id": 16489,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "1791:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1791:81:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16498,
                  "nodeType": "ExpressionStatement",
                  "src": "1791:81:56"
                },
                {
                  "body": {
                    "id": 16598,
                    "nodeType": "Block",
                    "src": "2182:1256:56",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 16525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 16516,
                            "name": "_header",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16472,
                            "src": "2196:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "3830",
                                    "id": 16521,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2227:2:56",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    },
                                    "value": "80"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 16519,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16500,
                                    "src": "2221:1:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 16520,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 13860,
                                  "src": "2221:5:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 16522,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2221:9:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "3830",
                                "id": 16523,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2232:2:56",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_80_by_1",
                                  "typeString": "int_const 80"
                                },
                                "value": "80"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_rational_80_by_1",
                                  "typeString": "int_const 80"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 16517,
                                "name": "_headers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16463,
                                "src": "2206:8:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 16518,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "slice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13281,
                              "src": "2206:14:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 16524,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2206:29:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "2196:39:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 16526,
                        "nodeType": "ExpressionStatement",
                        "src": "2196:39:56"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 16534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 16527,
                            "name": "_height",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16469,
                            "src": "2249:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 16532,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 16530,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16500,
                                  "src": "2277:1:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 16531,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2281:1:56",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "2277:5:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 16528,
                                "name": "_anchorHeight",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16484,
                                "src": "2259:13:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 16529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13920,
                              "src": "2259:17:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 16533,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2259:24:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2249:34:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 16535,
                        "nodeType": "ExpressionStatement",
                        "src": "2249:34:56"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 16540,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 16536,
                            "name": "_currentDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16475,
                            "src": "2297:14:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 16537,
                                "name": "_header",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16472,
                                "src": "2314:7:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 16538,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hash256",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11851,
                              "src": "2314:15:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 16539,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2314:17:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2297:34:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 16541,
                        "nodeType": "ExpressionStatement",
                        "src": "2297:34:56"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 16548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 16542,
                              "name": "previousBlock",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15316,
                              "src": "2532:13:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                "typeString": "mapping(bytes32 => bytes32)"
                              }
                            },
                            "id": 16544,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 16543,
                              "name": "_currentDigest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16475,
                              "src": "2546:14:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2532:29:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 16546,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2573:1:56",
                                "subdenomination": null,
                                "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": 16545,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2565:7:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 16547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2565:10:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2532:43:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 16585,
                        "nodeType": "IfStatement",
                        "src": "2528:576:56",
                        "trueBody": {
                          "id": 16584,
                          "nodeType": "Block",
                          "src": "2577:527:56",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 16561,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                {
                                                  "argumentTypes": null,
                                                  "id": 16552,
                                                  "name": "_currentDigest",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 16475,
                                                  "src": "2641:14:56",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 16550,
                                                  "name": "abi",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 18347,
                                                  "src": "2624:3:56",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                  }
                                                },
                                                "id": 16551,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodePacked",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "2624:16:56",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                  "typeString": "function () pure returns (bytes memory)"
                                                }
                                              },
                                              "id": 16553,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "2624:32:56",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 16554,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "reverseEndianness",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 11643,
                                            "src": "2624:50:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                              "typeString": "function (bytes memory) pure returns (bytes memory)"
                                            }
                                          },
                                          "id": 16555,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "2624:52:56",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 16556,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "bytesToUint",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 11790,
                                        "src": "2624:64:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                                          "typeString": "function (bytes memory) pure returns (uint256)"
                                        }
                                      },
                                      "id": 16557,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2624:66:56",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 16558,
                                          "name": "_header",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 16472,
                                          "src": "2694:7:56",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 16559,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "extractTarget",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12925,
                                        "src": "2694:21:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                                          "typeString": "function (bytes memory) pure returns (uint256)"
                                        }
                                      },
                                      "id": 16560,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2694:23:56",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2624:93:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "48656164657220776f726b20697320696e73756666696369656e74",
                                    "id": 16562,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2739:29:56",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_577a884d824749cadf11f1d13d4dc4655ad406f62456ad5e910541517ce4d497",
                                      "typeString": "literal_string \"Header work is insufficient\""
                                    },
                                    "value": "Header work is insufficient"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_577a884d824749cadf11f1d13d4dc4655ad406f62456ad5e910541517ce4d497",
                                      "typeString": "literal_string \"Header work is insufficient\""
                                    }
                                  ],
                                  "id": 16549,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    18363,
                                    18364
                                  ],
                                  "referencedDeclaration": 18364,
                                  "src": "2595:7:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 16563,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2595:174:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 16564,
                              "nodeType": "ExpressionStatement",
                              "src": "2595:174:56"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 16569,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 16565,
                                    "name": "previousBlock",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15316,
                                    "src": "2787:13:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                      "typeString": "mapping(bytes32 => bytes32)"
                                    }
                                  },
                                  "id": 16567,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 16566,
                                    "name": "_currentDigest",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16475,
                                    "src": "2801:14:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2787:29:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 16568,
                                  "name": "_previousDigest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16478,
                                  "src": "2819:15:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "2787:47:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 16570,
                              "nodeType": "ExpressionStatement",
                              "src": "2787:47:56"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 16575,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 16573,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 16571,
                                    "name": "_height",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16469,
                                    "src": "2856:7:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 16572,
                                    "name": "HEIGHT_INTERVAL",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15306,
                                    "src": "2866:15:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "2856:25:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 16574,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2885:1:56",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2856:30:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 16583,
                              "nodeType": "IfStatement",
                              "src": "2852:238:56",
                              "trueBody": {
                                "id": 16582,
                                "nodeType": "Block",
                                "src": "2888:202:56",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 16580,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 16576,
                                          "name": "blockHeight",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 15320,
                                          "src": "3034:11:56",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                                            "typeString": "mapping(bytes32 => uint256)"
                                          }
                                        },
                                        "id": 16578,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 16577,
                                          "name": "_currentDigest",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 16475,
                                          "src": "3046:14:56",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "3034:27:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 16579,
                                        "name": "_height",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 16469,
                                        "src": "3064:7:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3034:37:56",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 16581,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3034:37:56"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 16589,
                                  "name": "_previousDigest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16478,
                                  "src": "3321:15:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 16587,
                                  "name": "_header",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16472,
                                  "src": "3290:7:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 16588,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "validateHeaderPrevHash",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 14206,
                                "src": "3290:30:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory,bytes32) pure returns (bool)"
                                }
                              },
                              "id": 16590,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3290:47:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4865616465727320646f206e6f7420666f726d206120636f6e73697374656e7420636861696e",
                              "id": 16591,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3339:40:56",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_09edac151df9e4894b9dc57d4b428f162596747b62bb7347fd3851a717f60df7",
                                "typeString": "literal_string \"Headers do not form a consistent chain\""
                              },
                              "value": "Headers do not form a consistent chain"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_09edac151df9e4894b9dc57d4b428f162596747b62bb7347fd3851a717f60df7",
                                "typeString": "literal_string \"Headers do not form a consistent chain\""
                              }
                            ],
                            "id": 16586,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              18363,
                              18364
                            ],
                            "referencedDeclaration": 18364,
                            "src": "3282:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 16592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3282:98:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 16593,
                        "nodeType": "ExpressionStatement",
                        "src": "3282:98:56"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 16596,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 16594,
                            "name": "_previousDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16478,
                            "src": "3395:15:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 16595,
                            "name": "_currentDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16475,
                            "src": "3413:14:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3395:32:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 16597,
                        "nodeType": "ExpressionStatement",
                        "src": "3395:32:56"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 16508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 16503,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16500,
                      "src": "2142:1:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 16507,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 16504,
                          "name": "_headers",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16463,
                          "src": "2146:8:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 16505,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2146:15:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "3830",
                        "id": 16506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2164:2:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_80_by_1",
                          "typeString": "int_const 80"
                        },
                        "value": "80"
                      },
                      "src": "2146:20:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2142:24:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 16599,
                  "initializationExpression": {
                    "assignments": [
                      16500
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 16500,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 16599,
                        "src": "2127:9:56",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 16499,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2127:7:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 16502,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 16501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2139:1:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2127:13:56"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 16514,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 16509,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16500,
                        "src": "2168:1:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 16512,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2178:1:56",
                            "subdenomination": null,
                            "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": {
                            "argumentTypes": null,
                            "id": 16510,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16500,
                            "src": "2172:1:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 16511,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 13920,
                          "src": "2172:5:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 16513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2172:8:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2168:12:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 16515,
                    "nodeType": "ExpressionStatement",
                    "src": "2168:12:56"
                  },
                  "nodeType": "ForStatement",
                  "src": "2122:1316:56"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 16601,
                            "name": "_anchor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16461,
                            "src": "3476:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 16602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hash256",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11851,
                          "src": "3476:15:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 16603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3476:17:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 16604,
                        "name": "_currentDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16475,
                        "src": "3507:14:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 16600,
                      "name": "Extension",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14299,
                      "src": "3453:9:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32,bytes32)"
                      }
                    },
                    "id": 16605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3453:69:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16606,
                  "nodeType": "EmitStatement",
                  "src": "3448:74:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 16607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3539:4:56",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 16467,
                  "id": 16608,
                  "nodeType": "Return",
                  "src": "3532:11:56"
                }
              ]
            },
            "documentation": "@notice             Adds headers to storage after validating\n @dev                We check integrity and consistency of the header chain\n @param  _anchor     The header immediately preceeding the new chain\n @param  _headers    A tightly-packed list of new 80-byte Bitcoin headers to record\n @return             True if successfully written, error otherwise",
            "id": 16610,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addHeaders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16461,
                  "name": "_anchor",
                  "nodeType": "VariableDeclaration",
                  "scope": 16610,
                  "src": "1271:20:56",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16460,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1271:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16463,
                  "name": "_headers",
                  "nodeType": "VariableDeclaration",
                  "scope": 16610,
                  "src": "1293:21:56",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16462,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1293:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1270:45:56"
            },
            "returnParameters": {
              "id": 16467,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16466,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 16610,
                  "src": "1334:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16465,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1334:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1333:6:56"
            },
            "scope": 16611,
            "src": "1250:2300:56",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 16612,
        "src": "143:3409:56"
      }
    ],
    "src": "0:3553:56"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "@summa-tx/relay-sol/contracts/TestnetRelay.sol",
      "exportedSymbols": {
        "TestnetRelay": [
          16611
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.5",
            ".10"
          ]
        },
        "id": 16402,
        "name": "PragmaDirective",
        "src": "0:24:56"
      },
      {
        "attributes": {
          "SourceUnit": 15278,
          "absolutePath": "@summa-tx/relay-sol/contracts/OnDemandSPV.sol",
          "file": "./OnDemandSPV.sol",
          "scope": 16612,
          "symbolAliases": [
            {
              "foreign": 16403,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 16404,
        "name": "ImportDirective",
        "src": "95:46:56"
      },
      {
        "attributes": {
          "contractDependencies": [
            14293,
            14393,
            15277,
            16343
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            16611,
            15277,
            16343,
            14393,
            14293
          ],
          "name": "TestnetRelay",
          "scope": 16612
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "OnDemandSPV",
                  "referencedDeclaration": 15277,
                  "type": "contract OnDemandSPV"
                },
                "id": 16405,
                "name": "UserDefinedTypeName",
                "src": "168:11:56"
              }
            ],
            "id": 16406,
            "name": "InheritanceSpecifier",
            "src": "168:11:56"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "scope": 16611,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_genesisHeader",
                      "scope": 16425,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 16407,
                        "name": "ElementaryTypeName",
                        "src": "208:5:56"
                      }
                    ],
                    "id": 16408,
                    "name": "VariableDeclaration",
                    "src": "208:27:56"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_height",
                      "scope": 16425,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 16409,
                        "name": "ElementaryTypeName",
                        "src": "245:7:56"
                      }
                    ],
                    "id": 16410,
                    "name": "VariableDeclaration",
                    "src": "245:15:56"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_periodStart",
                      "scope": 16425,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 16411,
                        "name": "ElementaryTypeName",
                        "src": "270:7:56"
                      }
                    ],
                    "id": 16412,
                    "name": "VariableDeclaration",
                    "src": "270:20:56"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_firstID",
                      "scope": 16425,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 16413,
                        "name": "ElementaryTypeName",
                        "src": "300:7:56"
                      }
                    ],
                    "id": 16414,
                    "name": "VariableDeclaration",
                    "src": "300:16:56"
                  }
                ],
                "id": 16415,
                "name": "ParameterList",
                "src": "198:124:56"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 16422,
                "name": "ParameterList",
                "src": "429:0:56"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 15277,
                      "type": "type(contract OnDemandSPV)",
                      "value": "OnDemandSPV"
                    },
                    "id": 16416,
                    "name": "Identifier",
                    "src": "323:11:56"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 16408,
                      "type": "bytes memory",
                      "value": "_genesisHeader"
                    },
                    "id": 16417,
                    "name": "Identifier",
                    "src": "344:14:56"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 16410,
                      "type": "uint256",
                      "value": "_height"
                    },
                    "id": 16418,
                    "name": "Identifier",
                    "src": "368:7:56"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 16412,
                      "type": "bytes32",
                      "value": "_periodStart"
                    },
                    "id": 16419,
                    "name": "Identifier",
                    "src": "385:12:56"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 16414,
                      "type": "uint256",
                      "value": "_firstID"
                    },
                    "id": 16420,
                    "name": "Identifier",
                    "src": "407:8:56"
                  }
                ],
                "id": 16421,
                "name": "ModifierInvocation",
                "src": "323:98:56"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "expression": null,
                      "functionReturnParameters": 16422
                    },
                    "id": 16423,
                    "name": "Return",
                    "src": "430:8:56"
                  }
                ],
                "id": 16424,
                "name": "Block",
                "src": "429:10:56"
              }
            ],
            "id": 16425,
            "name": "FunctionDefinition",
            "src": "187:252:56"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_addHeadersWithRetarget",
              "scope": 16611,
              "stateMutability": "nonpayable",
              "superFunction": 15844,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 16442,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 16426,
                        "name": "ElementaryTypeName",
                        "src": "487:5:56"
                      }
                    ],
                    "id": 16427,
                    "name": "VariableDeclaration",
                    "src": "487:12:56"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_oldPeriodEndHeader",
                      "scope": 16442,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 16428,
                        "name": "ElementaryTypeName",
                        "src": "535:5:56"
                      }
                    ],
                    "id": 16429,
                    "name": "VariableDeclaration",
                    "src": "535:32:56"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_headers",
                      "scope": 16442,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 16430,
                        "name": "ElementaryTypeName",
                        "src": "577:5:56"
                      }
                    ],
                    "id": 16431,
                    "name": "VariableDeclaration",
                    "src": "577:21:56"
                  }
                ],
                "id": 16432,
                "name": "ParameterList",
                "src": "477:127:56"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 16442,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 16433,
                        "name": "ElementaryTypeName",
                        "src": "623:4:56"
                      }
                    ],
                    "id": 16434,
                    "name": "VariableDeclaration",
                    "src": "623:4:56"
                  }
                ],
                "id": 16435,
                "name": "ParameterList",
                "src": "622:6:56"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 16435
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                16459,
                                16610
                              ],
                              "referencedDeclaration": 16610,
                              "type": "function (bytes memory,bytes memory) returns (bool)",
                              "value": "_addHeaders"
                            },
                            "id": 16436,
                            "name": "Identifier",
                            "src": "646:11:56"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 16429,
                              "type": "bytes memory",
                              "value": "_oldPeriodEndHeader"
                            },
                            "id": 16437,
                            "name": "Identifier",
                            "src": "658:19:56"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 16431,
                              "type": "bytes memory",
                              "value": "_headers"
                            },
                            "id": 16438,
                            "name": "Identifier",
                            "src": "679:8:56"
                          }
                        ],
                        "id": 16439,
                        "name": "FunctionCall",
                        "src": "646:42:56"
                      }
                    ],
                    "id": 16440,
                    "name": "Return",
                    "src": "639:49:56"
                  }
                ],
                "id": 16441,
                "name": "Block",
                "src": "629:66:56"
              }
            ],
            "id": 16442,
            "name": "FunctionDefinition",
            "src": "445:250:56"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_addHeaders",
              "scope": 16611,
              "stateMutability": "nonpayable",
              "superFunction": 15717,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_anchor",
                      "scope": 16459,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 16443,
                        "name": "ElementaryTypeName",
                        "src": "722:5:56"
                      }
                    ],
                    "id": 16444,
                    "name": "VariableDeclaration",
                    "src": "722:20:56"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_headers",
                      "scope": 16459,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 16445,
                        "name": "ElementaryTypeName",
                        "src": "744:5:56"
                      }
                    ],
                    "id": 16446,
                    "name": "VariableDeclaration",
                    "src": "744:21:56"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 16459,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 16447,
                        "name": "ElementaryTypeName",
                        "src": "767:4:56"
                      }
                    ],
                    "id": 16448,
                    "name": "VariableDeclaration",
                    "src": "767:4:56"
                  }
                ],
                "id": 16449,
                "name": "ParameterList",
                "src": "721:51:56"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 16459,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 16450,
                        "name": "ElementaryTypeName",
                        "src": "791:4:56"
                      }
                    ],
                    "id": 16451,
                    "name": "VariableDeclaration",
                    "src": "791:4:56"
                  }
                ],
                "id": 16452,
                "name": "ParameterList",
                "src": "790:6:56"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 16452
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                16459,
                                16610
                              ],
                              "referencedDeclaration": 16610,
                              "type": "function (bytes memory,bytes memory) returns (bool)",
                              "value": "_addHeaders"
                            },
                            "id": 16453,
                            "name": "Identifier",
                            "src": "814:11:56"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 16444,
                              "type": "bytes memory",
                              "value": "_anchor"
                            },
                            "id": 16454,
                            "name": "Identifier",
                            "src": "826:7:56"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 16446,
                              "type": "bytes memory",
                              "value": "_headers"
                            },
                            "id": 16455,
                            "name": "Identifier",
                            "src": "835:8:56"
                          }
                        ],
                        "id": 16456,
                        "name": "FunctionCall",
                        "src": "814:30:56"
                      }
                    ],
                    "id": 16457,
                    "name": "Return",
                    "src": "807:37:56"
                  }
                ],
                "id": 16458,
                "name": "Block",
                "src": "797:54:56"
              }
            ],
            "id": 16459,
            "name": "FunctionDefinition",
            "src": "701:150:56"
          },
          {
            "attributes": {
              "documentation": "@notice             Adds headers to storage after validating\n @dev                We check integrity and consistency of the header chain\n @param  _anchor     The header immediately preceeding the new chain\n @param  _headers    A tightly-packed list of new 80-byte Bitcoin headers to record\n @return             True if successfully written, error otherwise",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_addHeaders",
              "scope": 16611,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_anchor",
                      "scope": 16610,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 16460,
                        "name": "ElementaryTypeName",
                        "src": "1271:5:56"
                      }
                    ],
                    "id": 16461,
                    "name": "VariableDeclaration",
                    "src": "1271:20:56"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_headers",
                      "scope": 16610,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 16462,
                        "name": "ElementaryTypeName",
                        "src": "1293:5:56"
                      }
                    ],
                    "id": 16463,
                    "name": "VariableDeclaration",
                    "src": "1293:21:56"
                  }
                ],
                "id": 16464,
                "name": "ParameterList",
                "src": "1270:45:56"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 16610,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 16465,
                        "name": "ElementaryTypeName",
                        "src": "1334:4:56"
                      }
                    ],
                    "id": 16466,
                    "name": "VariableDeclaration",
                    "src": "1334:4:56"
                  }
                ],
                "id": 16467,
                "name": "ParameterList",
                "src": "1333:6:56"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        16469
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_height",
                          "scope": 16609,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 16468,
                            "name": "ElementaryTypeName",
                            "src": "1350:7:56"
                          }
                        ],
                        "id": 16469,
                        "name": "VariableDeclaration",
                        "src": "1350:15:56"
                      }
                    ],
                    "id": 16470,
                    "name": "VariableDeclarationStatement",
                    "src": "1350:15:56"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        16472
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_header",
                          "scope": 16609,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 16471,
                            "name": "ElementaryTypeName",
                            "src": "1375:5:56"
                          }
                        ],
                        "id": 16472,
                        "name": "VariableDeclaration",
                        "src": "1375:20:56"
                      }
                    ],
                    "id": 16473,
                    "name": "VariableDeclarationStatement",
                    "src": "1375:20:56"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        16475
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_currentDigest",
                          "scope": 16609,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 16474,
                            "name": "ElementaryTypeName",
                            "src": "1405:7:56"
                          }
                        ],
                        "id": 16475,
                        "name": "VariableDeclaration",
                        "src": "1405:22:56"
                      }
                    ],
                    "id": 16476,
                    "name": "VariableDeclarationStatement",
                    "src": "1405:22:56"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        16478
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_previousDigest",
                          "scope": 16609,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 16477,
                            "name": "ElementaryTypeName",
                            "src": "1437:7:56"
                          }
                        ],
                        "id": 16478,
                        "name": "VariableDeclaration",
                        "src": "1437:23:56"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "hash256",
                              "referencedDeclaration": 11851,
                              "type": "function (bytes memory) pure returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 16461,
                                  "type": "bytes memory",
                                  "value": "_anchor"
                                },
                                "id": 16479,
                                "name": "Identifier",
                                "src": "1463:7:56"
                              }
                            ],
                            "id": 16480,
                            "name": "MemberAccess",
                            "src": "1463:15:56"
                          }
                        ],
                        "id": 16481,
                        "name": "FunctionCall",
                        "src": "1463:17:56"
                      }
                    ],
                    "id": 16482,
                    "name": "VariableDeclarationStatement",
                    "src": "1437:43:56"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        16484
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_anchorHeight",
                          "scope": 16609,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 16483,
                            "name": "ElementaryTypeName",
                            "src": "1562:7:56"
                          }
                        ],
                        "id": 16484,
                        "name": "VariableDeclaration",
                        "src": "1562:21:56"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 15905,
                              "type": "function (bytes32) view returns (uint256)",
                              "value": "_findHeight"
                            },
                            "id": 16485,
                            "name": "Identifier",
                            "src": "1586:11:56"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 16478,
                              "type": "bytes32",
                              "value": "_previousDigest"
                            },
                            "id": 16486,
                            "name": "Identifier",
                            "src": "1598:15:56"
                          }
                        ],
                        "id": 16487,
                        "name": "FunctionCall",
                        "src": "1586:28:56"
                      }
                    ],
                    "id": 16488,
                    "name": "VariableDeclarationStatement",
                    "src": "1562:52:56"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_64951f0822ebc61755f01c687a3aabd90c37a5b5a62d0764ef2ec9edb60caca4",
                                  "typeString": "literal_string \"Header array length must be divisible by 80\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 16489,
                            "name": "Identifier",
                            "src": "1791:7:56"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "%",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 16463,
                                          "type": "bytes memory",
                                          "value": "_headers"
                                        },
                                        "id": 16490,
                                        "name": "Identifier",
                                        "src": "1799:8:56"
                                      }
                                    ],
                                    "id": 16491,
                                    "name": "MemberAccess",
                                    "src": "1799:15:56"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "3830",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 80",
                                      "value": "80"
                                    },
                                    "id": 16492,
                                    "name": "Literal",
                                    "src": "1817:2:56"
                                  }
                                ],
                                "id": 16493,
                                "name": "BinaryOperation",
                                "src": "1799:20:56"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 16494,
                                "name": "Literal",
                                "src": "1823:1:56"
                              }
                            ],
                            "id": 16495,
                            "name": "BinaryOperation",
                            "src": "1799:25:56"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "486561646572206172726179206c656e677468206d75737420626520646976697369626c65206279203830",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Header array length must be divisible by 80\"",
                              "value": "Header array length must be divisible by 80"
                            },
                            "id": 16496,
                            "name": "Literal",
                            "src": "1826:45:56"
                          }
                        ],
                        "id": 16497,
                        "name": "FunctionCall",
                        "src": "1791:81:56"
                      }
                    ],
                    "id": 16498,
                    "name": "ExpressionStatement",
                    "src": "1791:81:56"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "assignments": [
                            16500
                          ]
                        },
                        "children": [
                          {
                            "attributes": {
                              "constant": false,
                              "name": "i",
                              "scope": 16599,
                              "stateVariable": false,
                              "storageLocation": "default",
                              "type": "uint256",
                              "value": null,
                              "visibility": "internal"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint256",
                                  "type": "uint256"
                                },
                                "id": 16499,
                                "name": "ElementaryTypeName",
                                "src": "2127:7:56"
                              }
                            ],
                            "id": 16500,
                            "name": "VariableDeclaration",
                            "src": "2127:9:56"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 16501,
                            "name": "Literal",
                            "src": "2139:1:56"
                          }
                        ],
                        "id": 16502,
                        "name": "VariableDeclarationStatement",
                        "src": "2127:13:56"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 16500,
                              "type": "uint256",
                              "value": "i"
                            },
                            "id": 16503,
                            "name": "Identifier",
                            "src": "2142:1:56"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "/",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 16463,
                                      "type": "bytes memory",
                                      "value": "_headers"
                                    },
                                    "id": 16504,
                                    "name": "Identifier",
                                    "src": "2146:8:56"
                                  }
                                ],
                                "id": 16505,
                                "name": "MemberAccess",
                                "src": "2146:15:56"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "3830",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 80",
                                  "value": "80"
                                },
                                "id": 16506,
                                "name": "Literal",
                                "src": "2164:2:56"
                              }
                            ],
                            "id": 16507,
                            "name": "BinaryOperation",
                            "src": "2146:20:56"
                          }
                        ],
                        "id": 16508,
                        "name": "BinaryOperation",
                        "src": "2142:24:56"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 16500,
                                  "type": "uint256",
                                  "value": "i"
                                },
                                "id": 16509,
                                "name": "Identifier",
                                "src": "2168:1:56"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "add",
                                      "referencedDeclaration": 13920,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 16500,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 16510,
                                        "name": "Identifier",
                                        "src": "2172:1:56"
                                      }
                                    ],
                                    "id": 16511,
                                    "name": "MemberAccess",
                                    "src": "2172:5:56"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 16512,
                                    "name": "Literal",
                                    "src": "2178:1:56"
                                  }
                                ],
                                "id": 16513,
                                "name": "FunctionCall",
                                "src": "2172:8:56"
                              }
                            ],
                            "id": 16514,
                            "name": "Assignment",
                            "src": "2168:12:56"
                          }
                        ],
                        "id": 16515,
                        "name": "ExpressionStatement",
                        "src": "2168:12:56"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "bytes memory"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 16472,
                                      "type": "bytes memory",
                                      "value": "_header"
                                    },
                                    "id": 16516,
                                    "name": "Identifier",
                                    "src": "2196:7:56"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_rational_80_by_1",
                                              "typeString": "int_const 80"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "slice",
                                          "referencedDeclaration": 13281,
                                          "type": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 16463,
                                              "type": "bytes memory",
                                              "value": "_headers"
                                            },
                                            "id": 16517,
                                            "name": "Identifier",
                                            "src": "2206:8:56"
                                          }
                                        ],
                                        "id": 16518,
                                        "name": "MemberAccess",
                                        "src": "2206:14:56"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_rational_80_by_1",
                                                  "typeString": "int_const 80"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "mul",
                                              "referencedDeclaration": 13860,
                                              "type": "function (uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 16500,
                                                  "type": "uint256",
                                                  "value": "i"
                                                },
                                                "id": 16519,
                                                "name": "Identifier",
                                                "src": "2221:1:56"
                                              }
                                            ],
                                            "id": 16520,
                                            "name": "MemberAccess",
                                            "src": "2221:5:56"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "3830",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 80",
                                              "value": "80"
                                            },
                                            "id": 16521,
                                            "name": "Literal",
                                            "src": "2227:2:56"
                                          }
                                        ],
                                        "id": 16522,
                                        "name": "FunctionCall",
                                        "src": "2221:9:56"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "3830",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 80",
                                          "value": "80"
                                        },
                                        "id": 16523,
                                        "name": "Literal",
                                        "src": "2232:2:56"
                                      }
                                    ],
                                    "id": 16524,
                                    "name": "FunctionCall",
                                    "src": "2206:29:56"
                                  }
                                ],
                                "id": 16525,
                                "name": "Assignment",
                                "src": "2196:39:56"
                              }
                            ],
                            "id": 16526,
                            "name": "ExpressionStatement",
                            "src": "2196:39:56"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 16469,
                                      "type": "uint256",
                                      "value": "_height"
                                    },
                                    "id": 16527,
                                    "name": "Identifier",
                                    "src": "2249:7:56"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "add",
                                          "referencedDeclaration": 13920,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 16484,
                                              "type": "uint256",
                                              "value": "_anchorHeight"
                                            },
                                            "id": 16528,
                                            "name": "Identifier",
                                            "src": "2259:13:56"
                                          }
                                        ],
                                        "id": 16529,
                                        "name": "MemberAccess",
                                        "src": "2259:17:56"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 16500,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 16530,
                                            "name": "Identifier",
                                            "src": "2277:1:56"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 16531,
                                            "name": "Literal",
                                            "src": "2281:1:56"
                                          }
                                        ],
                                        "id": 16532,
                                        "name": "BinaryOperation",
                                        "src": "2277:5:56"
                                      }
                                    ],
                                    "id": 16533,
                                    "name": "FunctionCall",
                                    "src": "2259:24:56"
                                  }
                                ],
                                "id": 16534,
                                "name": "Assignment",
                                "src": "2249:34:56"
                              }
                            ],
                            "id": 16535,
                            "name": "ExpressionStatement",
                            "src": "2249:34:56"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "bytes32"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 16475,
                                      "type": "bytes32",
                                      "value": "_currentDigest"
                                    },
                                    "id": 16536,
                                    "name": "Identifier",
                                    "src": "2297:14:56"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes32",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "hash256",
                                          "referencedDeclaration": 11851,
                                          "type": "function (bytes memory) pure returns (bytes32)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 16472,
                                              "type": "bytes memory",
                                              "value": "_header"
                                            },
                                            "id": 16537,
                                            "name": "Identifier",
                                            "src": "2314:7:56"
                                          }
                                        ],
                                        "id": 16538,
                                        "name": "MemberAccess",
                                        "src": "2314:15:56"
                                      }
                                    ],
                                    "id": 16539,
                                    "name": "FunctionCall",
                                    "src": "2314:17:56"
                                  }
                                ],
                                "id": 16540,
                                "name": "Assignment",
                                "src": "2297:34:56"
                              }
                            ],
                            "id": 16541,
                            "name": "ExpressionStatement",
                            "src": "2297:34:56"
                          },
                          {
                            "attributes": {
                              "falseBody": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "bytes32"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 15316,
                                          "type": "mapping(bytes32 => bytes32)",
                                          "value": "previousBlock"
                                        },
                                        "id": 16542,
                                        "name": "Identifier",
                                        "src": "2532:13:56"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 16475,
                                          "type": "bytes32",
                                          "value": "_currentDigest"
                                        },
                                        "id": 16543,
                                        "name": "Identifier",
                                        "src": "2546:14:56"
                                      }
                                    ],
                                    "id": 16544,
                                    "name": "IndexAccess",
                                    "src": "2532:29:56"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes32",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(bytes32)",
                                          "value": "bytes32"
                                        },
                                        "id": 16545,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "2565:7:56"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 16546,
                                        "name": "Literal",
                                        "src": "2573:1:56"
                                      }
                                    ],
                                    "id": 16547,
                                    "name": "FunctionCall",
                                    "src": "2565:10:56"
                                  }
                                ],
                                "id": 16548,
                                "name": "BinaryOperation",
                                "src": "2532:43:56"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "tuple()",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                },
                                                {
                                                  "typeIdentifier": "t_stringliteral_577a884d824749cadf11f1d13d4dc4655ad406f62456ad5e910541517ce4d497",
                                                  "typeString": "literal_string \"Header work is insufficient\""
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                18363,
                                                18364
                                              ],
                                              "referencedDeclaration": 18364,
                                              "type": "function (bool,string memory) pure",
                                              "value": "require"
                                            },
                                            "id": 16549,
                                            "name": "Identifier",
                                            "src": "2595:7:56"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "<=",
                                              "type": "bool"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "arguments": [
                                                    null
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "type": "uint256",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        null
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "bytesToUint",
                                                      "referencedDeclaration": 11790,
                                                      "type": "function (bytes memory) pure returns (uint256)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "arguments": [
                                                            null
                                                          ],
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "isStructConstructorCall": false,
                                                          "lValueRequested": false,
                                                          "names": [
                                                            null
                                                          ],
                                                          "type": "bytes memory",
                                                          "type_conversion": false
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": [
                                                                null
                                                              ],
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "member_name": "reverseEndianness",
                                                              "referencedDeclaration": 11643,
                                                              "type": "function (bytes memory) pure returns (bytes memory)"
                                                            },
                                                            "children": [
                                                              {
                                                                "attributes": {
                                                                  "argumentTypes": null,
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": false,
                                                                  "isStructConstructorCall": false,
                                                                  "lValueRequested": false,
                                                                  "names": [
                                                                    null
                                                                  ],
                                                                  "type": "bytes memory",
                                                                  "type_conversion": false
                                                                },
                                                                "children": [
                                                                  {
                                                                    "attributes": {
                                                                      "argumentTypes": [
                                                                        {
                                                                          "typeIdentifier": "t_bytes32",
                                                                          "typeString": "bytes32"
                                                                        }
                                                                      ],
                                                                      "isConstant": false,
                                                                      "isLValue": false,
                                                                      "isPure": true,
                                                                      "lValueRequested": false,
                                                                      "member_name": "encodePacked",
                                                                      "referencedDeclaration": null,
                                                                      "type": "function () pure returns (bytes memory)"
                                                                    },
                                                                    "children": [
                                                                      {
                                                                        "attributes": {
                                                                          "argumentTypes": null,
                                                                          "overloadedDeclarations": [
                                                                            null
                                                                          ],
                                                                          "referencedDeclaration": 18347,
                                                                          "type": "abi",
                                                                          "value": "abi"
                                                                        },
                                                                        "id": 16550,
                                                                        "name": "Identifier",
                                                                        "src": "2624:3:56"
                                                                      }
                                                                    ],
                                                                    "id": 16551,
                                                                    "name": "MemberAccess",
                                                                    "src": "2624:16:56"
                                                                  },
                                                                  {
                                                                    "attributes": {
                                                                      "argumentTypes": null,
                                                                      "overloadedDeclarations": [
                                                                        null
                                                                      ],
                                                                      "referencedDeclaration": 16475,
                                                                      "type": "bytes32",
                                                                      "value": "_currentDigest"
                                                                    },
                                                                    "id": 16552,
                                                                    "name": "Identifier",
                                                                    "src": "2641:14:56"
                                                                  }
                                                                ],
                                                                "id": 16553,
                                                                "name": "FunctionCall",
                                                                "src": "2624:32:56"
                                                              }
                                                            ],
                                                            "id": 16554,
                                                            "name": "MemberAccess",
                                                            "src": "2624:50:56"
                                                          }
                                                        ],
                                                        "id": 16555,
                                                        "name": "FunctionCall",
                                                        "src": "2624:52:56"
                                                      }
                                                    ],
                                                    "id": 16556,
                                                    "name": "MemberAccess",
                                                    "src": "2624:64:56"
                                                  }
                                                ],
                                                "id": 16557,
                                                "name": "FunctionCall",
                                                "src": "2624:66:56"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "arguments": [
                                                    null
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "type": "uint256",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        null
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "extractTarget",
                                                      "referencedDeclaration": 12925,
                                                      "type": "function (bytes memory) pure returns (uint256)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 16472,
                                                          "type": "bytes memory",
                                                          "value": "_header"
                                                        },
                                                        "id": 16558,
                                                        "name": "Identifier",
                                                        "src": "2694:7:56"
                                                      }
                                                    ],
                                                    "id": 16559,
                                                    "name": "MemberAccess",
                                                    "src": "2694:21:56"
                                                  }
                                                ],
                                                "id": 16560,
                                                "name": "FunctionCall",
                                                "src": "2694:23:56"
                                              }
                                            ],
                                            "id": 16561,
                                            "name": "BinaryOperation",
                                            "src": "2624:93:56"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "48656164657220776f726b20697320696e73756666696369656e74",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "string",
                                              "type": "literal_string \"Header work is insufficient\"",
                                              "value": "Header work is insufficient"
                                            },
                                            "id": 16562,
                                            "name": "Literal",
                                            "src": "2739:29:56"
                                          }
                                        ],
                                        "id": 16563,
                                        "name": "FunctionCall",
                                        "src": "2595:174:56"
                                      }
                                    ],
                                    "id": 16564,
                                    "name": "ExpressionStatement",
                                    "src": "2595:174:56"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "bytes32"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "type": "bytes32"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 15316,
                                                  "type": "mapping(bytes32 => bytes32)",
                                                  "value": "previousBlock"
                                                },
                                                "id": 16565,
                                                "name": "Identifier",
                                                "src": "2787:13:56"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 16475,
                                                  "type": "bytes32",
                                                  "value": "_currentDigest"
                                                },
                                                "id": 16566,
                                                "name": "Identifier",
                                                "src": "2801:14:56"
                                              }
                                            ],
                                            "id": 16567,
                                            "name": "IndexAccess",
                                            "src": "2787:29:56"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 16478,
                                              "type": "bytes32",
                                              "value": "_previousDigest"
                                            },
                                            "id": 16568,
                                            "name": "Identifier",
                                            "src": "2819:15:56"
                                          }
                                        ],
                                        "id": 16569,
                                        "name": "Assignment",
                                        "src": "2787:47:56"
                                      }
                                    ],
                                    "id": 16570,
                                    "name": "ExpressionStatement",
                                    "src": "2787:47:56"
                                  },
                                  {
                                    "attributes": {
                                      "falseBody": null
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "==",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "%",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 16469,
                                                  "type": "uint256",
                                                  "value": "_height"
                                                },
                                                "id": 16571,
                                                "name": "Identifier",
                                                "src": "2856:7:56"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 15306,
                                                  "type": "uint32",
                                                  "value": "HEIGHT_INTERVAL"
                                                },
                                                "id": 16572,
                                                "name": "Identifier",
                                                "src": "2866:15:56"
                                              }
                                            ],
                                            "id": 16573,
                                            "name": "BinaryOperation",
                                            "src": "2856:25:56"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "30",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 0",
                                              "value": "0"
                                            },
                                            "id": 16574,
                                            "name": "Literal",
                                            "src": "2885:1:56"
                                          }
                                        ],
                                        "id": 16575,
                                        "name": "BinaryOperation",
                                        "src": "2856:30:56"
                                      },
                                      {
                                        "children": [
                                          {
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "=",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": true,
                                                      "type": "uint256"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 15320,
                                                          "type": "mapping(bytes32 => uint256)",
                                                          "value": "blockHeight"
                                                        },
                                                        "id": 16576,
                                                        "name": "Identifier",
                                                        "src": "3034:11:56"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 16475,
                                                          "type": "bytes32",
                                                          "value": "_currentDigest"
                                                        },
                                                        "id": 16577,
                                                        "name": "Identifier",
                                                        "src": "3046:14:56"
                                                      }
                                                    ],
                                                    "id": 16578,
                                                    "name": "IndexAccess",
                                                    "src": "3034:27:56"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 16469,
                                                      "type": "uint256",
                                                      "value": "_height"
                                                    },
                                                    "id": 16579,
                                                    "name": "Identifier",
                                                    "src": "3064:7:56"
                                                  }
                                                ],
                                                "id": 16580,
                                                "name": "Assignment",
                                                "src": "3034:37:56"
                                              }
                                            ],
                                            "id": 16581,
                                            "name": "ExpressionStatement",
                                            "src": "3034:37:56"
                                          }
                                        ],
                                        "id": 16582,
                                        "name": "Block",
                                        "src": "2888:202:56"
                                      }
                                    ],
                                    "id": 16583,
                                    "name": "IfStatement",
                                    "src": "2852:238:56"
                                  }
                                ],
                                "id": 16584,
                                "name": "Block",
                                "src": "2577:527:56"
                              }
                            ],
                            "id": 16585,
                            "name": "IfStatement",
                            "src": "2528:576:56"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_09edac151df9e4894b9dc57d4b428f162596747b62bb7347fd3851a717f60df7",
                                          "typeString": "literal_string \"Headers do not form a consistent chain\""
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        18363,
                                        18364
                                      ],
                                      "referencedDeclaration": 18364,
                                      "type": "function (bool,string memory) pure",
                                      "value": "require"
                                    },
                                    "id": 16586,
                                    "name": "Identifier",
                                    "src": "3282:7:56"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bool",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "validateHeaderPrevHash",
                                          "referencedDeclaration": 14206,
                                          "type": "function (bytes memory,bytes32) pure returns (bool)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 16472,
                                              "type": "bytes memory",
                                              "value": "_header"
                                            },
                                            "id": 16587,
                                            "name": "Identifier",
                                            "src": "3290:7:56"
                                          }
                                        ],
                                        "id": 16588,
                                        "name": "MemberAccess",
                                        "src": "3290:30:56"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 16478,
                                          "type": "bytes32",
                                          "value": "_previousDigest"
                                        },
                                        "id": 16589,
                                        "name": "Identifier",
                                        "src": "3321:15:56"
                                      }
                                    ],
                                    "id": 16590,
                                    "name": "FunctionCall",
                                    "src": "3290:47:56"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "4865616465727320646f206e6f7420666f726d206120636f6e73697374656e7420636861696e",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "string",
                                      "type": "literal_string \"Headers do not form a consistent chain\"",
                                      "value": "Headers do not form a consistent chain"
                                    },
                                    "id": 16591,
                                    "name": "Literal",
                                    "src": "3339:40:56"
                                  }
                                ],
                                "id": 16592,
                                "name": "FunctionCall",
                                "src": "3282:98:56"
                              }
                            ],
                            "id": 16593,
                            "name": "ExpressionStatement",
                            "src": "3282:98:56"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "bytes32"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 16478,
                                      "type": "bytes32",
                                      "value": "_previousDigest"
                                    },
                                    "id": 16594,
                                    "name": "Identifier",
                                    "src": "3395:15:56"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 16475,
                                      "type": "bytes32",
                                      "value": "_currentDigest"
                                    },
                                    "id": 16595,
                                    "name": "Identifier",
                                    "src": "3413:14:56"
                                  }
                                ],
                                "id": 16596,
                                "name": "Assignment",
                                "src": "3395:32:56"
                              }
                            ],
                            "id": 16597,
                            "name": "ExpressionStatement",
                            "src": "3395:32:56"
                          }
                        ],
                        "id": 16598,
                        "name": "Block",
                        "src": "2182:1256:56"
                      }
                    ],
                    "id": 16599,
                    "name": "ForStatement",
                    "src": "2122:1316:56"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14299,
                              "type": "function (bytes32,bytes32)",
                              "value": "Extension"
                            },
                            "id": 16600,
                            "name": "Identifier",
                            "src": "3453:9:56"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "hash256",
                                  "referencedDeclaration": 11851,
                                  "type": "function (bytes memory) pure returns (bytes32)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 16461,
                                      "type": "bytes memory",
                                      "value": "_anchor"
                                    },
                                    "id": 16601,
                                    "name": "Identifier",
                                    "src": "3476:7:56"
                                  }
                                ],
                                "id": 16602,
                                "name": "MemberAccess",
                                "src": "3476:15:56"
                              }
                            ],
                            "id": 16603,
                            "name": "FunctionCall",
                            "src": "3476:17:56"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 16475,
                              "type": "bytes32",
                              "value": "_currentDigest"
                            },
                            "id": 16604,
                            "name": "Identifier",
                            "src": "3507:14:56"
                          }
                        ],
                        "id": 16605,
                        "name": "FunctionCall",
                        "src": "3453:69:56"
                      }
                    ],
                    "id": 16606,
                    "name": "EmitStatement",
                    "src": "3448:74:56"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 16467
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 16607,
                        "name": "Literal",
                        "src": "3539:4:56"
                      }
                    ],
                    "id": 16608,
                    "name": "Return",
                    "src": "3532:11:56"
                  }
                ],
                "id": 16609,
                "name": "Block",
                "src": "1340:2210:56"
              }
            ],
            "id": 16610,
            "name": "FunctionDefinition",
            "src": "1250:2300:56"
          }
        ],
        "id": 16611,
        "name": "ContractDefinition",
        "src": "143:3409:56"
      }
    ],
    "id": 16612,
    "name": "SourceUnit",
    "src": "0:3553:56"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T12:01:17.278Z",
  "networkType": "ethereum",
  "devdoc": {
    "methods": {
      "addHeaders(bytes,bytes)": {
        "details": "We check integrity and consistency of the header chain",
        "params": {
          "_anchor": "The header immediately preceeding the new chain",
          "_headers": "A tightly-packed list of 80-byte Bitcoin headers"
        },
        "return": "True if successfully written, error otherwise"
      },
      "addHeadersWithRetarget(bytes,bytes,bytes)": {
        "details": "Checks the retarget, the heights, and the linkage",
        "params": {
          "_headers": "A tightly-packed list of 80-byte Bitcoin headers",
          "_oldPeriodEndHeader": "The last header in the difficulty period being closed",
          "_oldPeriodStartHeader": "The first header in the difficulty period being closed"
        },
        "return": "True if successfully written, error otherwise"
      },
      "cancelRequest(uint256)": {
        "details": "Prevents the relay from forwarding tx infromation",
        "params": {
          "_requestID": "The ID of the request to be cancelled"
        },
        "return": "True if succesful, error otherwise"
      },
      "findAncestor(bytes32,uint256)": {
        "details": "Will fail if the header is unknown",
        "params": {
          "_digest": "The header digest to search for"
        },
        "return": "The height of the header, or error if unknown"
      },
      "findHeight(bytes32)": {
        "details": "Will fail if the header is unknown",
        "params": {
          "_digest": "The header digest to search for"
        },
        "return": "The height of the header, or error if unknown"
      },
      "getBestKnownDigest()": {
        "details": "This updated only by calling markNewHeaviest",
        "return": "The hash of the best marked chain tip"
      },
      "getCurrentEpochDifficulty()": {
        "details": "This is updated when a new heavist header has a new diff",
        "return": "The difficulty of the bestKnownDigest"
      },
      "getLastReorgCommonAncestor()": {
        "details": "This is updated only by calling markNewHeaviest",
        "return": "The hash of the shared ancestor of the most recent fork"
      },
      "getPrevEpochDifficulty()": {
        "details": "This is updated when a difficulty change is accepted",
        "return": "The difficulty of the previous epoch"
      },
      "getRelayGenesis()": {
        "details": "This is an initialization parameter",
        "return": "The hash of the first block of the relay"
      },
      "getRequest(uint256)": {
        "details": "Requests ids are numerical",
        "params": {
          "_requestID": "The numerical ID of the request"
        },
        "return": "A tuple representation of the request struct"
      },
      "isAncestor(bytes32,bytes32,uint256)": {
        "details": "Limit the amount of lookups (and thus gas usage) with _limit",
        "params": {
          "_ancestor": "The prospective ancestor",
          "_descendant": "The descendant to check",
          "_limit": "The maximum number of blocks to check"
        },
        "return": "true if ancestor is at most limit blocks lower than descendant, otherwise false"
      },
      "markNewHeaviest(bytes32,bytes,bytes,uint256)": {
        "details": "We don't check this AT ALL really. Don't use relays with bad genesis",
        "params": {
          "_ancestor": "The digest of the most recent common ancestor",
          "_currentBest": "The 80-byte header referenced by bestKnownDigest",
          "_limit": "Limit the amount of traversal of the chain",
          "_newBest": "The 80-byte header to mark as the new best"
        },
        "return": "True if successfully updates bestKnownDigest, error otherwise"
      },
      "provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)": {
        "details": "The caller must specify which inputs, which outputs, and which request",
        "params": {
          "_header": "The header containing the merkleroot committing to the tx",
          "_index": "The index of the tx in the merkle tree's leaves",
          "_locktime": "The tx locktime, always the last 4 bytes of the tx",
          "_proof": "The merkle proof intermediate nodes",
          "_reqIndices": "The input and output index to check against the request, packed",
          "_requestID": "The id of the request that has been triggered",
          "_version": "The tx version, always the first 4 bytes of the tx",
          "_vin": "The tx input vector",
          "_vout": "The tx output vector"
        },
        "return": "True if succesful, error otherwise"
      },
      "request(bytes,bytes,uint64,address,uint8,uint256)": {
        "details": "The request can be a spent utxo and/or a created utxo",
        "params": {
          "_consumer": "The address of a ISPVConsumer exposing spv",
          "_notBefore": "A timestamp before which proofs are not accepted",
          "_numConfs": "The minimum number of Bitcoin confirmations to accept",
          "_pays": "An output script that must be paid in acceptable txns (optional)",
          "_paysValue": "A minimum value that must be paid to the output script (optional)",
          "_spends": "An outpoint that must be spent in acceptable txns (optional)"
        },
        "return": "A unique request ID."
      }
    }
  },
  "userdoc": {
    "methods": {
      "addHeaders(bytes,bytes)": {
        "notice": "Adds headers to storage after validating"
      },
      "addHeadersWithRetarget(bytes,bytes,bytes)": {
        "notice": "Adds headers to storage, performs additional validation of retarget"
      },
      "cancelRequest(uint256)": {
        "notice": "Cancel a bitcoin event request."
      },
      "findAncestor(bytes32,uint256)": {
        "notice": "Finds an ancestor for a block by its digest"
      },
      "findHeight(bytes32)": {
        "notice": "Finds the height of a header by its digest"
      },
      "getBestKnownDigest()": {
        "notice": "Getter for bestKnownDigest"
      },
      "getCurrentEpochDifficulty()": {
        "notice": "Getter for currentEpochDiff"
      },
      "getLastReorgCommonAncestor()": {
        "notice": "Getter for relayGenesis"
      },
      "getPrevEpochDifficulty()": {
        "notice": "Getter for prevEpochDiff"
      },
      "getRelayGenesis()": {
        "notice": "Getter for relayGenesis"
      },
      "getRequest(uint256)": {
        "notice": "Retrieve info about a request"
      },
      "isAncestor(bytes32,bytes32,uint256)": {
        "notice": "Checks if a digest is an ancestor of the current one"
      },
      "markNewHeaviest(bytes32,bytes,bytes,uint256)": {
        "notice": "Gives a starting point for the relay"
      },
      "provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)": {
        "notice": "Provide a proof of a tx that satisfies some request"
      },
      "request(bytes,bytes,uint64,address,uint8,uint256)": {
        "notice": "Subscribe to a feed of Bitcoin txns matching a request"
      }
    }
  }
}