{
  "contractName": "GenesisProtocol",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "parameters",
      "outputs": [
        {
          "name": "queuedVoteRequiredPercentage",
          "type": "uint256"
        },
        {
          "name": "queuedVotePeriodLimit",
          "type": "uint256"
        },
        {
          "name": "boostedVotePeriodLimit",
          "type": "uint256"
        },
        {
          "name": "preBoostedVotePeriodLimit",
          "type": "uint256"
        },
        {
          "name": "thresholdConst",
          "type": "uint256"
        },
        {
          "name": "limitExponentValue",
          "type": "uint256"
        },
        {
          "name": "quietEndingPeriod",
          "type": "uint256"
        },
        {
          "name": "proposingRepReward",
          "type": "uint256"
        },
        {
          "name": "votersReputationLossRatio",
          "type": "uint256"
        },
        {
          "name": "minimumDaoBounty",
          "type": "uint256"
        },
        {
          "name": "daoBountyConst",
          "type": "uint256"
        },
        {
          "name": "activationTime",
          "type": "uint256"
        },
        {
          "name": "voteOnBehalf",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_params",
          "type": "uint256[11]"
        },
        {
          "name": "_voteOnBehalf",
          "type": "address"
        }
      ],
      "name": "getParametersHash",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "NO",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "proposalsCnt",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_paramsHash",
          "type": "bytes32"
        },
        {
          "name": "_organizationId",
          "type": "bytes32"
        }
      ],
      "name": "threshold",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "DELEGATION_HASH_EIP712",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "proposals",
      "outputs": [
        {
          "name": "organizationId",
          "type": "bytes32"
        },
        {
          "name": "callbacks",
          "type": "address"
        },
        {
          "name": "state",
          "type": "uint8"
        },
        {
          "name": "winningVote",
          "type": "uint256"
        },
        {
          "name": "proposer",
          "type": "address"
        },
        {
          "name": "currentBoostedVotePeriodLimit",
          "type": "uint256"
        },
        {
          "name": "paramsHash",
          "type": "bytes32"
        },
        {
          "name": "daoBountyRemain",
          "type": "uint256"
        },
        {
          "name": "daoBounty",
          "type": "uint256"
        },
        {
          "name": "totalStakes",
          "type": "uint256"
        },
        {
          "name": "confidenceThreshold",
          "type": "uint256"
        },
        {
          "name": "expirationCallBountyPercentage",
          "type": "uint256"
        },
        {
          "name": "daoRedeemItsWinnings",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "name": "redeemDaoBounty",
      "outputs": [
        {
          "name": "redeemedAmount",
          "type": "uint256"
        },
        {
          "name": "potentialAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "stakingToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "shouldBoost",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "_paramsHash",
          "type": "bytes32"
        },
        {
          "name": "_proposer",
          "type": "address"
        },
        {
          "name": "_organization",
          "type": "address"
        }
      ],
      "name": "propose",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_params",
          "type": "uint256[11]"
        },
        {
          "name": "_voteOnBehalf",
          "type": "address"
        }
      ],
      "name": "setParameters",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "NUM_OF_CHOICES",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "stakesNonce",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "YES",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "organizations",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "averagesDownstakesOfBoosted",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "executeBoosted",
      "outputs": [
        {
          "name": "expirationCallBounty",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "name": "rewards",
          "type": "uint256[3]"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "orgBoostedProposalsCnt",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_stakingToken",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_staker",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_vote",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Stake",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Redeem",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "RedeemDaoBounty",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "RedeemReputation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_proposalState",
          "type": "uint8"
        }
      ],
      "name": "StateChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_executionState",
          "type": "uint8"
        }
      ],
      "name": "GPExecuteProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "ExpirationCallBounty",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_confidenceThreshold",
          "type": "uint256"
        }
      ],
      "name": "ConfidenceLevelChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_numOfChoices",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_proposer",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_paramsHash",
          "type": "bytes32"
        }
      ],
      "name": "NewProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_decision",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_totalReputation",
          "type": "uint256"
        }
      ],
      "name": "ExecuteProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_voter",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_vote",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_reputation",
          "type": "uint256"
        }
      ],
      "name": "VoteProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_organization",
          "type": "address"
        }
      ],
      "name": "CancelProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_voter",
          "type": "address"
        }
      ],
      "name": "CancelVoting",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "name": "_vote",
          "type": "uint256"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "stake",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "name": "_vote",
          "type": "uint256"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "name": "_signatureType",
          "type": "uint256"
        },
        {
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "stakeWithSignature",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "name": "_vote",
          "type": "uint256"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_voter",
          "type": "address"
        }
      ],
      "name": "vote",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "cancelVote",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "getNumberOfChoices",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "getProposalTimes",
      "outputs": [
        {
          "name": "times",
          "type": "uint256[3]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "name": "_voter",
          "type": "address"
        }
      ],
      "name": "voteInfo",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "name": "_choice",
          "type": "uint256"
        }
      ],
      "name": "voteStatus",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "isVotable",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "proposalStatus",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "getProposalOrganization",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "name": "_staker",
          "type": "address"
        }
      ],
      "name": "getStaker",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "name": "_vote",
          "type": "uint256"
        }
      ],
      "name": "voteStake",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "winningVote",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "state",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isAbstainAllow",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getAllowedRangeOfChoices",
      "outputs": [
        {
          "name": "min",
          "type": "uint256"
        },
        {
          "name": "max",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "score",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"parameters\",\"outputs\":[{\"name\":\"queuedVoteRequiredPercentage\",\"type\":\"uint256\"},{\"name\":\"queuedVotePeriodLimit\",\"type\":\"uint256\"},{\"name\":\"boostedVotePeriodLimit\",\"type\":\"uint256\"},{\"name\":\"preBoostedVotePeriodLimit\",\"type\":\"uint256\"},{\"name\":\"thresholdConst\",\"type\":\"uint256\"},{\"name\":\"limitExponentValue\",\"type\":\"uint256\"},{\"name\":\"quietEndingPeriod\",\"type\":\"uint256\"},{\"name\":\"proposingRepReward\",\"type\":\"uint256\"},{\"name\":\"votersReputationLossRatio\",\"type\":\"uint256\"},{\"name\":\"minimumDaoBounty\",\"type\":\"uint256\"},{\"name\":\"daoBountyConst\",\"type\":\"uint256\"},{\"name\":\"activationTime\",\"type\":\"uint256\"},{\"name\":\"voteOnBehalf\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_params\",\"type\":\"uint256[11]\"},{\"name\":\"_voteOnBehalf\",\"type\":\"address\"}],\"name\":\"getParametersHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"NO\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"voteInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"getProposalOrganization\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalsCnt\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_paramsHash\",\"type\":\"bytes32\"},{\"name\":\"_organizationId\",\"type\":\"bytes32\"}],\"name\":\"threshold\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_vote\",\"type\":\"uint256\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DELEGATION_HASH_EIP712\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"proposals\",\"outputs\":[{\"name\":\"organizationId\",\"type\":\"bytes32\"},{\"name\":\"callbacks\",\"type\":\"address\"},{\"name\":\"state\",\"type\":\"uint8\"},{\"name\":\"winningVote\",\"type\":\"uint256\"},{\"name\":\"proposer\",\"type\":\"address\"},{\"name\":\"currentBoostedVotePeriodLimit\",\"type\":\"uint256\"},{\"name\":\"paramsHash\",\"type\":\"bytes32\"},{\"name\":\"daoBountyRemain\",\"type\":\"uint256\"},{\"name\":\"daoBounty\",\"type\":\"uint256\"},{\"name\":\"totalStakes\",\"type\":\"uint256\"},{\"name\":\"confidenceThreshold\",\"type\":\"uint256\"},{\"name\":\"expirationCallBountyPercentage\",\"type\":\"uint256\"},{\"name\":\"daoRedeemItsWinnings\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_vote\",\"type\":\"uint256\"},{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"winningVote\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_vote\",\"type\":\"uint256\"},{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_nonce\",\"type\":\"uint256\"},{\"name\":\"_signatureType\",\"type\":\"uint256\"},{\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"stakeWithSignature\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAllowedRangeOfChoices\",\"outputs\":[{\"name\":\"min\",\"type\":\"uint256\"},{\"name\":\"max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isAbstainAllow\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"state\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"redeemDaoBounty\",\"outputs\":[{\"name\":\"redeemedAmount\",\"type\":\"uint256\"},{\"name\":\"potentialAmount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_vote\",\"type\":\"uint256\"}],\"name\":\"voteStake\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stakingToken\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"proposalStatus\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"shouldBoost\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"_paramsHash\",\"type\":\"bytes32\"},{\"name\":\"_proposer\",\"type\":\"address\"},{\"name\":\"_organization\",\"type\":\"address\"}],\"name\":\"propose\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_params\",\"type\":\"uint256[11]\"},{\"name\":\"_voteOnBehalf\",\"type\":\"address\"}],\"name\":\"setParameters\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"cancelVote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"NUM_OF_CHOICES\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"getNumberOfChoices\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakesNonce\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"YES\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"voteStatus\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"organizations\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"averagesDownstakesOfBoosted\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"executeBoosted\",\"outputs\":[{\"name\":\"expirationCallBounty\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"isVotable\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"getProposalTimes\",\"outputs\":[{\"name\":\"times\",\"type\":\"uint256[3]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"name\":\"rewards\",\"type\":\"uint256[3]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"score\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"execute\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"orgBoostedProposalsCnt\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_stakingToken\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_staker\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_vote\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Stake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"RedeemDaoBounty\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"RedeemReputation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"_proposalState\",\"type\":\"uint8\"}],\"name\":\"StateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"_executionState\",\"type\":\"uint8\"}],\"name\":\"GPExecuteProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"ExpirationCallBounty\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"_confidenceThreshold\",\"type\":\"uint256\"}],\"name\":\"ConfidenceLevelChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_numOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_proposer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_paramsHash\",\"type\":\"bytes32\"}],\"name\":\"NewProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_decision\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_totalReputation\",\"type\":\"uint256\"}],\"name\":\"ExecuteProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_vote\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_reputation\",\"type\":\"uint256\"}],\"name\":\"VoteProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"}],\"name\":\"CancelProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"CancelVoting\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"cancelVote(bytes32)\":{\"details\":\"Cancel the vote of the msg.sender. cancel vote is not allow in genesisProtocol so this function doing nothing. This function is here in order to comply to the IntVoteInterface .\"},\"constructor\":{\"details\":\"Constructor\"},\"execute(bytes32)\":{\"details\":\"execute check if the proposal has been decided, and if so, execute the proposal\",\"params\":{\"_proposalId\":\"the id of the proposal\"},\"return\":\"bool true - the proposal has been executed             false - otherwise.\"},\"executeBoosted(bytes32)\":{\"details\":\"executeBoosted try to execute a boosted or QuietEndingPeriod proposal if it is expired\",\"params\":{\"_proposalId\":\"the id of the proposal\"},\"return\":\"uint256 expirationCallBounty the bounty amount for the expiration call\"},\"getAllowedRangeOfChoices()\":{\"details\":\"getAllowedRangeOfChoices returns the allowed range of choices for a voting machine.\",\"return\":\"min - minimum number of choices max - maximum number of choices\"},\"getNumberOfChoices(bytes32)\":{\"details\":\"getNumberOfChoices returns the number of choices possible in this proposal\",\"return\":\"uint256 that contains number of choices\"},\"getParametersHash(uint256[11],address)\":{\"details\":\"hashParameters returns a hash of the given parameters\"},\"getProposalOrganization(bytes32)\":{\"details\":\"getProposalOrganization return the organizationId for a given proposal\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"bytes32 organization identifier\"},\"getProposalTimes(bytes32)\":{\"details\":\"getProposalTimes returns proposals times variables.\",\"params\":{\"_proposalId\":\"id of the proposal\"},\"return\":\"proposals times array\"},\"getStaker(bytes32,address)\":{\"details\":\"getStaker return the vote and stake amount for a given proposal and staker\",\"params\":{\"_proposalId\":\"the ID of the proposal\",\"_staker\":\"staker address\"},\"return\":\"uint256 voteuint256 amount\"},\"isAbstainAllow()\":{\"details\":\"isAbstainAllow returns if the voting machine allow abstain (0)\",\"return\":\"bool true or false\"},\"isVotable(bytes32)\":{\"details\":\"isVotable check if the proposal is votable\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"bool true or false\"},\"proposalStatus(bytes32)\":{\"details\":\"proposalStatus return the total votes and stakes for a given proposal\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"uint256 preBoostedVotes YESuint256 preBoostedVotes NOuint256 total stakes YESuint256 total stakes NO\"},\"propose(uint256,bytes32,address,address)\":{\"details\":\"register a new proposal with the given parameters. Every proposal has a unique ID which is being generated by calculating keccak256 of a incremented counter.\",\"params\":{\"_organization\":\"address\",\"_paramsHash\":\"parameters hash\",\"_proposer\":\"address\"}},\"redeem(bytes32,address)\":{\"details\":\"redeem a reward for a successful stake, vote or proposing. The function use a beneficiary address as a parameter (and not msg.sender) to enable users to redeem on behalf of someone else.\",\"params\":{\"_beneficiary\":\"- the beneficiary address\",\"_proposalId\":\"the ID of the proposal\"},\"return\":\"rewards -          [0] stakerTokenReward          [1] voterReputationReward          [2] proposerReputationReward\"},\"redeemDaoBounty(bytes32,address)\":{\"details\":\"redeemDaoBounty a reward for a successful stake. The function use a beneficiary address as a parameter (and not msg.sender) to enable users to redeem on behalf of someone else.\",\"params\":{\"_beneficiary\":\"- the beneficiary address\",\"_proposalId\":\"the ID of the proposal\"},\"return\":\"redeemedAmount - redeem token amountpotentialAmount - potential redeem token amount(if there is enough tokens bounty at the organization )\"},\"score(bytes32)\":{\"details\":\"score return the proposal score\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"uint256 proposal score.\"},\"setParameters(uint256[11],address)\":{\"details\":\"hash the parameters, save them if necessary, and return the hash value\",\"params\":{\"_params\":\"a parameters array   _params[0] - _queuedVoteRequiredPercentage,   _params[1] - _queuedVotePeriodLimit, //the time limit for a proposal to be in an absolute voting mode.   _params[2] - _boostedVotePeriodLimit, //the time limit for a proposal to be in an relative voting mode.   _params[3] - _preBoostedVotePeriodLimit, //the time limit for a proposal to be in an preparation                 state (stable) before boosted.   _params[4] -_thresholdConst   _params[5] -_quietEndingPeriod   _params[6] -_proposingRepReward   _params[7] -_votersReputationLossRatio   _params[8] -_minimumDaoBounty   _params[9] -_daoBountyConst   _params[10] -_activationTime\",\"_voteOnBehalf\":\"- authorized to vote on behalf of others.\"}},\"shouldBoost(bytes32)\":{\"details\":\"shouldBoost check if a proposal should be shifted to boosted phase.\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"bool true or false.\"},\"stake(bytes32,uint256,uint256)\":{\"details\":\"staking function\",\"params\":{\"_amount\":\"the betting amount\",\"_proposalId\":\"id of the proposal\",\"_vote\":\"NO(2) or YES(1).\"},\"return\":\"bool true - the proposal has been executed             false - otherwise.\"},\"stakeWithSignature(bytes32,uint256,uint256,uint256,uint256,bytes)\":{\"details\":\"stakeWithSignature function\",\"params\":{\"_amount\":\"the betting amount\",\"_nonce\":\"nonce value ,it is part of the signature to ensure that a signature can be received only once.\",\"_proposalId\":\"id of the proposal\",\"_signature\":\"- signed data by the staker\",\"_signatureType\":\"signature type 1 - for web3.eth.sign 2 - for eth_signTypedData according to EIP #712.\",\"_vote\":\"NO(2) or YES(1).\"},\"return\":\"bool true - the proposal has been executed             false - otherwise.\"},\"state(bytes32)\":{\"details\":\"voteStake return the state for a given proposal\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"ProposalState proposal state\"},\"threshold(bytes32,bytes32)\":{\"details\":\"threshold return the organization's score threshold which required by a proposal to shift to boosted state. This threshold is dynamically set and it depend on the number of boosted proposal.\",\"params\":{\"_organizationId\":\"the organization identifier\",\"_paramsHash\":\"the organization parameters hash\"},\"return\":\"uint256 organization's score threshold as real number.\"},\"vote(bytes32,uint256,uint256,address)\":{\"details\":\"voting function\",\"params\":{\"_amount\":\"the reputation amount to vote with . if _amount == 0 it will use all voter reputation.\",\"_proposalId\":\"id of the proposal\",\"_vote\":\"NO(2) or YES(1).\",\"_voter\":\"voter address\"},\"return\":\"bool true - the proposal has been executed             false - otherwise.\"},\"voteInfo(bytes32,address)\":{\"details\":\"voteInfo returns the vote and the amount of reputation of the user committed to this proposal\",\"params\":{\"_proposalId\":\"the ID of the proposal\",\"_voter\":\"the address of the voter\"},\"return\":\"uint256 vote - the voters vote       uint256 reputation - amount of reputation committed by _voter to _proposalId\"},\"voteStake(bytes32,uint256)\":{\"details\":\"voteStake return the amount stakes for a given proposal and vote\",\"params\":{\"_proposalId\":\"the ID of the proposal\",\"_vote\":\"vote number\"},\"return\":\"uint256 stake amount\"},\"voteStatus(bytes32,uint256)\":{\"details\":\"voteStatus returns the reputation voted for a proposal for a specific voting choice.\",\"params\":{\"_choice\":\"the index in the\",\"_proposalId\":\"the ID of the proposal\"},\"return\":\"voted reputation for the given choice\"},\"winningVote(bytes32)\":{\"details\":\"voteStake return the winningVote for a given proposal\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"uint256 winningVote\"}},\"title\":\"GenesisProtocol implementation -an organization's voting machine scheme.\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@daostack/infra/contracts/votingMachines/GenesisProtocol.sol\":\"GenesisProtocol\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@daostack/infra/contracts/libs/RealMath.sol\":{\"keccak256\":\"0x3ee79c4b483da327916ac36f9d5cc6a1f2f0363db3ad06793ec67f46e1f653db\",\"urls\":[\"bzzr://548cdb33afa45d2d4bfb0ed3f557257f77c7d9ae142326d04584e20d00c153d3\"]},\"@daostack/infra/contracts/votingMachines/GenesisProtocol.sol\":{\"keccak256\":\"0x0321da6019e0e1a7fc4e1ca484d7d5d376805abb17f9eb9c46a6731e9dfe58dc\",\"urls\":[\"bzzr://4cf93479ffb97b0f90d2974a0404136bfda093edb9e4b6dd3d9737a29202ee63\"]},\"@daostack/infra/contracts/votingMachines/GenesisProtocolLogic.sol\":{\"keccak256\":\"0x2bf5fba64fbda5605b9250ea8ca6d8e28dab41fb0e2b43c9145b91e1d0425eef\",\"urls\":[\"bzzr://bf7d5bb906c1f0f627d028214b0d8d2cbf0f766ead5d7b27f116b834255ffa76\"]},\"@daostack/infra/contracts/votingMachines/IntVoteInterface.sol\":{\"keccak256\":\"0x877991da94b1fe9c2accf69367b32fff474c4e4f7897e9cf5a61fa5d1378908f\",\"urls\":[\"bzzr://a7bb7b3a39a1553cb39378801976c8b192b801f9627098385eca24e62440826b\"]},\"@daostack/infra/contracts/votingMachines/ProposalExecuteInterface.sol\":{\"keccak256\":\"0xb80a153793e1723b35e70ba1c3800975fbc1fae63c989cfb8134a4e58085e181\",\"urls\":[\"bzzr://e5ff7e9f77e596fff366bb31326a7d2ca82d0fdeed1d612c09589eb9fb69d9bf\"]},\"@daostack/infra/contracts/votingMachines/VotingMachineCallbacksInterface.sol\":{\"keccak256\":\"0xec215d305f0aa5a5193b6f0302a1aa6bb84e85460167f80b261faf9d30564563\",\"urls\":[\"bzzr://baae21ef9ee3e315191aece7767d3a9ab62810aff5063ad144cb2120eebdabf0\"]},\"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0xb48974d92a87053dc1d6c5389f3d1b2ad522dec23afcb508eaa935d98dfdc0b6\",\"urls\":[\"bzzr://e665a84309432c27a26e622665dd97ff29d4d6ad7ad655d6e2c50226a5e99b56\"]},\"openzeppelin-solidity/contracts/math/Math.sol\":{\"keccak256\":\"0x37605dd0606b349cfb1b679892e1bb0ef4ddc16dedb06e229cc4402610a7a848\",\"urls\":[\"bzzr://c2253b0f57a80ee1ab7d90192aec144310e9c9a420d2ca2fcfd5999ae66e8f33\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzzr://63fc4af0d7a99a770925b96a6cf48f25fc00d30274266f82db05f30baa238267\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b50604051602080620044df833981018060405260208110156200003357600080fd5b5051806200006373543ff227f64aa17ea132bf9886cab5db55dcaddf64010000000062004326620000b982021704565b15620000955760068054600160a060020a03191673543ff227f64aa17ea132bf9886cab5db55dcaddf179055620000b1565b60068054600160a060020a031916600160a060020a0383161790555b5050620000c1565b6000903b1190565b61440e80620000d16000396000f3fe608060405234801561001057600080fd5b506004361061025a576000357c01000000000000000000000000000000000000000000000000000000009004806372f702f311610158578063b4512913116100d5578063c8f526e811610099578063c8f526e81461087c578063cc3bf9e9146108d1578063e5af18c5146108fd578063e751f2711461091a578063fb6c0cbb146109375761025a565b8063b4512913146107e5578063ba51b14e14610808578063bb5a05ed14610825578063beda801514610842578063c08351061461085f5761025a565b80639525c0cc1161011c5780639525c0cc1461077b5780639bc5689d14610359578063a003651d1461079a578063a05ea6e4146107b7578063b2449d65146107dd5761025a565b806372f702f31461069157806379a1c1f6146106b557806380f5e0a1146106f857806388737b5e146107155780638894c41b1461074f5761025a565b806330ca0a53116101e65780635142bc1e116101aa5780635142bc1e146105f157806351d997b2146105f957806361d585da146106015780636359036b14610642578063707437681461066e5761025a565b806330ca0a531461045757806332ed5b121461045f578063359afa491461050d5780633c13381814610545578063488c65fc146105625761025a565b806316db51721161022d57806316db5172146103a65780631702ef0c146103d257806321b4b3dc146103ef5780632d598e58146103f75780632daedd521461041a5761025a565b8063025068041461025f57806307b4e1e3146102ea5780630d48344214610359578063119ce91b14610361575b600080fd5b61027c6004803603602081101561027557600080fd5b5035610954565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e0880152610100870152610120860152610140850152610160840152600160a060020a031661018083015251908190036101a00190f35b610347600480360361018081101561030157600080fd5b81019080806101600190600b806020026040519081016040528092919082600b60200280828437600092019190915250919450505035600160a060020a031690506109c4565b60408051918252519081900360200190f35b610347610ae1565b61038d6004803603604081101561037757600080fd5b5080359060200135600160a060020a0316610ae6565b6040805192835260208301919091528051918290030190f35b61038d600480360360408110156103bc57600080fd5b5080359060200135600160a060020a0316610b49565b610347600480360360208110156103e857600080fd5b5035610b7a565b610347610b8c565b6103476004803603604081101561040d57600080fd5b5080359060200135610b92565b6104436004803603606081101561043057600080fd5b5080359060208101359060400135610bdf565b604080519115158252519081900360200190f35b610347610bf5565b61047c6004803603602081101561047557600080fd5b5035610cd5565b604080518e8152600160a060020a038e1660208201529081018c60068111156104a157fe5b60ff168152602081019b909b5250600160a060020a039098166040808b019190915260608a0197909752608089019590955260a088019390935260c087019190915260e08601526101008501526101208401529015156101408301525190819003610160019350915050f35b6104436004803603608081101561052357600080fd5b5080359060208101359060408101359060600135600160a060020a0316610d43565b6103476004803603602081101561055b57600080fd5b5035610e61565b610443600480360360c081101561057857600080fd5b8135916020810135916040820135916060810135916080820135919081019060c0810160a08201356401000000008111156105b257600080fd5b8201836020820111156105c457600080fd5b803590602001918460018302840111640100000000831117156105e657600080fd5b509092509050610e76565b61038d611163565b61044361116b565b61061e6004803603602081101561061757600080fd5b5035611171565b6040518082600681111561062e57fe5b60ff16815260200191505060405180910390f35b61038d6004803603604081101561065857600080fd5b5080359060200135600160a060020a0316611191565b6103476004803603604081101561068457600080fd5b5080359060200135611440565b610699611461565b60408051600160a060020a039092168252519081900360200190f35b6106d2600480360360208110156106cb57600080fd5b5035611470565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6104436004803603602081101561070e57600080fd5b50356114b3565b6103476004803603608081101561072b57600080fd5b50803590602081013590600160a060020a03604082013581169160600135166115f0565b610347600480360361018081101561076657600080fd5b50600160a060020a0361016082013516611a2e565b6107986004803603602081101561079157600080fd5b5035611e74565b005b610347600480360360208110156107b057600080fd5b5035611e8d565b610347600480360360208110156107cd57600080fd5b5035600160a060020a0316611e93565b610347611ea5565b610347600480360360408110156107fb57600080fd5b5080359060200135611eaa565b6106996004803603602081101561081e57600080fd5b5035611ecb565b6103476004803603602081101561083b57600080fd5b5035611ee6565b6103476004803603602081101561085857600080fd5b5035611ef8565b6104436004803603602081101561087557600080fd5b503561219b565b6108996004803603602081101561089257600080fd5b50356121a6565b6040518082606080838360005b838110156108be5781810151838201526020016108a6565b5050505090500191505060405180910390f35b610899600480360360408110156108e757600080fd5b5080359060200135600160a060020a03166121f5565b6103476004803603602081101561091357600080fd5b5035612a0a565b6104436004803603602081101561093057600080fd5b5035612a15565b6103476004803603602081101561094d57600080fd5b5035612a3c565b600060208190529081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a98999798969795969495939492939192909190600160a060020a03168d565b60008281602002015183600160200201518460026020020151856003602002015186600460200201518760056020020151886006602002015189600760200201518a600860200201518b600960200201518c600a6020020151604051602001808c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405160208183030381529060405280519060200120826040516020018083815260200182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600281565b600080610af1614198565b5050506000918252600160208181526040808520600160a060020a039490941685526011909301815292829020825160608101845281548082529282015494810185905260029091015460ff16151592019190915291565b6000918252600160208181526040808520600160a060020a0394909416855260139093019052912080549101549091565b60009081526001602052604090205490565b60055481565b6000818152600260209081526040808320548584529183905282206005810154821115610bc157806005015491505b6004810154610bd6908363ffffffff612a4e16565b95945050505050565b6000610bed84848433612a97565b949350505050565b604080517f616464726573732047656e6573697350726f746f636f6c4164647265737300006020808301919091527f627974657333322050726f706f73616c49640000000000000000000000000000603e8301527f75696e7432353620566f7465000000000000000000000000000000000000000060508301527f75696e7432353620416d6f756e74546f5374616b650000000000000000000000605c8301527f75696e74323536204e6f6e63650000000000000000000000000000000000000060718301528251605e818403018152607e909201909252805191012081565b600160208190526000918252604090912080549181015460028201546003830154600484015460058501546006860154600787015460088801546009890154600a8a0154600e909a0154600160a060020a03808b169b60ff60a060020a909c048c169b99909116989091168d565b600084610d4f81612edc565b1515610d5a57600080fd5b6000868152600160205260409020610d706141bc565b5060058082015460009081526020818152604080832081516101a0810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301529283015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c90920154600160a060020a0316610180830181905215610e4557610180820151600160a060020a03163314610e3e57600080fd5b5084610e48565b50335b610e5489828a8a612f4f565b9998505050505050505050565b60009081526001602052604090206002015490565b6000808460021415610fd95750604080517f616464726573732047656e6573697350726f746f636f6c4164647265737300006020808301919091527f627974657333322050726f706f73616c49640000000000000000000000000000603e8301527f75696e7432353620566f7465000000000000000000000000000000000000000060508301527f75696e7432353620416d6f756e74546f5374616b650000000000000000000000605c8301527f75696e74323536204e6f6e63650000000000000000000000000000000000000060718301528251605e818403018152607e830184528051908201206c010000000000000000000000003002609e84015260b283018c905260d283018b905260f283018a90526101128084018a9052845180850390910181526101328401855280519083012061015284019190915261017280840191909152835180840390910181526101929092019092528051910120611036565b604080516c010000000000000000000000003002602080830191909152603482018c9052605482018b9052607482018a905260948083018a90528351808403909101815260b49092019092528051910120611033906135a3565b90505b600061108085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505063ffffffff6135f4169050565b9050600160a060020a03811615156110e2576040805160e560020a62461bcd02815260206004820152601a60248201527f7374616b657220616464726573732063616e6e6f742062652030000000000000604482015290519081900360640190fd5b600160a060020a038116600090815260076020526040902054871461110657600080fd5b600160a060020a03811660009081526007602052604090205461113090600163ffffffff6136ca16565b600160a060020a0382166000908152600760205260409020556111558a8a8a84612a97565b9a9950505050505050505050565b600160029091565b60005b90565b6000908152600160208190526040909120015460a060020a900460ff1690565b600082815260016020526040812081906002600182015460a060020a900460ff1660068111156111bd57fe5b146111c757600080fd5b6002808201546000908152601283016020908152604080832054600160a060020a03891684526013860190925282209283015490929110801561120e575060028301548154145b801561121e575060018360020154145b801561122957508115155b156112475781836007015482600201540281151561124357fe5b0493505b83158015906112f557506001830154600654604080517f6b8eb403000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018b9052905187939290921691636b8eb40391604480820192602092909190829003018186803b1580156112c657600080fd5b505afa1580156112da573d6000803e3d6000fd5b505050506040513d60208110156112f057600080fd5b505110155b1561143657600060028201556006830154611316908563ffffffff6136dc16565b60068085019190915560018401549054604080517fbea75f28000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152898316602482015260448101889052606481018b90529051919092169163bea75f289160848083019260209291908290030181600087803b1580156113a157600080fd5b505af11580156113b5573d6000803e3d6000fd5b505050506040513d60208110156113cb57600080fd5b505115156113d857600080fd5b825460009081526003602090815260409182902054825187815292519697508796600160a060020a03808b16949216928b927fb4a37163ec93e05e09b62e52f7f2ea8cfde431802edede7dfebe53d2ad969dbb929081900390910190a45b5050509250929050565b60009182526001602090815260408084209284526012909201905290205490565b600654600160a060020a031681565b6000908152600160208181526040808420838552601081018352818520546002808752838720549587526012909201909352818520549085529320549093919291565b60006114bd61422e565b60008381526001602081815260409283902083516101c0810185528154815292810154600160a060020a03811692840192909252919283019060a060020a900460ff16600681111561150b57fe5b600681111561151657fe5b815260028201546020820152600380830154600160a060020a0316604080840191909152600484015460608085019190915260058501546080850152600685015460a0850152600785015460c0850152600885015460e08501526009850154610100850152600a8501546101208501528151908101918290526101409093019291600b85019182845b81548152602001906001019080831161159f575050509183525050600e919091015460ff16151560209091015260c081015181519192506115df91610b92565b6115e8846136f1565b119392505050565b6000838152602081905260408120600b01544211611658576040805160e560020a62461bcd02815260206004820152600e60248201527f6e6f742061637469766520796574000000000000000000000000000000000000604482015290519081900360640190fd5b6000848152602081905260409020546032111561167457600080fd5b600554604080516c01000000000000000000000000300260208083019190915260348083018590528351808403909101815260549092019092528051910120906116c590600163ffffffff6136ca16565b6005556116d061422e565b336020828101829052604080516c0100000000000000000000000093840281840152600160a060020a03888116909402603482015281516028818303018152604890910182528051908301208452600381850181905261018085015142905260008a815280845282812060029081015460a08801528a86166080880152606087015260c086018b90528551815292529020541615156117e257600160a060020a03841615156117ab5780516000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff1916331790556117e2565b80516000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386161790555b8051600090815260046020908152604080832054898452918390528220600a0154611825916064916118199163ffffffff61374616565b9063ffffffff61377116565b60008881526020819052604090206009015490915081101561185d5760008781526020819052604090206009015460e0830152611865565b60e082018190525b60e08201516101208301526000838152600160208181526040928390208551815590850151918101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909316929092178083559285015185939192909160a060020a60ff02191660a060020a8360068111156118dd57fe5b02179055506060820151600282015560808201516003808301805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039093169290921790915560a0830151600483015560c0830151600583015560e08301516006830155610100830151600783015561012083015160088301556101408301516009830155610160830151600a83015561018083015161198091600b840191906142af565b506101a09190910151600e909101805460ff191691151591909117905560e0820151600084815260016020908152604080832060028085526012909101835281842094909455855183526003825291829020548251938452600160a060020a038a8116928501929092528383018b9052915191169185917f75b4ff136cc5de5957574c797de3334eb1c141271922b825eb071e0487ba2c5c916060908290030190a350909695505050505050565b60006064833511801590611a4457506032833510155b1515611a845760405160e560020a62461bcd0281526004018080602001828103825260298152602001806143876029913960400191505060405180910390fd5b613e80608084013511801590611a9f57506103e86080840135115b1515611af5576040805160e560020a62461bcd02815260206004820152601e60248201527f31303030203c207468726573686f6c64436f6e7374203c3d2031363030300000604482015290519081900360640190fd5b606460e08401351115611b52576040805160e560020a62461bcd02815260206004820181905260248201527f766f7465727352657075746174696f6e4c6f7373526174696f203c3d20313030604482015290519081900360640190fd5b60a083013560408401351015611b9c5760405160e560020a62461bcd02815260040180806020018281038252602b81526020018061435c602b913960400191505060405180910390fd5b600061010084013511611bf9576040805160e560020a62461bcd02815260206004820152601e60248201527f6d696e696d756d44616f426f756e74792073686f756c64206265203e20300000604482015290519081900360640190fd5b600061012084013511611c56576040805160e560020a62461bcd02815260206004820152601c60248201527f64616f426f756e7479436f6e73742073686f756c64206265203e203000000000604482015290519081900360640190fd5b6000611c8c84600b806020026040519081016040528092919082600b602002808284376000920191909152508691506109c49050565b905060ac60026107d05b613e80811015611ce057608087013581108015611cba575060028102608088013511155b15611cd2578183811515611cca57fe5b049250611ce0565b600190910190600202611c96565b50604080516101a0810182528735815260208089013590820152878201359181019190915260608088013590820152608080820190611d41908901357affffffffffffffffffffffffffffffffffffffffffffffffffffff166103e8613795565b815260208101849052604001876005602090810291909101358252018760066020908102919091013582520187600760209081029190910135825201876008602090810291909101358252018760096020908102919091013582520187600a602090810291909101358252600160a060020a03978816918101919091526000858152808252604090819020835181559183015160018301558201516002820155606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b82015561018090910151600c909101805473ffffffffffffffffffffffffffffffffffffffff19169190961617909455509392505050565b80611e7e81612edc565b1515611e8957600080fd5b5050565b50600290565b60076020526000908152604090205481565b600181565b6000918252600160209081526040808420928452600f909201905290205490565b600360205260009081526040902054600160a060020a031681565b60046020526000908152604090205481565b60008181526001602052604081206005600182015460a060020a900460ff166006811115611f2257fe5b1480611f4757506006600182015460a060020a900460ff166006811115611f4557fe5b145b1515611f875760405160e560020a62461bcd0281526004018080602001828103825260338152602001806143b06033913960400191505060405180910390fd5b611f90836137cc565b1515611fe6576040805160e560020a62461bcd02815260206004820152601760248201527f70726f706f73616c206e65656420746f20657870697265000000000000000000604482015290519081900360640190fd5b600061202a61201c600f61181961200f600b87016001015460048801549063ffffffff6136ca16565b429063ffffffff6136dc16565b60019063ffffffff6136ca16565b90506064811115612039575060645b600a82018190556001600090815260128301602052604090205461206b9060649061181990849063ffffffff61374616565b600654604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051929550600160a060020a039091169163a9059cbb916044808201926020929091908290030181600087803b1580156120db57600080fd5b505af11580156120ef573d6000803e3d6000fd5b505050506040513d602081101561210557600080fd5b5051151561215d576040805160e560020a62461bcd02815260206004820152601d60248201527f7472616e7366657220746f206d73672e73656e646572206661696c6564000000604482015290519081900360640190fd5b604080518481529051339186917f7468017f6ff596af88244327e88fe691ac48cc1db88b033d11c335f2c7ccdd039181900360200190a35050919050565b6000610adb82612edc565b6121ae6142ed565b60008281526001602052604090819020815160608101909252600b0160038282826020028201915b8154815260200190600101908083116121d65750505050509050919050565b6121fd6142ed565b60008381526001602052604090206002600182015460a060020a900460ff16600681111561222757fe5b148061224b575060018082015460a060020a900460ff16600681111561224957fe5b145b151561228b5760405160e560020a62461bcd02815260040180806020018281038252602d81526020018061432f602d913960400191505060405180910390fd5b6122936141bc565b5060058082015460009081526020818152604080832081516101a08101835281548152600180830154948201949094526002808301549382019390935260038201546060820152600482015460808201529481015460a0860152600681015460c0860152600781015460e086015260088101546101008601526009810154610120860152600a810154610140860152600b810154610160860152600c0154600160a060020a03166101808501528401541415612362575060026000908152601083016020526040902054612377565b50600160009081526010830160205260409020545b60646123918361010001518361374690919063ffffffff16565b81151561239a57fe5b600160a060020a0387166000908152601386016020908152604080832060018452601289019092528083205460028452908320549490930494509290916123e7919063ffffffff6136ca16565b6002860154600090815260128701602052604081205460018501549293509111156125115760016000908152601287016020526040812054600a88015461244c9161243f91606491611819919063ffffffff61374616565b849063ffffffff6136dc16565b905060018088015460a060020a900460ff16600681111561246957fe5b141561247b5760018401548852612508565b600287015484541415612508578354600114156124e45780876007015410156124df5760006124b78860070154836136dc90919063ffffffff16565b9050826124d182876001015461374690919063ffffffff16565b8115156124da57fe5b048952505b612508565b600184015482906124fb908363ffffffff61374616565b81151561250457fe5b0488525b50600060018401555b600e86015460ff1615801561254157508554600090815260036020526040902054600160a060020a038981169116145b8015612566575060018087015460a060020a900460ff16600681111561256357fe5b14155b8015612576575060028660020154145b156125d55760078601546125c3906125b783612598838763ffffffff61374616565b8115156125a157fe5b048a60005b60200201519063ffffffff6136ca16565b9063ffffffff6136dc16565b8752600e8601805460ff191660011790555b600160a060020a038816600090815260118701602052604090206001810154158015906126065750600281015460ff165b156126e75760018088015460a060020a900460ff16600681111561262657fe5b141561265e57606461264a876101000151836001015461374690919063ffffffff16565b81151561265357fe5b0460208901526126df565b8054600288015414156126df576002870154600090815260108801602052604090205460018201546126d9919061269b908863ffffffff61374616565b8115156126a457fe5b0460646126c3896101000151856001015461374690919063ffffffff16565b8115156126cc57fe5b049063ffffffff6136ca16565b60208901525b600060018201555b6003870154600160a060020a038a8116911614801561270a575060018760020154145b801561272257506003870154600160a060020a031615155b156127515760e0860151604089015260038701805473ffffffffffffffffffffffffffffffffffffffff191690555b8751156128bc5787516008880154612768916136dc565b60088801556006548851604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038d8116600483015260248201939093529051919092169163a9059cbb9160448083019260209291908290030181600087803b1580156127df57600080fd5b505af11580156127f3573d6000803e3d6000fd5b505050506040513d602081101561280957600080fd5b50511515612861576040805160e560020a62461bcd02815260206004820152601e60248201527f7472616e7366657220746f2062656e6566696369617279206661696c65640000604482015290519081900360640190fd5b8654600090815260036020908152604091829020548a5183519081529251600160a060020a038d8116949216928e927f6d26871c9f457d104b2122485f659f126f7a0cf6938cf20482c03f49794a2fbf929081900390910190a45b60408801516128cd908960016125a6565b156129fd576001870154600160a060020a031663d29b5d2f6128f88a600260200201518b60016125a6565b8b8d6040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b15801561296c57600080fd5b505af1158015612980573d6000803e3d6000fd5b505050506040513d602081101561299657600080fd5b50508654600090815260036020526040902054600160a060020a03808b1691168b7f7419b736daacf66d5c1645948c956fca2b83be1e2e02d486d65713f289d683b86129eb8c600260200201518d60016125a6565b60408051918252519081900360200190a45b5050505050505092915050565b6000610adb826136f1565b600081612a2181612edc565b1515612a2c57600080fd5b612a35836137cc565b9392505050565b60026020526000908152604090205481565b60008282650100000000005b8115610bd6578160011660011415612a7957612a7681846140ee565b90505b6002909104908115612a9257612a8f83846140ee565b92505b612a5a565b600060028411158015612aaa5750600084115b1515612b00576040805160e560020a62461bcd02815260206004820152601060248201527f77726f6e6720766f74652076616c756500000000000000000000000000000000604482015290519081900360640190fd5b60008311612b58576040805160e560020a62461bcd02815260206004820152601b60248201527f7374616b696e6720616d6f756e742073686f756c64206265203e300000000000604482015290519081900360640190fd5b612b61856137cc565b15612b6e57506001610bed565b60008581526001602052604090206004600182015460a060020a900460ff166006811115612b9857fe5b14158015612bc057506003600182015460a060020a900460ff166006811115612bbd57fe5b14155b15612bcf576000915050610bed565b600160a060020a0383166000908152601382016020526040812060018101549091108015612bfe575080548614155b15612c0e57600092505050610bed565b600654604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152306024830152604482018990529151889392909216916323b872dd916064808201926020929091908290030181600087803b158015612c8657600080fd5b505af1158015612c9a573d6000803e3d6000fd5b505050506040513d6020811015612cb057600080fd5b50511515612d08576040805160e560020a62461bcd02815260206004820152601960248201527f6661696c207472616e736665722066726f6d207374616b657200000000000000604482015290519081900360640190fd5b6008830154612d1d908263ffffffff6136ca16565b60088401556001820154612d37908263ffffffff6136ca16565b600183018190557001000000000000000000000000000000001015612da6576040805160e560020a62461bcd02815260206004820152601a60248201527f7374616b696e6720616d6f756e7420697320746f6f2068696768000000000000604482015290519081900360640190fd5b60088301547001000000000000000000000000000000001015612e13576040805160e560020a62461bcd02815260206004820152601860248201527f746f74616c207374616b657320697320746f6f20686967680000000000000000604482015290519081900360640190fd5b6001871415612e37576002820154612e31908263ffffffff6136ca16565b60028301555b8682556000878152601284016020526040902054612e5c90829063ffffffff6136ca16565b60008881526012850160209081526040808320939093558554825260038152908290205482518a81529182018990528251600160a060020a03808a16949216928c927fd0239d7d4acf51def4507fa173be466927de5d75d8b10d840cd6994d6e10231092918290030190a4612ed0886137cc565b98975050505050505050565b60008181526001602081905260408220015460a060020a900460ff166004816006811115612f0657fe5b1480612f1d57506005816006811115612f1b57fe5b145b80612f3357506006816006811115612f3157fe5b145b80612a3557506003816006811115612f4757fe5b149392505050565b600060028311158015612f625750600083115b1515612fb8576040805160e560020a62461bcd02815260206004820152600e60248201527f30203c205f766f7465203c3d2032000000000000000000000000000000000000604482015290519081900360640190fd5b612fc1856137cc565b15612fce57506001610bed565b612fd66141bc565b506000858152600160208181526040808420600580820154865285845282862083516101a0810185528154815281870154818701526002820154818601526003820154606082015260048083015460808301529282015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c90910154600160a060020a039081166101808301528c88528686529583015484517f9588378e0000000000000000000000000000000000000000000000000000000081528c881693810193909352602483018d905293519096929592949390921692639588378e92604480840193829003018186803b1580156130f657600080fd5b505afa15801561310a573d6000803e3d6000fd5b505050506040513d602081101561312057600080fd5b505190506000811161317c576040805160e560020a62461bcd02815260206004820152601b60248201527f5f766f746572206d75737420686176652072657075746174696f6e0000000000604482015290519081900360640190fd5b848110156131d4576040805160e560020a62461bcd02815260206004820152601260248201527f72657075746174696f6e203e3d205f7265700000000000000000000000000000604482015290519081900360640190fd5b848015156131df5750805b600160a060020a03881660009081526011840160205260409020600101541561320f576000945050505050610bed565b6000878152600f8401602052604090205461323190829063ffffffff6136ca16565b6000888152600f850160205260408082208390556002860154825281205490899052108061328957506002808401546000908152600f8501602052604080822054928252902054148015613289575060018360020154145b15613357576005600184015460a060020a900460ff1660068111156132aa57fe5b1480156132ca575060c0840151604085015103600b840160010154420310155b806132ee57506006600184015460a060020a900460ff1660068111156132ec57fe5b145b1561334f576006600184015460a060020a900460ff16600681111561330f57fe5b146133485760c0840151600484015560018301805460a060020a60ff021916740600000000000000000000000000000000000000001790555b42600c8401555b600283018790555b60408051606081018252888152602081018390529081016004600186015460a060020a900460ff16600681111561338a57fe5b14806133af57506003600186015460a060020a900460ff1660068111156133ad57fe5b145b15159052600160a060020a0389166000908152601185016020908152604091829020835181559083015160018201559101516002909101805460ff19169115159190911790556004600184015460a060020a900460ff16600681111561341157fe5b148061343657506003600184015460a060020a900460ff16600681111561343457fe5b145b1561353e57600087815260108401602052604090205461345d90829063ffffffff6136ca16565b600088815260108501602052604081209190915561010085015160649061348a908463ffffffff61374616565b81151561349357fe5b6001860154604080517ff81f8bf60000000000000000000000000000000000000000000000000000000081529390920460048401819052600160a060020a038d81166024860152604485018f9052925190945091169163f81f8bf69160648083019260209291908290030181600087803b15801561351057600080fd5b505af1158015613524573d6000803e3d6000fd5b505050506040513d602081101561353a57600080fd5b5050505b82546000908152600360209081526040918290205482518a81529182018490528251600160a060020a03808d16949216928d927f066c061a3792cb3eb64a441a928655fcbafb4a54b49725fe9cd2951df5e7189e92918290030190a4610e54896137cc565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b600080600080845160411415156136115760009350505050610adb565b50505060208201516040830151606084015160001a601b60ff8216101561363657601b015b8060ff16601b1415801561364e57508060ff16601c14155b1561365f5760009350505050610adb565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa1580156136b6573d6000803e3d6000fd5b505050602060405103519350505050610adb565b600082820183811015612a3557600080fd5b6000828211156136eb57600080fd5b50900390565b60008181526001602081815260408084206002855260128101909252808420549284528320549091612a35917affffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff61379516565b600082151561375757506000610adb565b82820282848281151561376657fe5b0414612a3557600080fd5b600080821161377f57600080fd5b6000828481151561378c57fe5b04949350505050565b6000612a357affffffffffffffffffffffffffffffffffffffffffffffffffffff8085166501000000000090810291851602614165565b6000816137d881612edc565b15156137e357600080fd5b60008381526001602052604090206137f96141bc565b506005808201546000908152602081815260409182902082516101a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600482015460808201529181015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c0154600160a060020a03166101808201526138ad61422e565b604080516101c081018252845481526001850154600160a060020a0381166020830152909185919083019060a060020a900460ff1660068111156138ed57fe5b60068111156138f857fe5b815260028201546020820152600380830154600160a060020a0316604080840191909152600484015460608085019190915260058501546080850152600685015460a0850152600785015460c0850152600885015460e08501526009850154610100850152600a8501546101208501528151908101918290526101409093019291600b85019182845b815481526020019060010190808311613981575050509183525050600e919091015460ff1615156020918201526001850154604080517fb551c373000000000000000000000000000000000000000000000000000000008152600481018b90529051939450600093600160a060020a039092169263b551c37392602480840193829003018186803b158015613a1557600080fd5b505afa158015613a29573d6000803e3d6000fd5b505050506040513d6020811015613a3f57600080fd5b5051835160028601546000908152600f87016020526040812054929350606484049091029181908190841015613aef576003600189015460a060020a900460ff166006811115613a8b57fe5b1415613a9a5760019250613aca565b6004600189015460a060020a900460ff166006811115613ab657fe5b1415613ac55760039250613aca565b600592505b6001880180546002919060a060020a60ff02191660a060020a835b0217905550613d7a565b6003600189015460a060020a900460ff166006811115613b0b57fe5b1415613ba4576020870151600b890154420310613b495760018801805460a060020a60ff02191660a060020a17905560028089018190559250613ba4565b613b5b88600501548960000154610b92565b905080613b678c6136f1565b1115613ba45760018801805460a060020a60ff0219167404000000000000000000000000000000000000000017905542600d890155600988018190555b6004600189015460a060020a900460ff166006811115613bc057fe5b1415613d7a57613bd888600501548960000154610b92565b6060880151909150600b890160020154420310613cd75780613bf98c6136f1565b1115613cb35787546000908152600260205260409020546110001115613cae576001888101805460a060020a60ff0219167405000000000000000000000000000000000000000017905542600c8a01558854600090815260026020818152604080842080549095019094558b54835260048152838320548282528484205492845260128d01909152929091205491935090839003811515613c9657fe5b89546000908152600460205260409020919005830190555b613cd2565b6001880180546003919060a060020a60ff02191660a060020a83613ae5565b613d7a565b6000613ce28c6136f1565b60098a0154909150613cfa908363ffffffff61418216565b8111613d2e5760018901805460a060020a60ff02191674030000000000000000000000000000000000000000179055613d78565b8089600901541115613d7857600989018290556040805183815290518d917fad767d61af51c7895fa3cc0497dde01afb610c74e55ee4d8a71fa5e3ee136d54919081900360200190a25b505b6005600189015460a060020a900460ff166006811115613d9657fe5b1480613dbb57506006600189015460a060020a900460ff166006811115613db957fe5b145b15613dff576004880154600c890154420310613dff5760018801805460a060020a60ff02191674020000000000000000000000000000000000000000179055600492505b6000836005811115613e0d57fe5b14614048576004836005811115613e2057fe5b1480613e3757506005836005811115613e3557fe5b145b15613ef6578551600090815260026020526040902054613e5e90600163ffffffff6136dc16565b865160009081526002602052604080822092909255875181522054801515613e96578854600090815260046020526040812055613ef4565b88546000908152600460209081526040808320546002845260128d01909252909120549093508190613ed5906125b7866001850163ffffffff61374616565b811515613ede57fe5b8a54600090815260046020526040902091900490555b505b87546000908152600360209081526040918290205460028b015483519081529182018890528251600160a060020a03909116928e927f37471b9c9d295ffb1309ad070b8964700bfb7b555e8e8292d0b6cbc7dba35d10929081900390910190a38a7f46a713b994c752c68fbefa9048bec9a0010cc7d933ad95a3c3dbb25931a167e78460405180826005811115613f8957fe5b60ff16815260200191505060405180910390a260018801546002890154604080517f9d4c162d000000000000000000000000000000000000000000000000000000008152600481018f9052602481019290925251600160a060020a0390921691639d4c162d916044808201926020929091908290030181600087803b15801561401157600080fd5b505af1158015614025573d6000803e3d6000fd5b505050506040513d602081101561403b57600080fd5b5050600688015460078901555b600188015460a060020a900460ff16600681111561406257fe5b8660400151600681111561407257fe5b146140cf578a7f21aca7f0285ccddeca2935074d3e36b5ab8fea0327f84cbbf12cf1b6d1a749f98960010160149054906101000a900460ff16604051808260068111156140bb57fe5b60ff16815260200191505060405180910390a25b60008360058111156140dd57fe5b14159b9a5050505050505050505050565b60008282028284828115156140ff57fe5b0414614155576040805160e560020a62461bcd02815260206004820152601560248201527f5265616c4d617468206d756c206f766572666c6f770000000000000000000000604482015290519081900360640190fd5b6501000000000090049392505050565b60008165010000000000840281151561417a57fe5b049392505050565b60008183106141915781612a35565b5090919050565b60606040519081016040528060008152602001600081526020016000151581525090565b6101a0604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000600160a060020a031681525090565b604080516102008101825260008082526020820181905290918201908152602001600081526020016000600160a060020a03168152602001600081526020016000801916815260200160008152602001600081526020016000815260200160008152602001600081526020016142a26142ed565b8152600060209091015290565b82600381019282156142dd579160200282015b828111156142dd5782518255916020019190600101906142c2565b506142e992915061430c565b5090565b6060604051908101604052806003906020820280388339509192915050565b61116e91905b808211156142e95760008155600101614312565b6000903b119056fe50726f706f73616c2073686f756c64206265204578656375746564206f722045787069726564496e5175657565626f6f73746564566f7465506572696f644c696d6974203e3d207175696574456e64696e67506572696f643530203c3d20717565756564566f7465526571756972656450657263656e74616765203c3d2031303070726f706f73616c20737461746520696e206e6f7420426f6f73746564206e6f72205175696574456e64696e67506572696f64a165627a7a72305820c0896fe1d94476b4186d81da5d58570048474a0c3ac1fe8ae2a449c1db3a1ec70029",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061025a576000357c01000000000000000000000000000000000000000000000000000000009004806372f702f311610158578063b4512913116100d5578063c8f526e811610099578063c8f526e81461087c578063cc3bf9e9146108d1578063e5af18c5146108fd578063e751f2711461091a578063fb6c0cbb146109375761025a565b8063b4512913146107e5578063ba51b14e14610808578063bb5a05ed14610825578063beda801514610842578063c08351061461085f5761025a565b80639525c0cc1161011c5780639525c0cc1461077b5780639bc5689d14610359578063a003651d1461079a578063a05ea6e4146107b7578063b2449d65146107dd5761025a565b806372f702f31461069157806379a1c1f6146106b557806380f5e0a1146106f857806388737b5e146107155780638894c41b1461074f5761025a565b806330ca0a53116101e65780635142bc1e116101aa5780635142bc1e146105f157806351d997b2146105f957806361d585da146106015780636359036b14610642578063707437681461066e5761025a565b806330ca0a531461045757806332ed5b121461045f578063359afa491461050d5780633c13381814610545578063488c65fc146105625761025a565b806316db51721161022d57806316db5172146103a65780631702ef0c146103d257806321b4b3dc146103ef5780632d598e58146103f75780632daedd521461041a5761025a565b8063025068041461025f57806307b4e1e3146102ea5780630d48344214610359578063119ce91b14610361575b600080fd5b61027c6004803603602081101561027557600080fd5b5035610954565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e0880152610100870152610120860152610140850152610160840152600160a060020a031661018083015251908190036101a00190f35b610347600480360361018081101561030157600080fd5b81019080806101600190600b806020026040519081016040528092919082600b60200280828437600092019190915250919450505035600160a060020a031690506109c4565b60408051918252519081900360200190f35b610347610ae1565b61038d6004803603604081101561037757600080fd5b5080359060200135600160a060020a0316610ae6565b6040805192835260208301919091528051918290030190f35b61038d600480360360408110156103bc57600080fd5b5080359060200135600160a060020a0316610b49565b610347600480360360208110156103e857600080fd5b5035610b7a565b610347610b8c565b6103476004803603604081101561040d57600080fd5b5080359060200135610b92565b6104436004803603606081101561043057600080fd5b5080359060208101359060400135610bdf565b604080519115158252519081900360200190f35b610347610bf5565b61047c6004803603602081101561047557600080fd5b5035610cd5565b604080518e8152600160a060020a038e1660208201529081018c60068111156104a157fe5b60ff168152602081019b909b5250600160a060020a039098166040808b019190915260608a0197909752608089019590955260a088019390935260c087019190915260e08601526101008501526101208401529015156101408301525190819003610160019350915050f35b6104436004803603608081101561052357600080fd5b5080359060208101359060408101359060600135600160a060020a0316610d43565b6103476004803603602081101561055b57600080fd5b5035610e61565b610443600480360360c081101561057857600080fd5b8135916020810135916040820135916060810135916080820135919081019060c0810160a08201356401000000008111156105b257600080fd5b8201836020820111156105c457600080fd5b803590602001918460018302840111640100000000831117156105e657600080fd5b509092509050610e76565b61038d611163565b61044361116b565b61061e6004803603602081101561061757600080fd5b5035611171565b6040518082600681111561062e57fe5b60ff16815260200191505060405180910390f35b61038d6004803603604081101561065857600080fd5b5080359060200135600160a060020a0316611191565b6103476004803603604081101561068457600080fd5b5080359060200135611440565b610699611461565b60408051600160a060020a039092168252519081900360200190f35b6106d2600480360360208110156106cb57600080fd5b5035611470565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6104436004803603602081101561070e57600080fd5b50356114b3565b6103476004803603608081101561072b57600080fd5b50803590602081013590600160a060020a03604082013581169160600135166115f0565b610347600480360361018081101561076657600080fd5b50600160a060020a0361016082013516611a2e565b6107986004803603602081101561079157600080fd5b5035611e74565b005b610347600480360360208110156107b057600080fd5b5035611e8d565b610347600480360360208110156107cd57600080fd5b5035600160a060020a0316611e93565b610347611ea5565b610347600480360360408110156107fb57600080fd5b5080359060200135611eaa565b6106996004803603602081101561081e57600080fd5b5035611ecb565b6103476004803603602081101561083b57600080fd5b5035611ee6565b6103476004803603602081101561085857600080fd5b5035611ef8565b6104436004803603602081101561087557600080fd5b503561219b565b6108996004803603602081101561089257600080fd5b50356121a6565b6040518082606080838360005b838110156108be5781810151838201526020016108a6565b5050505090500191505060405180910390f35b610899600480360360408110156108e757600080fd5b5080359060200135600160a060020a03166121f5565b6103476004803603602081101561091357600080fd5b5035612a0a565b6104436004803603602081101561093057600080fd5b5035612a15565b6103476004803603602081101561094d57600080fd5b5035612a3c565b600060208190529081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a98999798969795969495939492939192909190600160a060020a03168d565b60008281602002015183600160200201518460026020020151856003602002015186600460200201518760056020020151886006602002015189600760200201518a600860200201518b600960200201518c600a6020020151604051602001808c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405160208183030381529060405280519060200120826040516020018083815260200182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b600281565b600080610af1614198565b5050506000918252600160208181526040808520600160a060020a039490941685526011909301815292829020825160608101845281548082529282015494810185905260029091015460ff16151592019190915291565b6000918252600160208181526040808520600160a060020a0394909416855260139093019052912080549101549091565b60009081526001602052604090205490565b60055481565b6000818152600260209081526040808320548584529183905282206005810154821115610bc157806005015491505b6004810154610bd6908363ffffffff612a4e16565b95945050505050565b6000610bed84848433612a97565b949350505050565b604080517f616464726573732047656e6573697350726f746f636f6c4164647265737300006020808301919091527f627974657333322050726f706f73616c49640000000000000000000000000000603e8301527f75696e7432353620566f7465000000000000000000000000000000000000000060508301527f75696e7432353620416d6f756e74546f5374616b650000000000000000000000605c8301527f75696e74323536204e6f6e63650000000000000000000000000000000000000060718301528251605e818403018152607e909201909252805191012081565b600160208190526000918252604090912080549181015460028201546003830154600484015460058501546006860154600787015460088801546009890154600a8a0154600e909a0154600160a060020a03808b169b60ff60a060020a909c048c169b99909116989091168d565b600084610d4f81612edc565b1515610d5a57600080fd5b6000868152600160205260409020610d706141bc565b5060058082015460009081526020818152604080832081516101a0810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301529283015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c90920154600160a060020a0316610180830181905215610e4557610180820151600160a060020a03163314610e3e57600080fd5b5084610e48565b50335b610e5489828a8a612f4f565b9998505050505050505050565b60009081526001602052604090206002015490565b6000808460021415610fd95750604080517f616464726573732047656e6573697350726f746f636f6c4164647265737300006020808301919091527f627974657333322050726f706f73616c49640000000000000000000000000000603e8301527f75696e7432353620566f7465000000000000000000000000000000000000000060508301527f75696e7432353620416d6f756e74546f5374616b650000000000000000000000605c8301527f75696e74323536204e6f6e63650000000000000000000000000000000000000060718301528251605e818403018152607e830184528051908201206c010000000000000000000000003002609e84015260b283018c905260d283018b905260f283018a90526101128084018a9052845180850390910181526101328401855280519083012061015284019190915261017280840191909152835180840390910181526101929092019092528051910120611036565b604080516c010000000000000000000000003002602080830191909152603482018c9052605482018b9052607482018a905260948083018a90528351808403909101815260b49092019092528051910120611033906135a3565b90505b600061108085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505063ffffffff6135f4169050565b9050600160a060020a03811615156110e2576040805160e560020a62461bcd02815260206004820152601a60248201527f7374616b657220616464726573732063616e6e6f742062652030000000000000604482015290519081900360640190fd5b600160a060020a038116600090815260076020526040902054871461110657600080fd5b600160a060020a03811660009081526007602052604090205461113090600163ffffffff6136ca16565b600160a060020a0382166000908152600760205260409020556111558a8a8a84612a97565b9a9950505050505050505050565b600160029091565b60005b90565b6000908152600160208190526040909120015460a060020a900460ff1690565b600082815260016020526040812081906002600182015460a060020a900460ff1660068111156111bd57fe5b146111c757600080fd5b6002808201546000908152601283016020908152604080832054600160a060020a03891684526013860190925282209283015490929110801561120e575060028301548154145b801561121e575060018360020154145b801561122957508115155b156112475781836007015482600201540281151561124357fe5b0493505b83158015906112f557506001830154600654604080517f6b8eb403000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018b9052905187939290921691636b8eb40391604480820192602092909190829003018186803b1580156112c657600080fd5b505afa1580156112da573d6000803e3d6000fd5b505050506040513d60208110156112f057600080fd5b505110155b1561143657600060028201556006830154611316908563ffffffff6136dc16565b60068085019190915560018401549054604080517fbea75f28000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152898316602482015260448101889052606481018b90529051919092169163bea75f289160848083019260209291908290030181600087803b1580156113a157600080fd5b505af11580156113b5573d6000803e3d6000fd5b505050506040513d60208110156113cb57600080fd5b505115156113d857600080fd5b825460009081526003602090815260409182902054825187815292519697508796600160a060020a03808b16949216928b927fb4a37163ec93e05e09b62e52f7f2ea8cfde431802edede7dfebe53d2ad969dbb929081900390910190a45b5050509250929050565b60009182526001602090815260408084209284526012909201905290205490565b600654600160a060020a031681565b6000908152600160208181526040808420838552601081018352818520546002808752838720549587526012909201909352818520549085529320549093919291565b60006114bd61422e565b60008381526001602081815260409283902083516101c0810185528154815292810154600160a060020a03811692840192909252919283019060a060020a900460ff16600681111561150b57fe5b600681111561151657fe5b815260028201546020820152600380830154600160a060020a0316604080840191909152600484015460608085019190915260058501546080850152600685015460a0850152600785015460c0850152600885015460e08501526009850154610100850152600a8501546101208501528151908101918290526101409093019291600b85019182845b81548152602001906001019080831161159f575050509183525050600e919091015460ff16151560209091015260c081015181519192506115df91610b92565b6115e8846136f1565b119392505050565b6000838152602081905260408120600b01544211611658576040805160e560020a62461bcd02815260206004820152600e60248201527f6e6f742061637469766520796574000000000000000000000000000000000000604482015290519081900360640190fd5b6000848152602081905260409020546032111561167457600080fd5b600554604080516c01000000000000000000000000300260208083019190915260348083018590528351808403909101815260549092019092528051910120906116c590600163ffffffff6136ca16565b6005556116d061422e565b336020828101829052604080516c0100000000000000000000000093840281840152600160a060020a03888116909402603482015281516028818303018152604890910182528051908301208452600381850181905261018085015142905260008a815280845282812060029081015460a08801528a86166080880152606087015260c086018b90528551815292529020541615156117e257600160a060020a03841615156117ab5780516000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff1916331790556117e2565b80516000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386161790555b8051600090815260046020908152604080832054898452918390528220600a0154611825916064916118199163ffffffff61374616565b9063ffffffff61377116565b60008881526020819052604090206009015490915081101561185d5760008781526020819052604090206009015460e0830152611865565b60e082018190525b60e08201516101208301526000838152600160208181526040928390208551815590850151918101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909316929092178083559285015185939192909160a060020a60ff02191660a060020a8360068111156118dd57fe5b02179055506060820151600282015560808201516003808301805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039093169290921790915560a0830151600483015560c0830151600583015560e08301516006830155610100830151600783015561012083015160088301556101408301516009830155610160830151600a83015561018083015161198091600b840191906142af565b506101a09190910151600e909101805460ff191691151591909117905560e0820151600084815260016020908152604080832060028085526012909101835281842094909455855183526003825291829020548251938452600160a060020a038a8116928501929092528383018b9052915191169185917f75b4ff136cc5de5957574c797de3334eb1c141271922b825eb071e0487ba2c5c916060908290030190a350909695505050505050565b60006064833511801590611a4457506032833510155b1515611a845760405160e560020a62461bcd0281526004018080602001828103825260298152602001806143876029913960400191505060405180910390fd5b613e80608084013511801590611a9f57506103e86080840135115b1515611af5576040805160e560020a62461bcd02815260206004820152601e60248201527f31303030203c207468726573686f6c64436f6e7374203c3d2031363030300000604482015290519081900360640190fd5b606460e08401351115611b52576040805160e560020a62461bcd02815260206004820181905260248201527f766f7465727352657075746174696f6e4c6f7373526174696f203c3d20313030604482015290519081900360640190fd5b60a083013560408401351015611b9c5760405160e560020a62461bcd02815260040180806020018281038252602b81526020018061435c602b913960400191505060405180910390fd5b600061010084013511611bf9576040805160e560020a62461bcd02815260206004820152601e60248201527f6d696e696d756d44616f426f756e74792073686f756c64206265203e20300000604482015290519081900360640190fd5b600061012084013511611c56576040805160e560020a62461bcd02815260206004820152601c60248201527f64616f426f756e7479436f6e73742073686f756c64206265203e203000000000604482015290519081900360640190fd5b6000611c8c84600b806020026040519081016040528092919082600b602002808284376000920191909152508691506109c49050565b905060ac60026107d05b613e80811015611ce057608087013581108015611cba575060028102608088013511155b15611cd2578183811515611cca57fe5b049250611ce0565b600190910190600202611c96565b50604080516101a0810182528735815260208089013590820152878201359181019190915260608088013590820152608080820190611d41908901357affffffffffffffffffffffffffffffffffffffffffffffffffffff166103e8613795565b815260208101849052604001876005602090810291909101358252018760066020908102919091013582520187600760209081029190910135825201876008602090810291909101358252018760096020908102919091013582520187600a602090810291909101358252600160a060020a03978816918101919091526000858152808252604090819020835181559183015160018301558201516002820155606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b82015561018090910151600c909101805473ffffffffffffffffffffffffffffffffffffffff19169190961617909455509392505050565b80611e7e81612edc565b1515611e8957600080fd5b5050565b50600290565b60076020526000908152604090205481565b600181565b6000918252600160209081526040808420928452600f909201905290205490565b600360205260009081526040902054600160a060020a031681565b60046020526000908152604090205481565b60008181526001602052604081206005600182015460a060020a900460ff166006811115611f2257fe5b1480611f4757506006600182015460a060020a900460ff166006811115611f4557fe5b145b1515611f875760405160e560020a62461bcd0281526004018080602001828103825260338152602001806143b06033913960400191505060405180910390fd5b611f90836137cc565b1515611fe6576040805160e560020a62461bcd02815260206004820152601760248201527f70726f706f73616c206e65656420746f20657870697265000000000000000000604482015290519081900360640190fd5b600061202a61201c600f61181961200f600b87016001015460048801549063ffffffff6136ca16565b429063ffffffff6136dc16565b60019063ffffffff6136ca16565b90506064811115612039575060645b600a82018190556001600090815260128301602052604090205461206b9060649061181990849063ffffffff61374616565b600654604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051929550600160a060020a039091169163a9059cbb916044808201926020929091908290030181600087803b1580156120db57600080fd5b505af11580156120ef573d6000803e3d6000fd5b505050506040513d602081101561210557600080fd5b5051151561215d576040805160e560020a62461bcd02815260206004820152601d60248201527f7472616e7366657220746f206d73672e73656e646572206661696c6564000000604482015290519081900360640190fd5b604080518481529051339186917f7468017f6ff596af88244327e88fe691ac48cc1db88b033d11c335f2c7ccdd039181900360200190a35050919050565b6000610adb82612edc565b6121ae6142ed565b60008281526001602052604090819020815160608101909252600b0160038282826020028201915b8154815260200190600101908083116121d65750505050509050919050565b6121fd6142ed565b60008381526001602052604090206002600182015460a060020a900460ff16600681111561222757fe5b148061224b575060018082015460a060020a900460ff16600681111561224957fe5b145b151561228b5760405160e560020a62461bcd02815260040180806020018281038252602d81526020018061432f602d913960400191505060405180910390fd5b6122936141bc565b5060058082015460009081526020818152604080832081516101a08101835281548152600180830154948201949094526002808301549382019390935260038201546060820152600482015460808201529481015460a0860152600681015460c0860152600781015460e086015260088101546101008601526009810154610120860152600a810154610140860152600b810154610160860152600c0154600160a060020a03166101808501528401541415612362575060026000908152601083016020526040902054612377565b50600160009081526010830160205260409020545b60646123918361010001518361374690919063ffffffff16565b81151561239a57fe5b600160a060020a0387166000908152601386016020908152604080832060018452601289019092528083205460028452908320549490930494509290916123e7919063ffffffff6136ca16565b6002860154600090815260128701602052604081205460018501549293509111156125115760016000908152601287016020526040812054600a88015461244c9161243f91606491611819919063ffffffff61374616565b849063ffffffff6136dc16565b905060018088015460a060020a900460ff16600681111561246957fe5b141561247b5760018401548852612508565b600287015484541415612508578354600114156124e45780876007015410156124df5760006124b78860070154836136dc90919063ffffffff16565b9050826124d182876001015461374690919063ffffffff16565b8115156124da57fe5b048952505b612508565b600184015482906124fb908363ffffffff61374616565b81151561250457fe5b0488525b50600060018401555b600e86015460ff1615801561254157508554600090815260036020526040902054600160a060020a038981169116145b8015612566575060018087015460a060020a900460ff16600681111561256357fe5b14155b8015612576575060028660020154145b156125d55760078601546125c3906125b783612598838763ffffffff61374616565b8115156125a157fe5b048a60005b60200201519063ffffffff6136ca16565b9063ffffffff6136dc16565b8752600e8601805460ff191660011790555b600160a060020a038816600090815260118701602052604090206001810154158015906126065750600281015460ff165b156126e75760018088015460a060020a900460ff16600681111561262657fe5b141561265e57606461264a876101000151836001015461374690919063ffffffff16565b81151561265357fe5b0460208901526126df565b8054600288015414156126df576002870154600090815260108801602052604090205460018201546126d9919061269b908863ffffffff61374616565b8115156126a457fe5b0460646126c3896101000151856001015461374690919063ffffffff16565b8115156126cc57fe5b049063ffffffff6136ca16565b60208901525b600060018201555b6003870154600160a060020a038a8116911614801561270a575060018760020154145b801561272257506003870154600160a060020a031615155b156127515760e0860151604089015260038701805473ffffffffffffffffffffffffffffffffffffffff191690555b8751156128bc5787516008880154612768916136dc565b60088801556006548851604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038d8116600483015260248201939093529051919092169163a9059cbb9160448083019260209291908290030181600087803b1580156127df57600080fd5b505af11580156127f3573d6000803e3d6000fd5b505050506040513d602081101561280957600080fd5b50511515612861576040805160e560020a62461bcd02815260206004820152601e60248201527f7472616e7366657220746f2062656e6566696369617279206661696c65640000604482015290519081900360640190fd5b8654600090815260036020908152604091829020548a5183519081529251600160a060020a038d8116949216928e927f6d26871c9f457d104b2122485f659f126f7a0cf6938cf20482c03f49794a2fbf929081900390910190a45b60408801516128cd908960016125a6565b156129fd576001870154600160a060020a031663d29b5d2f6128f88a600260200201518b60016125a6565b8b8d6040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b15801561296c57600080fd5b505af1158015612980573d6000803e3d6000fd5b505050506040513d602081101561299657600080fd5b50508654600090815260036020526040902054600160a060020a03808b1691168b7f7419b736daacf66d5c1645948c956fca2b83be1e2e02d486d65713f289d683b86129eb8c600260200201518d60016125a6565b60408051918252519081900360200190a45b5050505050505092915050565b6000610adb826136f1565b600081612a2181612edc565b1515612a2c57600080fd5b612a35836137cc565b9392505050565b60026020526000908152604090205481565b60008282650100000000005b8115610bd6578160011660011415612a7957612a7681846140ee565b90505b6002909104908115612a9257612a8f83846140ee565b92505b612a5a565b600060028411158015612aaa5750600084115b1515612b00576040805160e560020a62461bcd02815260206004820152601060248201527f77726f6e6720766f74652076616c756500000000000000000000000000000000604482015290519081900360640190fd5b60008311612b58576040805160e560020a62461bcd02815260206004820152601b60248201527f7374616b696e6720616d6f756e742073686f756c64206265203e300000000000604482015290519081900360640190fd5b612b61856137cc565b15612b6e57506001610bed565b60008581526001602052604090206004600182015460a060020a900460ff166006811115612b9857fe5b14158015612bc057506003600182015460a060020a900460ff166006811115612bbd57fe5b14155b15612bcf576000915050610bed565b600160a060020a0383166000908152601382016020526040812060018101549091108015612bfe575080548614155b15612c0e57600092505050610bed565b600654604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152306024830152604482018990529151889392909216916323b872dd916064808201926020929091908290030181600087803b158015612c8657600080fd5b505af1158015612c9a573d6000803e3d6000fd5b505050506040513d6020811015612cb057600080fd5b50511515612d08576040805160e560020a62461bcd02815260206004820152601960248201527f6661696c207472616e736665722066726f6d207374616b657200000000000000604482015290519081900360640190fd5b6008830154612d1d908263ffffffff6136ca16565b60088401556001820154612d37908263ffffffff6136ca16565b600183018190557001000000000000000000000000000000001015612da6576040805160e560020a62461bcd02815260206004820152601a60248201527f7374616b696e6720616d6f756e7420697320746f6f2068696768000000000000604482015290519081900360640190fd5b60088301547001000000000000000000000000000000001015612e13576040805160e560020a62461bcd02815260206004820152601860248201527f746f74616c207374616b657320697320746f6f20686967680000000000000000604482015290519081900360640190fd5b6001871415612e37576002820154612e31908263ffffffff6136ca16565b60028301555b8682556000878152601284016020526040902054612e5c90829063ffffffff6136ca16565b60008881526012850160209081526040808320939093558554825260038152908290205482518a81529182018990528251600160a060020a03808a16949216928c927fd0239d7d4acf51def4507fa173be466927de5d75d8b10d840cd6994d6e10231092918290030190a4612ed0886137cc565b98975050505050505050565b60008181526001602081905260408220015460a060020a900460ff166004816006811115612f0657fe5b1480612f1d57506005816006811115612f1b57fe5b145b80612f3357506006816006811115612f3157fe5b145b80612a3557506003816006811115612f4757fe5b149392505050565b600060028311158015612f625750600083115b1515612fb8576040805160e560020a62461bcd02815260206004820152600e60248201527f30203c205f766f7465203c3d2032000000000000000000000000000000000000604482015290519081900360640190fd5b612fc1856137cc565b15612fce57506001610bed565b612fd66141bc565b506000858152600160208181526040808420600580820154865285845282862083516101a0810185528154815281870154818701526002820154818601526003820154606082015260048083015460808301529282015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c90910154600160a060020a039081166101808301528c88528686529583015484517f9588378e0000000000000000000000000000000000000000000000000000000081528c881693810193909352602483018d905293519096929592949390921692639588378e92604480840193829003018186803b1580156130f657600080fd5b505afa15801561310a573d6000803e3d6000fd5b505050506040513d602081101561312057600080fd5b505190506000811161317c576040805160e560020a62461bcd02815260206004820152601b60248201527f5f766f746572206d75737420686176652072657075746174696f6e0000000000604482015290519081900360640190fd5b848110156131d4576040805160e560020a62461bcd02815260206004820152601260248201527f72657075746174696f6e203e3d205f7265700000000000000000000000000000604482015290519081900360640190fd5b848015156131df5750805b600160a060020a03881660009081526011840160205260409020600101541561320f576000945050505050610bed565b6000878152600f8401602052604090205461323190829063ffffffff6136ca16565b6000888152600f850160205260408082208390556002860154825281205490899052108061328957506002808401546000908152600f8501602052604080822054928252902054148015613289575060018360020154145b15613357576005600184015460a060020a900460ff1660068111156132aa57fe5b1480156132ca575060c0840151604085015103600b840160010154420310155b806132ee57506006600184015460a060020a900460ff1660068111156132ec57fe5b145b1561334f576006600184015460a060020a900460ff16600681111561330f57fe5b146133485760c0840151600484015560018301805460a060020a60ff021916740600000000000000000000000000000000000000001790555b42600c8401555b600283018790555b60408051606081018252888152602081018390529081016004600186015460a060020a900460ff16600681111561338a57fe5b14806133af57506003600186015460a060020a900460ff1660068111156133ad57fe5b145b15159052600160a060020a0389166000908152601185016020908152604091829020835181559083015160018201559101516002909101805460ff19169115159190911790556004600184015460a060020a900460ff16600681111561341157fe5b148061343657506003600184015460a060020a900460ff16600681111561343457fe5b145b1561353e57600087815260108401602052604090205461345d90829063ffffffff6136ca16565b600088815260108501602052604081209190915561010085015160649061348a908463ffffffff61374616565b81151561349357fe5b6001860154604080517ff81f8bf60000000000000000000000000000000000000000000000000000000081529390920460048401819052600160a060020a038d81166024860152604485018f9052925190945091169163f81f8bf69160648083019260209291908290030181600087803b15801561351057600080fd5b505af1158015613524573d6000803e3d6000fd5b505050506040513d602081101561353a57600080fd5b5050505b82546000908152600360209081526040918290205482518a81529182018490528251600160a060020a03808d16949216928d927f066c061a3792cb3eb64a441a928655fcbafb4a54b49725fe9cd2951df5e7189e92918290030190a4610e54896137cc565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b600080600080845160411415156136115760009350505050610adb565b50505060208201516040830151606084015160001a601b60ff8216101561363657601b015b8060ff16601b1415801561364e57508060ff16601c14155b1561365f5760009350505050610adb565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa1580156136b6573d6000803e3d6000fd5b505050602060405103519350505050610adb565b600082820183811015612a3557600080fd5b6000828211156136eb57600080fd5b50900390565b60008181526001602081815260408084206002855260128101909252808420549284528320549091612a35917affffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff61379516565b600082151561375757506000610adb565b82820282848281151561376657fe5b0414612a3557600080fd5b600080821161377f57600080fd5b6000828481151561378c57fe5b04949350505050565b6000612a357affffffffffffffffffffffffffffffffffffffffffffffffffffff8085166501000000000090810291851602614165565b6000816137d881612edc565b15156137e357600080fd5b60008381526001602052604090206137f96141bc565b506005808201546000908152602081815260409182902082516101a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600482015460808201529181015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c0154600160a060020a03166101808201526138ad61422e565b604080516101c081018252845481526001850154600160a060020a0381166020830152909185919083019060a060020a900460ff1660068111156138ed57fe5b60068111156138f857fe5b815260028201546020820152600380830154600160a060020a0316604080840191909152600484015460608085019190915260058501546080850152600685015460a0850152600785015460c0850152600885015460e08501526009850154610100850152600a8501546101208501528151908101918290526101409093019291600b85019182845b815481526020019060010190808311613981575050509183525050600e919091015460ff1615156020918201526001850154604080517fb551c373000000000000000000000000000000000000000000000000000000008152600481018b90529051939450600093600160a060020a039092169263b551c37392602480840193829003018186803b158015613a1557600080fd5b505afa158015613a29573d6000803e3d6000fd5b505050506040513d6020811015613a3f57600080fd5b5051835160028601546000908152600f87016020526040812054929350606484049091029181908190841015613aef576003600189015460a060020a900460ff166006811115613a8b57fe5b1415613a9a5760019250613aca565b6004600189015460a060020a900460ff166006811115613ab657fe5b1415613ac55760039250613aca565b600592505b6001880180546002919060a060020a60ff02191660a060020a835b0217905550613d7a565b6003600189015460a060020a900460ff166006811115613b0b57fe5b1415613ba4576020870151600b890154420310613b495760018801805460a060020a60ff02191660a060020a17905560028089018190559250613ba4565b613b5b88600501548960000154610b92565b905080613b678c6136f1565b1115613ba45760018801805460a060020a60ff0219167404000000000000000000000000000000000000000017905542600d890155600988018190555b6004600189015460a060020a900460ff166006811115613bc057fe5b1415613d7a57613bd888600501548960000154610b92565b6060880151909150600b890160020154420310613cd75780613bf98c6136f1565b1115613cb35787546000908152600260205260409020546110001115613cae576001888101805460a060020a60ff0219167405000000000000000000000000000000000000000017905542600c8a01558854600090815260026020818152604080842080549095019094558b54835260048152838320548282528484205492845260128d01909152929091205491935090839003811515613c9657fe5b89546000908152600460205260409020919005830190555b613cd2565b6001880180546003919060a060020a60ff02191660a060020a83613ae5565b613d7a565b6000613ce28c6136f1565b60098a0154909150613cfa908363ffffffff61418216565b8111613d2e5760018901805460a060020a60ff02191674030000000000000000000000000000000000000000179055613d78565b8089600901541115613d7857600989018290556040805183815290518d917fad767d61af51c7895fa3cc0497dde01afb610c74e55ee4d8a71fa5e3ee136d54919081900360200190a25b505b6005600189015460a060020a900460ff166006811115613d9657fe5b1480613dbb57506006600189015460a060020a900460ff166006811115613db957fe5b145b15613dff576004880154600c890154420310613dff5760018801805460a060020a60ff02191674020000000000000000000000000000000000000000179055600492505b6000836005811115613e0d57fe5b14614048576004836005811115613e2057fe5b1480613e3757506005836005811115613e3557fe5b145b15613ef6578551600090815260026020526040902054613e5e90600163ffffffff6136dc16565b865160009081526002602052604080822092909255875181522054801515613e96578854600090815260046020526040812055613ef4565b88546000908152600460209081526040808320546002845260128d01909252909120549093508190613ed5906125b7866001850163ffffffff61374616565b811515613ede57fe5b8a54600090815260046020526040902091900490555b505b87546000908152600360209081526040918290205460028b015483519081529182018890528251600160a060020a03909116928e927f37471b9c9d295ffb1309ad070b8964700bfb7b555e8e8292d0b6cbc7dba35d10929081900390910190a38a7f46a713b994c752c68fbefa9048bec9a0010cc7d933ad95a3c3dbb25931a167e78460405180826005811115613f8957fe5b60ff16815260200191505060405180910390a260018801546002890154604080517f9d4c162d000000000000000000000000000000000000000000000000000000008152600481018f9052602481019290925251600160a060020a0390921691639d4c162d916044808201926020929091908290030181600087803b15801561401157600080fd5b505af1158015614025573d6000803e3d6000fd5b505050506040513d602081101561403b57600080fd5b5050600688015460078901555b600188015460a060020a900460ff16600681111561406257fe5b8660400151600681111561407257fe5b146140cf578a7f21aca7f0285ccddeca2935074d3e36b5ab8fea0327f84cbbf12cf1b6d1a749f98960010160149054906101000a900460ff16604051808260068111156140bb57fe5b60ff16815260200191505060405180910390a25b60008360058111156140dd57fe5b14159b9a5050505050505050505050565b60008282028284828115156140ff57fe5b0414614155576040805160e560020a62461bcd02815260206004820152601560248201527f5265616c4d617468206d756c206f766572666c6f770000000000000000000000604482015290519081900360640190fd5b6501000000000090049392505050565b60008165010000000000840281151561417a57fe5b049392505050565b60008183106141915781612a35565b5090919050565b60606040519081016040528060008152602001600081526020016000151581525090565b6101a0604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000600160a060020a031681525090565b604080516102008101825260008082526020820181905290918201908152602001600081526020016000600160a060020a03168152602001600081526020016000801916815260200160008152602001600081526020016000815260200160008152602001600081526020016142a26142ed565b8152600060209091015290565b82600381019282156142dd579160200282015b828111156142dd5782518255916020019190600101906142c2565b506142e992915061430c565b5090565b6060604051908101604052806003906020820280388339509192915050565b61116e91905b808211156142e95760008155600101614312565b6000903b119056fe50726f706f73616c2073686f756c64206265204578656375746564206f722045787069726564496e5175657565626f6f73746564566f7465506572696f644c696d6974203e3d207175696574456e64696e67506572696f643530203c3d20717565756564566f7465526571756972656450657263656e74616765203c3d2031303070726f706f73616c20737461746520696e206e6f7420426f6f73746564206e6f72205175696574456e64696e67506572696f64a165627a7a72305820c0896fe1d94476b4186d81da5d58570048474a0c3ac1fe8ae2a449c1db3a1ec70029",
  "sourceMap": "220:9987:56:-;;;774:141;8:9:-1;5:2;;;30:1;27;20:12;5:2;774:141:56;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;774:141:56;;6803:39:57;6229:42;6803:37;;;;;;:39;:::i;:::-;6799:169;;;6858:12;:40;;-1:-1:-1;;;;;;6858:40:57;6229:42;6858:40;;;6799:169;;;6929:12;:28;;-1:-1:-1;;;;;;6929:28:57;-1:-1:-1;;;;;6929:28:57;;;;;6799:169;6377:597;774:141:56;220:9987;;463:616:75;523:4;1026:20;;1064:8;;463:616::o;220:9987:56:-;;;;;;;",
  "deployedSourceMap": "220:9987:56:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;220:9987:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5452:46:57;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5452:46:57;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5452:46:57;;;;;;;;;;;;;;21620:774;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;21620:774:57;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;21620:774:57;;-1:-1:-1;;;21620:774:57;-1:-1:-1;;;;;21620:774:57;;-1:-1:-1;21620:774:57;:::i;:::-;;;;;;;;;;;;;;;;6017:30;;;:::i;6066:211:56:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6066:211:56;;;;;;-1:-1:-1;;;;;6066:211:56;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8224:215;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8224:215:56;;;;;;-1:-1:-1;;;;;8224:215:56;;:::i;7819:148::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7819:148:56;;:::i;6090:27:57:-;;;:::i;21154:384::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21154:384:57;;;;;;;:::i;1187:162:56:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1187:162:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;441:220;;;:::i;5544:43:57:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5544:43:57;;:::i;:::-;;;;;;;-1:-1:-1;;;;;5544:43:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5544:43:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5544:43:57;-1:-1:-1;;5544:43:57;3842:554:56;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;3842:554:56;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3842:554:56;;:::i;8970:131::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8970:131:56;;:::i;1959:1510::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1959:1510:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;1959:1510:56;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1959:1510:56;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;1959:1510:56;;-1:-1:-1;1959:1510:56;-1:-1:-1;1959:1510:56;:::i;9825:117::-;;;:::i;9530:83::-;;;:::i;9278:125::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9278:125:56;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18916:1396:57;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18916:1396:57;;;;;;-1:-1:-1;;;;;18916:1396:57;;:::i;8658:146:56:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8658:146:56;;;;;;;:::i;6152:26:57:-;;;:::i;:::-;;;;-1:-1:-1;;;;;6152:26:57;;;;;;;;;;;;;;7263:361:56;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7263:361:56;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20498:230:57;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20498:230:57;;:::i;7565:2143::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;7565:2143:57;;;;;;;;-1:-1:-1;;;;;7565:2143:57;;;;;;;;;;;;:::i;11999:1829::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;11999:1829:57;;;;;;:::i;4612:123:56:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4612:123:56;;:::i;:::-;;5285:106;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5285:106:56;;:::i;668:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;668:44:56;-1:-1:-1;;;;;668:44:56;;:::i;6053:31:57:-;;;:::i;6532:150:56:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6532:150:56;;;;;;;:::i;5758:60:57:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5758:60:57;;:::i;5877:86::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5877:86:57;;:::i;9967:1087::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9967:1087:57;;:::i;6838:115:56:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6838:115:56;;:::i;5563:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5563:143:56;;:::i;:::-;;;;;;;;;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;5563:143:56;;;;;;;;;;;;;;;;14387:4032:57;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14387:4032:57;;;;;;-1:-1:-1;;;;;14387:4032:57;;:::i;10096:109:56:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10096:109:56;;:::i;4999:127::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4999:127:56;;:::i;5656:52:57:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5656:52:57;;:::i;5452:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5452:46:57;;:::o;21620:774::-;21806:7;22043;21806;22043:10;;;;22071:7;22079:1;22071:10;;;;22099:7;22107:1;22099:10;;;;22127:7;22135:1;22127:10;;;;22155:7;22163:1;22155:10;;;;22183:7;22191:1;22183:10;;;;22211:7;22219:1;22211:10;;;;22239:7;22247:1;22239:10;;;;22267:7;22275:1;22267:10;;;;22295:7;22303:1;22295:10;;;;22323:7;22331:2;22323:11;;;;22009:326;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22009:326:57;;;21986:363;;;;;;22363:13;21956:430;;;;;;;;;;;-1:-1:-1;;;;;21956:430:57;-1:-1:-1;;;;;21956:430:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21956:430:57;;;21933:454;;;;;;21926:461;;21620:774;;;;;:::o;6017:30::-;6046:1;6017:30;:::o;6066:211:56:-;6143:4;6149;6165:18;;:::i;:::-;-1:-1:-1;;;6186:22:56;;;;:9;:22;;;;;;;;-1:-1:-1;;;;;6186:37:56;;;;;;:29;;;;:37;;;;;;6165:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6066:211::o;8224:215::-;8303:7;8339:22;;;:9;:22;;;;;;;;-1:-1:-1;;;;;8339:39:56;;;;;;:30;;;;:39;;;;:44;;8385:46;;;8339:44;;8224:215::o;7819:148::-;7895:7;7922:22;;;:9;:22;;;;;:37;;7819:148::o;6090:27:57:-;;;;:::o;21154:384::-;21239:7;21274:39;;;:22;:39;;;;;;;;;21351:23;;;;;;;;;21397:25;;;;21389:33;;21385:97;;;21446:6;:25;;;21438:33;;21385:97;21499:21;;;;:32;;21525:5;21499:32;:25;:32;:::i;:::-;21492:39;21154:384;-1:-1:-1;;;;;21154:384:57:o;1187:162:56:-;1272:4;1295:47;1302:11;1315:5;1322:7;1331:10;1295:6;:47::i;:::-;1288:54;1187:162;-1:-1:-1;;;;1187:162:56:o;441:220::-;504:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;504:156:56;;;;;;;494:167;;;;;441:220;:::o;5544:43:57:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5544:43:57;;;;;-1:-1:-1;;;5544:43:57;;;;;;;;;;;;;;;:::o;3842:554:56:-;3975:4;3950:11;7214:23:57;7225:11;7214:10;:23::i;:::-;7206:32;;;;;;;;3991:25:56;4019:22;;;:9;:22;;;;;4051:24;;:::i;:::-;-1:-1:-1;4089:19:56;;;;;4078:10;:31;;;;;;;;;;;4051:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4051:58:56;;;;;;;4146:33;4142:183;;4217:19;;;;-1:-1:-1;;;;;4203:33:56;:10;:33;4195:42;;;;;;-1:-1:-1;4259:6:56;4142:183;;;-1:-1:-1;4304:10:56;4142:183;4341:48;4354:11;4367:5;4374;4381:7;4341:12;:48::i;:::-;4334:55;3842:554;-1:-1:-1;;;;;;;;;3842:554:56:o;8970:131::-;9034:7;9060:22;;;:9;:22;;;;;:34;;;;8970:131::o;1959:1510::-;2198:4;2269:24;2307:14;2325:1;2307:19;2303:757;;;-1:-1:-1;504:156:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;504:156:56;;;;;494:167;;;;;;2485:189;2535:4;2485:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2485:189:56;;;;;2450:246;;;;;;2388:326;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2388:326:56;;;;;;;2361:367;;;;;2303:757;;;2813:189;;;;2863:4;2813:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2813:189:56;;;;;;;2778:246;;;;;:271;;:269;:271::i;:::-;2759:290;;2303:757;3069:14;3086:36;3111:10;;3086:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3086:16:56;;:36;-1:-1:-1;;3086:36:56;:24;:36;;-1:-1:-1;3086:36:56:i;:::-;3069:53;-1:-1:-1;;;;;;3245:20:56;;;;3237:59;;;;;-1:-1:-1;;;;;3237:59:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3314:19:56;;;;;;:11;:19;;;;;;:29;;3306:38;;;;;;-1:-1:-1;;;;;3376:19:56;;;;;;:11;:19;;;;;;:26;;3400:1;3376:26;:23;:26;:::i;:::-;-1:-1:-1;;;;;3354:19:56;;;;;;:11;:19;;;;;:48;3419:43;3426:11;3439:5;3446:7;3366:6;3419;:43::i;:::-;3412:50;1959:1510;-1:-1:-1;;;;;;;;;;1959:1510:56:o;9825:117::-;6083:1:57;6046;9825:117:56;;:::o;9530:83::-;9578:4;9530:83;;:::o;9278:125::-;9336:13;9368:22;;;:9;:22;;;;;;;;:28;;-1:-1:-1;;;9368:28:56;;;;;9278:125::o;18916:1396:57:-;19007:22;19094;;;:9;:22;;;;;19007;;19152;19134:14;;;;-1:-1:-1;;;19134:14:57;;;;:40;;;;;;;;;19126:49;;;;;;19230:20;;;;;19185:26;19214:37;;;:15;;;:37;;;;;;;;;-1:-1:-1;;;;;19285:30:57;;;;:16;;;:30;;;;;19343:20;;;;19214:37;;19285:30;-1:-1:-1;19342:78:57;;;;-1:-1:-1;19399:20:57;;;;19384:11;;:35;19342:78;:122;;;;;6083:1;19436:8;:20;;;:27;19342:122;:162;;;;-1:-1:-1;19480:23:57;;;19342:162;19325:318;;;19610:18;19590:8;:18;;;19567:6;:20;;;:41;19566:62;;;;;;;;19548:80;;19325:318;19657:20;;;;;19656:171;;-1:-1:-1;19726:18:57;;;;19781:12;;19694:113;;;;;;-1:-1:-1;;;;;19781:12:57;;;19694:113;;;;;;;;;;;;19811:15;;19726:18;;;;;19694:86;;:113;;;;;;;;;;;;;;;19726:18;19694:113;;;5:2:-1;;;;30:1;27;20:12;5:2;19694:113:57;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19694:113:57;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19694:113:57;:132;;19656:171;19652:654;;;19866:1;19843:20;;;:24;19908;;;;:45;;19937:15;19908:45;:28;:45;:::i;:::-;19881:24;;;;:72;;;;20020:18;;;;20074:12;;19988:143;;;;;;-1:-1:-1;;;;;20074:12:57;;;19988:143;;;;;;;;;;;;;;;;;;;;;;;;;20020:18;;;;;19988:85;;:143;;;;;;;;;;;;;;20020:18;;19988:143;;;5:2:-1;;;;30:1;27;20:12;5:2;19988:143:57;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19988:143:57;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19988:143:57;19967:165;;;;;;;;20240:23;;20226:38;;;;:13;:38;;;;;;;;;;20197:98;;;;;;;20163:15;;-1:-1:-1;20163:15:57;;-1:-1:-1;;;;;20197:98:57;;;;20226:38;;;20213:11;;20197:98;;;;;;;;;;;19652:654;18916:1396;;;;;;;;:::o;8658:146:56:-;8735:7;8761:22;;;:9;:22;;;;;;;;:36;;;:29;;;;:36;;;;;;8658:146::o;6152:26:57:-;;;-1:-1:-1;;;;;6152:26:57;;:::o;7263:361:56:-;7330:7;7401:22;;;:9;:22;;;;;;;;:43;;;:38;;;:43;;;;;;6046:1:57;7462:42:56;;;;;;;7522:34;;;:29;;;;:34;;;;;;;7574:33;;;;;;7401:43;;7462:42;;7522:34;7263:361::o;20498:230:57:-;20560:4;20576:24;;:::i;:::-;20603:22;;;;:9;:22;;;;;;;;;20576:49;;;;;;;;;;;;;;;-1:-1:-1;;;;;20576:49:57;;;;;;;;;;;;;;-1:-1:-1;;;20576:49:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20576:49:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20576:49:57;;;-1:-1:-1;;20576:49:57;;;;;;;;;;;;;;;20675:19;;;;20696:23;;20576:49;;-1:-1:-1;20665:55:57;;:9;:55::i;:::-;20643:19;20650:11;20643:6;:19::i;:::-;:77;;20498:230;-1:-1:-1;;;20498:230:57:o;7565:2143::-;7687:7;7776:23;;;;;;;;;;:38;;;7770:3;:44;7762:71;;;;;-1:-1:-1;;;;;7762:71:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;7889:10;:23;;;;;;;;;;:52;7945:2;-1:-1:-1;7889:58:57;7881:67;;;;;;8045:12;;8022:36;;;;8039:4;8022:36;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8022:36:57;;;;;;;8012:47;;;;;;8084:19;;8101:1;8084:19;:16;:19;:::i;:::-;8069:12;:34;8140:24;;:::i;:::-;8195:10;8174:18;;;;:31;;;8251:43;;;;;;;;;;;-1:-1:-1;;;;;8251:43:57;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;8251:43:57;;;;;;8241:54;;;;;;8215:80;;8323:20;8306:14;;;:37;;;8407:14;;;;8427:3;8407:23;;-1:-1:-1;8497:23:57;;;;;;;;;:46;;;;;8456:38;;;:87;8553:29;;;:17;;;:29;8592:20;;;:25;8627:19;;;:33;;;8688:23;;8674:38;;;;;;;;:52;8670:292;;;-1:-1:-1;;;;;8746:27:57;;;8742:210;;;8807:23;;8793:38;;;;:13;:38;;;;;:51;;-1:-1:-1;;8793:51:57;8834:10;8793:51;;;8742:210;;;8897:23;;8883:38;;;;:13;:38;;;;;:54;;-1:-1:-1;;8883:54:57;-1:-1:-1;;;;;8883:54:57;;;;;8742:210;9096:23;;8997:17;9068:52;;;:27;:52;;;;;;;;;9025:23;;;;;;;;;:38;;;:105;;9126:3;;9025:96;;;:42;:96;:::i;:::-;:100;:105;:100;:105;:::i;:::-;9156:10;:23;;;;;;;;;;:40;;;8997:133;;-1:-1:-1;9144:52:57;;9140:217;;;9239:10;:23;;;;;;;;;;:40;;;9212:24;;;:67;9140:217;;;9310:24;;;:36;;;9140:217;9389:24;;;;9366:20;;;:47;-1:-1:-1;9423:21:57;;;:9;:21;;;;;;;;;:32;;;;;;;;;;;;;-1:-1:-1;;9423:32:57;-1:-1:-1;;;;;9423:32:57;;;;;;;;;;;;;;9389:24;;9423:21;;:32;;-1:-1:-1;;;;;;9423:32:57;-1:-1:-1;;;9423:32:57;;;;;;;;;;;;;-1:-1:-1;9423:32:57;;;;;;;;;;;;;;;;;;-1:-1:-1;;9423:32:57;-1:-1:-1;;;;;9423:32:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9423:32:57;;;;;;;;;;;;-1:-1:-1;;9423:32:57;;;;;;;;;;9500:24;;;;-1:-1:-1;9465:21:57;;;-1:-1:-1;9465:21:57;;;;;;;;6046:1;9465:32;;;:28;;;;:32;;;;;:59;;;;9609:23;;9595:38;;:13;:38;;;;;;;9571:103;;;;;-1:-1:-1;;;;;9571:103:57;;;;;;;;;;;;;;;;;;9595:38;;;9465:21;;9571:103;;;;;;;;;;-1:-1:-1;9691:10:57;;7565:2143;-1:-1:-1;;;;;;7565:2143:57:o;11999:1829::-;12165:7;12210:3;12196:10;;:17;;;;:37;;-1:-1:-1;12231:2:57;12217:10;;:16;;12196:37;12188:91;;;;;;-1:-1:-1;;;;;12188:91:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12311:5;12297:10;;;;:19;;;;:40;;-1:-1:-1;12333:4:57;12320:10;;;;:17;12297:40;12289:83;;;;;;;-1:-1:-1;;;;;12289:83:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;12404:3;12390:10;;;;:17;;12382:62;;;;;-1:-1:-1;;;;;12382:62:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12476:10;;;;12462;;;;:24;;12454:80;;;;-1:-1:-1;;;;;12454:80:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12565:1;12552:10;;;;:14;12544:57;;;;;-1:-1:-1;;;;;12544:57:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;12632:1;12619:10;;;;:14;12611:55;;;;;-1:-1:-1;;;;;12611:55:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;12677:18;12698:41;12716:7;12698:41;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;12725:13:57;;-1:-1:-1;12698:17:57;;-1:-1:-1;12698:41:57:i;:::-;12677:62;-1:-1:-1;12843:3:57;12895:1;12923:4;12906:216;12933:5;12929:1;:9;12906:216;;;12968:10;;;;:14;-1:-1:-1;12967:39:57;;;;-1:-1:-1;13004:1:57;13002:3;;12988:10;;;;:17;;12967:39;12963:132;;;13056:1;13042:13;:15;;;;;;;;13026:31;;13075:5;;12963:132;13108:3;;;;;12946:1;12944:3;12906:216;;;-1:-1:-1;13157:637:57;;;;;;;;13212:10;;13157:637;;13212:10;13259;;;;13157:637;;;;13307:10;;;;13157:637;;;;;;;;13358:10;;;;13157:637;;;;;;;;;13397:43;;13405:10;;;13397:28;;13434:4;13397:28;:43::i;:::-;13157:637;;;;;;;;;;13519:7;13527:1;13519:10;;;;;;;;;13157:637;;;13563:7;13571:1;13563:10;;;;;;;;;13157:637;;;13613:7;13621:1;13613:10;;;;;;;;;13157:637;;;13654:7;13662:1;13654:10;;;;;;;;;13157:637;;;13693:7;13701:1;13693:10;;;;;;;;;13157:637;;;13732:7;13740:2;13732:11;;;;;;;;;13157:637;;-1:-1:-1;;;;;13157:637:57;;;;;;;;;;-1:-1:-1;13132:22:57;;;;;;;;;;;:662;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13132:662:57;;;;;;;;;-1:-1:-1;13132:22:57;11999:1829;-1:-1:-1;;;11999:1829:57:o;4612:123:56:-;4670:11;7214:23:57;7225:11;7214:10;:23::i;:::-;7206:32;;;;;;;;4612:123:56;;:::o;5285:106::-;-1:-1:-1;6010:1:57;;5285:106:56:o;668:44::-;;;;;;;;;;;;;:::o;6053:31:57:-;6083:1;6053:31;:::o;6532:150:56:-;6612:7;6638:22;;;:9;:22;;;;;;;;:37;;;:28;;;;:37;;;;;;6532:150::o;5758:60:57:-;;;;;;;;;;;;-1:-1:-1;;;;;5758:60:57;;:::o;5877:86::-;;;;;;;;;;;;;:::o;9967:1087::-;10029:28;10097:22;;;:9;:22;;;;;10155:21;10137:14;;;;-1:-1:-1;;;10137:14:57;;;;:39;;;;;;;;;:92;;;-1:-1:-1;10198:31:57;10180:14;;;;-1:-1:-1;;;10180:14:57;;;;:49;;;;;;;;;10137:92;10129:164;;;;;;-1:-1:-1;;;;;10129:164:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10311:21;10320:11;10311:8;:21::i;:::-;10303:57;;;;;;;-1:-1:-1;;;;;10303:57:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;10370:38;10474:91;10486:78;10561:2;10486:70;10494:61;10537:14;;;10552:1;10537:17;;10494:38;;;;;:61;:42;:61;:::i;:::-;10486:3;;:70;:7;:70;:::i;:78::-;10479:1;;10474:91;:11;:91;:::i;:::-;10370:196;;10613:3;10580:30;:36;10576:103;;;-1:-1:-1;10665:3:57;10576:103;10688:39;;;:72;;;6083:1;10828:20;;;;:15;;;:20;;;;;;10793:65;;10854:3;;10793:56;;10730:30;;10793:56;:34;:56;:::i;:65::-;10876:12;;:55;;;;;;10898:10;10876:55;;;;;;;;;;;;10770:88;;-1:-1:-1;;;;;;10876:12:57;;;;:21;;:55;;;;;;;;;;;;;;;:12;;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;10876:55:57;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10876:55:57;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10876:55:57;10868:97;;;;;;;-1:-1:-1;;;;;10868:97:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;10980:67;;;;;;;;11014:10;;11001:11;;10980:67;;;;;;;;;9967:1087;;;;;:::o;6838:115:56:-;6900:4;6923:23;6934:11;6923:10;:23::i;5563:143::-;5632:20;;:::i;:::-;5671:22;;;;:9;:22;;;;;;;5664:35;;;;;;;;5671:28;;5664:35;;5671:28;5664:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5563:143;;;:::o;14387:4032:57:-;14462:22;;:::i;:::-;14496:25;14524:22;;;:9;:22;;;;;14583;14565:14;;;;-1:-1:-1;;;14565:14:57;;;;:40;;;;;;;;;14564:92;;;-1:-1:-1;14627:28:57;14609:14;;;;-1:-1:-1;;;14609:14:57;;;;:46;;;;;;;;;14564:92;14556:158;;;;;;-1:-1:-1;;;;;14556:158:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14724:24;;:::i;:::-;-1:-1:-1;14762:19:57;;;;;14751:10;:31;;;;;;;;;;;14724:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14724:58:57;;;;;14828:20;;;:27;14824:180;;;-1:-1:-1;6046:1:57;14888:28;;;;:24;;;:28;;;;;;14824:180;;;-1:-1:-1;6083:1:57;14964:29;;;;:24;;;:29;;;;;;14824:180;15085:3;15031:52;15050:6;:32;;;15031:14;:18;;:52;;;;:::i;:::-;15030:58;;;;;;;-1:-1:-1;;;;;15142:30:57;;15118:21;15142:30;;;:16;;;:30;;;;;;;;6083:1;15228:20;;:15;;;:20;;;;;;;6046:1;15204:19;;;;;;15030:58;;;;;-1:-1:-1;15142:30:57;15118:21;;15204:45;;:19;:45;:23;:45;:::i;:::-;15304:20;;;;15259:26;15288:37;;;:15;;;:37;;;;;;15340:13;;;;15182:67;;-1:-1:-1;15288:37:57;15340:17;15336:980;;;6083:1;15373:38;15486:20;;;:15;;;:20;;;;;;15442:39;;;;15426:91;;15442:74;;15512:3;;15442:65;;:39;:65;:43;:65;:::i;:74::-;15426:11;;:91;:15;:91;:::i;:::-;15373:144;-1:-1:-1;15553:28:57;15535:14;;;;-1:-1:-1;;;15535:14:57;;;;:46;;;;;;;;;15531:744;;;15700:13;;;;15687:26;;15531:744;;;15753:20;;;;15738:11;;:35;15734:541;;;15797:11;;6083:1;15797:18;15793:468;;;15864:30;15843:8;:18;;;:51;15839:274;;;15922:20;15945:54;15980:8;:18;;;15945:30;:34;;:54;;;;:::i;:::-;15922:77;;16072:18;16039:31;16057:12;16039:6;:13;;;:17;;:31;;;;:::i;:::-;16038:52;;;;;;;;16025:65;;-1:-1:-1;15839:274:57;15793:468;;;16173:13;;;;16224:18;;16173:49;;16191:30;16173:49;:17;:49;:::i;:::-;16172:70;;;;;;;;16159:83;;15793:468;-1:-1:-1;16304:1:57;16288:13;;;:17;15336:980;16367:29;;;;;;:38;;;:108;;-1:-1:-1;16451:23:57;;16437:38;;;;:13;:38;;;;;;-1:-1:-1;;;;;16421:54:57;;;16437:38;;16421:54;16367:108;:170;;;;-1:-1:-1;16509:28:57;16491:14;;;;-1:-1:-1;;;16491:14:57;;;;:46;;;;;;;;;;16367:170;:212;;;;;6046:1;16553:8;:20;;;:26;16367:212;16363:414;;;16697:18;;;;16620:96;;:72;16673:18;16636:35;16697:18;16659:11;16636:35;:22;:35;:::i;:::-;16635:56;;;;;;;;16620:7;16628:1;16620:10;;;;;;:72;:14;:72;:::i;:::-;:76;:96;:76;:96;:::i;:::-;16595:121;;16730:29;;;:36;;-1:-1:-1;;16730:36:57;16762:4;16730:36;;;16363:414;-1:-1:-1;;;;;16828:29:57;;16806:19;16828:29;;;:15;;;:29;;;;;16872:16;;;;:21;;;;16871:45;;-1:-1:-1;16899:16:57;;;;;;16871:45;16867:582;;;16954:28;16936:14;;;;-1:-1:-1;;;16936:14:57;;;;:46;;;;;;;;;16932:473;;;17124:3;17068:54;17089:6;:32;;;17068:5;:16;;;:20;;:54;;;;:::i;:::-;17067:60;;;;;;;;17053:10;;;:75;16932:473;;;17177:10;;17153:20;;;;:34;17149:256;;;17368:20;;;;17343:46;;;;:24;;;:46;;;;;;17305:16;;;;17220:170;;17343:46;17305:36;;17326:14;17305:36;:20;:36;:::i;:::-;17304:85;;;;;;;;17278:3;17222:54;17243:6;:32;;;17222:5;:16;;;:20;;:54;;;;:::i;:::-;17221:60;;;;;;;;;17220:170;:83;:170;:::i;:::-;17207:10;;;:183;17149:256;17437:1;17418:16;;;:20;16867:582;17485:17;;;;-1:-1:-1;;;;;17485:33:57;;;:17;;:33;17484:66;;;;;6083:1;17522:8;:20;;;:27;17484:66;:101;;;;-1:-1:-1;17553:17:57;;;;-1:-1:-1;;;;;17553:17:57;:31;;17484:101;17480:214;;;17614:25;;;;17601:10;;;:38;17653:17;;;:30;;-1:-1:-1;;17653:30:57;;;17480:214;17707:10;;:15;17703:313;;17786:10;;17761:20;;;;:36;;:24;:36::i;:::-;17738:20;;;:59;17819:12;;17855:10;;17819:47;;;;;;-1:-1:-1;;;;;17819:47:57;;;;;;;;;;;;;;;;:12;;;;;:21;;:47;;;;;17855:10;;17819:47;;;;;;;:12;;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;17819:47:57;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17819:47:57;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17819:47:57;17811:90;;;;;;;-1:-1:-1;;;;;17811:90:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;17954:23;;17940:38;;;;:13;:38;;;;;;;;;;17994:10;;17920:85;;;;;;;-1:-1:-1;;;;;17920:85:57;;;;17940:38;;;17927:11;;17920:85;;;;;;;;;;;17703:313;18044:10;;;;18029:26;;18044:7;18037:1;18029:10;;:26;:31;18025:388;;18108:18;;;;-1:-1:-1;;;;;18108:18:57;18076:79;18156:26;18171:7;18179:1;18171:10;;;;18156:7;18164:1;18156:10;;:26;18184:12;18198:11;18076:134;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18076:134:57;-1:-1:-1;;;;;18076:134:57;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18076:134:57;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18076:134:57;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;18298:23:57;;18284:38;;;;:13;18076:134;18284:38;;;;;-1:-1:-1;;;;;18229:173:57;;;;18284:38;18259:11;18229:173;18362:26;18377:7;18385:1;18377:10;;;;18362:7;18370:1;18362:10;;:26;18229:173;;;;;;;;;;;;;;;18025:388;14387:4032;;;;;;;;;;;:::o;10096:109:56:-;10152:7;10179:19;10186:11;10179:6;:19::i;4999:127::-;5075:4;5054:11;7214:23:57;7225:11;7214:10;:23::i;:::-;7206:32;;;;;;;;5098:21:56;5107:11;5098:8;:21::i;:::-;5091:28;4999:127;-1:-1:-1;;;4999:127:56:o;5656:52:57:-;;;;;;;;;;;;;:::o;820:845:54:-;892:7;935:8;976;716:24;1070:525;1077:17;;1070:525;;1161:12;1176:3;1161:18;1184:3;1160:27;1156:192;;;1304:29;1308:10;1320:12;1304:3;:29::i;:::-;1291:42;;1156:192;49:1:-1;25:41;;;;1452:17:54;;1448:137;;1539:31;1543:12;1557;1539:3;:31::i;:::-;1524:46;;1448:137;1070:525;;29411:1759:57;29514:4;6010:1;29572:5;:23;;:36;;;;;29607:1;29599:5;:9;29572:36;29564:65;;;;;;;-1:-1:-1;;;;;29564:65:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;29657:1;29647:11;;29639:51;;;;;-1:-1:-1;;;;;29639:51:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;29705:21;29714:11;29705:8;:21::i;:::-;29701:63;;;-1:-1:-1;29749:4:57;29742:11;;29701:63;29773:25;29801:22;;;:9;:22;;;;;29857:24;29839:14;;;;-1:-1:-1;;;29839:14:57;;;;:42;;;;;;;;;;29838:100;;;;-1:-1:-1;29917:20:57;29899:14;;;;-1:-1:-1;;;29899:14:57;;;;:38;;;;;;;;;;29838:100;29834:143;;;29961:5;29954:12;;;;;29834:143;-1:-1:-1;;;;;30079:25:57;;30055:21;30079:25;;;:16;;;:25;;;;;30119:13;;;;30079:25;;-1:-1:-1;30118:45:57;;;;-1:-1:-1;30142:11:57;;:20;;;30118:45;30114:88;;;30186:5;30179:12;;;;;;30114:88;30254:12;;:57;;;;;;-1:-1:-1;;;;;30254:57:57;;;;;;;30297:4;30254:57;;;;;;;;;;;;30229:7;;30254:12;;;;;:25;;:57;;;;;;;;;;;;;;;30212:14;30254:12;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;30254:57:57;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30254:57:57;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30254:57:57;30246:95;;;;;;;-1:-1:-1;;;;;30246:95:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;30374:20;;;;:32;;30399:6;30374:32;:24;:32;:::i;:::-;30351:20;;;:55;30463:13;;;;:25;;30481:6;30463:25;:17;:25;:::i;:::-;30447:13;;;:41;;;30648:35;-1:-1:-1;30631:52:57;30623:91;;;;;-1:-1:-1;;;;;30623:91:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;30732:20;;;;30756:35;-1:-1:-1;30732:59:57;30724:96;;;;;-1:-1:-1;;;;;30724:96:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;6083:1;30835:5;:12;30831:98;;;30886:20;;;;:32;;30911:6;30886:32;:24;:32;:::i;:::-;30863:20;;;:55;30831:98;30938:19;;;:11;31004:22;;;:15;;;:22;;;;;;30993:34;;:6;;:34;:10;:34;:::i;:::-;30968:22;;;;:15;;;:22;;;;;;;;:59;;;;31075:23;;31061:38;;:13;:38;;;;;;;31042:83;;;;;;;;;;;;;-1:-1:-1;;;;;31042:83:57;;;;31061:38;;;31048:11;;31042:83;;;;;;;;;31142:21;31151:11;31142:8;:21::i;:::-;31135:28;29411:1759;-1:-1:-1;;;;;;;;29411:1759:57:o;35503:366::-;35566:4;35605:22;;;:9;:22;;;;;;;:28;;-1:-1:-1;;;35605:28:57;;;;35662:24;35652:6;:34;;;;;;;;;35651:88;;;-1:-1:-1;35717:21:57;35707:6;:31;;;;;;;;;35651:88;:150;;;-1:-1:-1;35769:31:57;35759:6;:41;;;;;;;;;35651:150;:201;;;-1:-1:-1;35831:20:57;35821:6;:30;;;;;;;;;;35503:366;-1:-1:-1;;;35503:366:57:o;31909:2887::-;32014:4;6010:1;32038:5;:23;;:36;;;;;32073:1;32065:5;:9;32038:36;32030:63;;;;;;;-1:-1:-1;;;;;32030:63:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;32107:21;32116:11;32107:8;:21::i;:::-;32103:63;;;-1:-1:-1;32151:4:57;32144:11;;32103:63;32176:24;;:::i;:::-;-1:-1:-1;32203:10:57;32214:22;;;:9;:22;;;;;;;;:33;;;;;32203:45;;;;;;;;32176:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32176:72:57;;;;;;;32286:22;;;;;;32418:18;;;;32386:85;;;;;;;;;;;;;;;;;;;;;;;32176:72;;32214:22;;32203:10;;32418:18;;;;;32386:64;;:85;;;;;;;;;;32418:18;32386:85;;;5:2:-1;;;;30:1;27;20:12;5:2;32386:85:57;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32386:85:57;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32386:85:57;;-1:-1:-1;32502:1:57;32489:14;;32481:54;;;;;-1:-1:-1;;;;;32481:54:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;32553:18;;;;32545:49;;;;;-1:-1:-1;;;;;32545:49:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;32618:4;32636:8;;32632:55;;;-1:-1:-1;32666:10:57;32632:55;-1:-1:-1;;;;;32758:23:57;;;;;;:15;;;:23;;;;;:34;;;:39;32754:82;;32820:5;32813:12;;;;;;;;32754:82;32907:21;;;;:14;;;:21;;;;;;32899:30;;:3;;:30;:7;:30;:::i;:::-;32875:21;;;;:14;;;:21;;;;;;:54;;;33126:20;;;;33111:36;;;;;33087:21;;;;-1:-1:-1;33087:60:57;33086:183;;-1:-1:-1;33203:20:57;;;;;33188:36;;;;:14;;;:36;;;;;;;33166:18;;;;;;:58;33165:103;;;;;6083:1;33241:8;:20;;;:27;33165:103;33082:937;;;33307:21;33289:14;;;;-1:-1:-1;;;33289:14:57;;;;:39;;;;;;;;;:206;;;;-1:-1:-1;33469:24:57;;;;33437:29;;;;:56;33414:14;;;33429:1;33414:17;;33408:3;:23;33407:87;;33289:206;:274;;;-1:-1:-1;33532:31:57;33514:14;;;;-1:-1:-1;;;33514:14:57;;;;:49;;;;;;;;;33289:274;33285:682;;;33641:31;33623:14;;;;-1:-1:-1;;;33623:14:57;;;;:49;;;;;;;;;33619:231;;33737:24;;;;33696:38;;;:65;33783:14;;;:48;;-1:-1:-1;;;;;;33783:48:57;;;;;33619:231;33949:3;33929:17;;;:23;33285:682;33980:20;;;:28;;;33082:937;34054:186;;;;;;;;;;;;;;;;;;;;34159:24;34141:14;;;;-1:-1:-1;;;34141:14:57;;;;:42;;;;;;;;;34140:88;;;-1:-1:-1;34207:20:57;34189:14;;;;-1:-1:-1;;;34189:14:57;;;;:38;;;;;;;;;34140:88;34054:186;;;;-1:-1:-1;;;;;34028:23:57;;;;;;:15;;;:23;;;;;;;;;:212;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34028:212:57;;;;;;;;;;34273:24;34255:14;;;;-1:-1:-1;;;34255:14:57;;;;:42;;;;;;;;;34254:88;;;-1:-1:-1;34321:20:57;34303:14;;;;-1:-1:-1;;;34303:14:57;;;;:38;;;;;;;;;34254:88;34250:402;;;34400:31;;;;:24;;;:31;;;;;;34392:40;;:3;;:40;:7;:40;:::i;:::-;34358:31;;;;:24;;;:31;;;;;:74;;;;34475:32;;;;34518:3;;34475:41;;34512:3;34475:41;:36;:41;:::i;:::-;34474:47;;;;;;;34567:18;;;;34535:106;;;;;;34474:47;;;;34535:106;;;;;;-1:-1:-1;;;;;34535:106:57;;;;;;;;;;;;;;;34474:47;;-1:-1:-1;34567:18:57;;;34535:66;;:106;;;;;;;;;;;;;;34567:18;;34535:106;;;5:2:-1;;;;30:1;27;20:12;5:2;34535:106:57;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34535:106:57;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;34250:402:57;34706:23;;34692:38;;;;:13;:38;;;;;;;;;;34666:85;;;;;;;;;;;;;-1:-1:-1;;;;;34666:85:57;;;;34692:38;;;34679:11;;34666:85;;;;;;;;;34768:21;34777:11;34768:8;:21::i;1785:265:64:-;1984:58;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1984:58:64;;;;;;;1974:69;;;;;;1785:265::o;609:1026::-;687:7;706:9;725;744:7;804:9;:16;824:2;804:22;;800:72;;;858:1;842:19;;;;;;;800:72;-1:-1:-1;;;1166:4:64;1151:20;;1145:27;1211:4;1196:20;;1190:27;1264:4;1249:20;;1243:27;1240:1;1235:36;1390:2;1386:6;;;;1382:44;;;1413:2;1408:7;1382:44;1503:1;:7;;1508:2;1503:7;;:18;;;;;1514:1;:7;;1519:2;1514:7;;1503:18;1499:130;;;1553:1;1537:19;;;;;;;1499:130;1594:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1594:24:64;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1594:24:64;;;;;;;;1587:31;;;;;;;1431:145:67;1489:7;1520:5;;;1543:6;;;;1535:15;;;;;1205:145;1263:7;1290:6;;;;1282:15;;;;;;-1:-1:-1;1319:5:67;;;1205:145::o;35031:309:57:-;35090:7;35137:22;;;:9;:22;;;;;;;;6046:1;35312:19;;:15;;;:19;;;;;;;35273:20;;;;;;35137:22;;35265:68;;:38;;;:68;:38;:68;:::i;229:421:67:-;287:7;527:6;;523:45;;;-1:-1:-1;556:1:67;549:8;;523:45;590:5;;;594:1;590;:5;613;;;;;;;;:10;605:19;;;;;778:296;836:7;929:5;;;921:14;;;;;;945:9;961:1;957;:5;;;;;;;;;778:296;-1:-1:-1;;;;778:296:67:o;1734:181:54:-;1815:7;1841:67;1845:18;;;;716:24;1845:29;;;;1876:20;;:31;1841:3;:67::i;22727:6412:57:-;22804:4;22783:11;7214:23;7225:11;7214:10;:23::i;:::-;7206:32;;;;;;;;22820:25;22848:22;;;:9;:22;;;;;22880:24;;:::i;:::-;-1:-1:-1;22918:19:57;;;;;22907:10;:31;;;;;;;;;;;;22880:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22880:58:57;;;;;22948:27;;:::i;:::-;:38;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22948:38:57;;;;;;;;;;;;;;-1:-1:-1;;;22948:38:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22948:38:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22948:38:57;;;-1:-1:-1;;22948:38:57;;;;;;;;;;;;;;;;23062:18;;;23030:89;;;;;;;;;;;;;;22948:38;;-1:-1:-1;22948:38:57;;-1:-1:-1;;;;;23062:18:57;;;;23030:76;;:89;;;;;;;;;;23062:18;23030:89;;;5:2:-1;;;;30:1;27;20:12;5:2;23030:89:57;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23030:89:57;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23030:89:57;23226:35;;23433:20;;;;23179;23418:36;;;:14;;;:36;;;;;;23030:89;;-1:-1:-1;23219:3:57;23203:19;;23202:59;;;;23179:20;;;;23418:51;-1:-1:-1;23414:3687:57;;;23568:20;23550:14;;;;-1:-1:-1;;;23550:14:57;;;;:38;;;;;;;;;23546:351;;;23625:30;23608:47;;23546:351;;;23698:24;23680:14;;;;-1:-1:-1;;;23680:14:57;;;;:42;;;;;;;;;23676:221;;;23759:35;23742:52;;23676:221;;;23850:32;23833:49;;23676:221;23910:14;;;:39;;23927:22;;23910:14;-1:-1:-1;;;;;;23910:39:57;-1:-1:-1;;;23927:22:57;23910:39;;;;;;23414:3687;;;24002:20;23984:14;;;;-1:-1:-1;;;23984:14:57;;;;:38;;;;;;;;;23980:944;;;24137:28;;;;24115:14;;;:17;24109:3;:23;24108:57;24104:806;;24206:28;24189:14;;:45;;-1:-1:-1;;;;;;24189:45:57;-1:-1:-1;;;24189:45:57;;;6046:1;24256:20;;;:25;;;6046:1;-1:-1:-1;24104:806:57;;;24416:55;24426:8;:19;;;24447:8;:23;;;24416:9;:55::i;:::-;24394:77;;24519:19;24497;24504:11;24497:6;:19::i;:::-;:41;24493:399;;;24633:14;;;:41;;-1:-1:-1;;;;;;24633:41:57;;;;;24790:3;24770:17;;;:23;24819:28;;;:50;;;24493:399;24960:24;24942:14;;;;-1:-1:-1;;;24942:14:57;;;;:42;;;;;;;;;24938:2153;;;25026:55;25036:8;:19;;;25057:8;:23;;;25026:9;:55::i;:::-;25192:32;;;;25004:77;;-1:-1:-1;25170:14:57;;;25185:1;25170:17;;25164:3;:23;25163:61;25159:1918;;25274:19;25252;25259:11;25252:6;:19::i;:::-;:41;25248:1258;;;25348:23;;25325:47;;;;:22;:47;;;;;;6326:4;-1:-1:-1;25321:1071:57;;;25493:14;;;;:38;;-1:-1:-1;;;;;;25493:38:57;;;;;25652:3;25632:17;;;:23;25708;;-1:-1:-1;25685:47:57;;;:22;:47;;;;;;;;:49;;;;;;;;25925:23;;25897:52;;:27;:52;;;;;;26315:47;;;;;;;26218:19;;;:15;;;:19;;;;;;;;25897:52;;-1:-1:-1;26315:47:57;26211:62;;;26210:153;;;;;;;26073:23;;26045:52;;;;:27;:52;;;;;26210:153;;;26140:224;;26045:320;;25321:1071;25248:1258;;;26446:14;;;:37;;26463:20;;26446:14;-1:-1:-1;;;;;;26446:37:57;-1:-1:-1;;;26463:20:57;26446:37;;25248:1258;25159:1918;;;26591:21;26615:19;26622:11;26615:6;:19::i;:::-;26677:28;;;;26591:43;;-1:-1:-1;26677:53:57;;26710:19;26677:53;:32;:53;:::i;:::-;26660:70;;26656:403;;26758:14;;;:37;;-1:-1:-1;;;;;;26758:37:57;;;;;26656:403;;;26859:13;26828:8;:28;;;:44;26824:235;;;26900:28;;;:50;;;26981:55;;;;;;;;27003:11;;26981:55;;;;;;;;;;26824:235;25159:1918;;27134:21;27116:14;;;;-1:-1:-1;;;27116:14:57;;;;:39;;;;;;;;;27115:108;;;-1:-1:-1;27191:31:57;27173:14;;;;-1:-1:-1;;;27173:14:57;;;;:49;;;;;;;;;27115:108;27111:405;;;27330:38;;;;27308:17;;;;27302:3;:23;27301:67;27297:209;;27388:14;;;:39;;-1:-1:-1;;;;;;27388:39:57;;;;;27462:29;;-1:-1:-1;27297:209:57;27548:19;27530:14;:37;;;;;;;;;27526:1431;;27606:29;27588:14;:47;;;;;;;;;27587:121;;;-1:-1:-1;27675:32:57;27657:14;:50;;;;;;;;;27587:121;27583:938;;;27820:26;;27797:50;;;;:22;:50;;;;;;:57;;27852:1;27797:57;:54;:57;:::i;:::-;27751:26;;27728:50;;;;:22;:50;;;;;;:126;;;;28019:26;;27996:50;;;;28068:21;;28064:443;;;28141:23;;28168:1;28113:52;;;:27;:52;;;;;:56;28064:443;;;28273:23;;28245:52;;;;:27;:52;;;;;;;;;6046:1;28450:19;;:15;;;:19;;;;;;;28245:52;;-1:-1:-1;28472:16:57;;28395:75;;:50;28245:52;28443:1;28426:18;;28395:50;:30;:50;:::i;:75::-;28394:94;;;;;;;28347:23;;28319:52;;;;:27;:52;;;;;28394:94;;;28319:169;;28064:443;27583:938;;28607:23;;28593:38;;;;:13;:38;;;;;;;;;;28645:20;;;;28539:169;;;;;;;;;;;;;-1:-1:-1;;;;;28593:38:57;;;;28568:11;;28539:169;;;;;;;;;;;28745:11;28727:46;28758:14;28727:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;28812:18;;;;28865:20;;;;28787:100;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28812:18:57;;;;28787:60;;:100;;;;;;;;;;;;;;;28812:18;;28787:100;;;5:2:-1;;;;30:1;27;20:12;5:2;28787:100:57;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28787:100:57;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;28922:24:57;;;;28901:18;;;:45;27526:1431;28991:14;;;;-1:-1:-1;;;28991:14:57;;;;28970:35;;;;;;;;:11;:17;;;:35;;;;;;;;;28966:111;;29038:11;29026:40;29051:8;:14;;;;;;;;;;;;29026:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;28966:111;29112:19;29094:14;:37;;;;;;;;;;;22727:6412;-1:-1:-1;;;;;;;;;;;22727:6412:57:o;1995:383:54:-;2060:7;2260:13;;;2268:5;2260;:13;2291:9;;;;;;;;:18;2283:52;;;;;-1:-1:-1;;;;;2283:52:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;45:20:-1;25:41;;;1995:383:54;-1:-1:-1;;;1995:383:54:o;2461:353::-;2544:7;2790:15;716:24;2745:33;;2744:62;;;;;;;;;2461:353;-1:-1:-1;;;2461:353:54:o;336:104:66:-;394:7;424:1;420;:5;:13;;432:1;420:13;;;-1:-1:-1;428:1:66;;336:104;-1:-1:-1;336:104:66:o;220:9987:56:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;220:9987:56;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;220:9987:56;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;220:9987:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;220:9987:56;;;-1:-1:-1;220:9987:56;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;220:9987:56;;;-1:-1:-1;;220:9987:56:o;:::-;;;;;;;;;;;;;;;;;;463:616:75;523:4;1026:20;;1064:8;;463:616::o",
  "source": "pragma solidity ^0.5.4;\n\nimport \"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\";\nimport \"./GenesisProtocolLogic.sol\";\n\n\n/**\n * @title GenesisProtocol implementation -an organization's voting machine scheme.\n */\ncontract GenesisProtocol is IntVoteInterface, GenesisProtocolLogic {\n    using ECDSA for bytes32;\n\n    // Digest describing the data the user signs according EIP 712.\n    // Needs to match what is passed to Metamask.\n    bytes32 public constant DELEGATION_HASH_EIP712 =\n    keccak256(abi.encodePacked(\n    \"address GenesisProtocolAddress\",\n    \"bytes32 ProposalId\",\n    \"uint256 Vote\",\n    \"uint256 AmountToStake\",\n    \"uint256 Nonce\"\n    ));\n\n    mapping(address=>uint256) public stakesNonce; //stakes Nonce\n\n    /**\n     * @dev Constructor\n     */\n    constructor(IERC20 _stakingToken)\n    public\n    // solhint-disable-next-line no-empty-blocks\n    GenesisProtocolLogic(_stakingToken) {\n    }\n\n    /**\n     * @dev staking function\n     * @param _proposalId id of the proposal\n     * @param _vote  NO(2) or YES(1).\n     * @param _amount the betting amount\n     * @return bool true - the proposal has been executed\n     *              false - otherwise.\n     */\n    function stake(bytes32 _proposalId, uint256 _vote, uint256 _amount) external returns(bool) {\n        return _stake(_proposalId, _vote, _amount, msg.sender);\n    }\n\n    /**\n     * @dev stakeWithSignature function\n     * @param _proposalId id of the proposal\n     * @param _vote  NO(2) or YES(1).\n     * @param _amount the betting amount\n     * @param _nonce nonce value ,it is part of the signature to ensure that\n              a signature can be received only once.\n     * @param _signatureType signature type\n              1 - for web3.eth.sign\n              2 - for eth_signTypedData according to EIP #712.\n     * @param _signature  - signed data by the staker\n     * @return bool true - the proposal has been executed\n     *              false - otherwise.\n     */\n    function stakeWithSignature(\n        bytes32 _proposalId,\n        uint256 _vote,\n        uint256 _amount,\n        uint256 _nonce,\n        uint256 _signatureType,\n        bytes calldata _signature\n        )\n        external\n        returns(bool)\n        {\n        // Recreate the digest the user signed\n        bytes32 delegationDigest;\n        if (_signatureType == 2) {\n            delegationDigest = keccak256(\n                abi.encodePacked(\n                    DELEGATION_HASH_EIP712, keccak256(\n                        abi.encodePacked(\n                        address(this),\n                        _proposalId,\n                        _vote,\n                        _amount,\n                        _nonce)\n                    )\n                )\n            );\n        } else {\n            delegationDigest = keccak256(\n                        abi.encodePacked(\n                        address(this),\n                        _proposalId,\n                        _vote,\n                        _amount,\n                        _nonce)\n                    ).toEthSignedMessageHash();\n        }\n        address staker = delegationDigest.recover(_signature);\n        //a garbage staker address due to wrong signature will revert due to lack of approval and funds.\n        require(staker != address(0), \"staker address cannot be 0\");\n        require(stakesNonce[staker] == _nonce);\n        stakesNonce[staker] = stakesNonce[staker].add(1);\n        return _stake(_proposalId, _vote, _amount, staker);\n    }\n\n    /**\n     * @dev voting function\n     * @param _proposalId id of the proposal\n     * @param _vote NO(2) or YES(1).\n     * @param _amount the reputation amount to vote with . if _amount == 0 it will use all voter reputation.\n     * @param _voter voter address\n     * @return bool true - the proposal has been executed\n     *              false - otherwise.\n     */\n    function vote(bytes32 _proposalId, uint256 _vote, uint256 _amount, address _voter)\n    external\n    votable(_proposalId)\n    returns(bool) {\n        Proposal storage proposal = proposals[_proposalId];\n        Parameters memory params = parameters[proposal.paramsHash];\n        address voter;\n        if (params.voteOnBehalf != address(0)) {\n            require(msg.sender == params.voteOnBehalf);\n            voter = _voter;\n        } else {\n            voter = msg.sender;\n        }\n        return internalVote(_proposalId, voter, _vote, _amount);\n    }\n\n  /**\n   * @dev Cancel the vote of the msg.sender.\n   * cancel vote is not allow in genesisProtocol so this function doing nothing.\n   * This function is here in order to comply to the IntVoteInterface .\n   */\n    function cancelVote(bytes32 _proposalId) external votable(_proposalId) {\n       //this is not allowed\n        return;\n    }\n\n    /**\n      * @dev execute check if the proposal has been decided, and if so, execute the proposal\n      * @param _proposalId the id of the proposal\n      * @return bool true - the proposal has been executed\n      *              false - otherwise.\n     */\n    function execute(bytes32 _proposalId) external votable(_proposalId) returns(bool) {\n        return _execute(_proposalId);\n    }\n\n  /**\n    * @dev getNumberOfChoices returns the number of choices possible in this proposal\n    * @return uint256 that contains number of choices\n    */\n    function getNumberOfChoices(bytes32) external view returns(uint256) {\n        return NUM_OF_CHOICES;\n    }\n\n    /**\n      * @dev getProposalTimes returns proposals times variables.\n      * @param _proposalId id of the proposal\n      * @return proposals times array\n      */\n    function getProposalTimes(bytes32 _proposalId) external view returns(uint[3] memory times) {\n        return proposals[_proposalId].times;\n    }\n\n    /**\n     * @dev voteInfo returns the vote and the amount of reputation of the user committed to this proposal\n     * @param _proposalId the ID of the proposal\n     * @param _voter the address of the voter\n     * @return uint256 vote - the voters vote\n     *        uint256 reputation - amount of reputation committed by _voter to _proposalId\n     */\n    function voteInfo(bytes32 _proposalId, address _voter) external view returns(uint, uint) {\n        Voter memory voter = proposals[_proposalId].voters[_voter];\n        return (voter.vote, voter.reputation);\n    }\n\n    /**\n    * @dev voteStatus returns the reputation voted for a proposal for a specific voting choice.\n    * @param _proposalId the ID of the proposal\n    * @param _choice the index in the\n    * @return voted reputation for the given choice\n    */\n    function voteStatus(bytes32 _proposalId, uint256 _choice) external view returns(uint256) {\n        return proposals[_proposalId].votes[_choice];\n    }\n\n    /**\n    * @dev isVotable check if the proposal is votable\n    * @param _proposalId the ID of the proposal\n    * @return bool true or false\n    */\n    function isVotable(bytes32 _proposalId) external view returns(bool) {\n        return _isVotable(_proposalId);\n    }\n\n    /**\n    * @dev proposalStatus return the total votes and stakes for a given proposal\n    * @param _proposalId the ID of the proposal\n    * @return uint256 preBoostedVotes YES\n    * @return uint256 preBoostedVotes NO\n    * @return uint256 total stakes YES\n    * @return uint256 total stakes NO\n    */\n    function proposalStatus(bytes32 _proposalId) external view returns(uint256, uint256, uint256, uint256) {\n        return (\n                proposals[_proposalId].preBoostedVotes[YES],\n                proposals[_proposalId].preBoostedVotes[NO],\n                proposals[_proposalId].stakes[YES],\n                proposals[_proposalId].stakes[NO]\n        );\n    }\n\n  /**\n    * @dev getProposalOrganization return the organizationId for a given proposal\n    * @param _proposalId the ID of the proposal\n    * @return bytes32 organization identifier\n    */\n    function getProposalOrganization(bytes32 _proposalId) external view returns(bytes32) {\n        return (proposals[_proposalId].organizationId);\n    }\n\n    /**\n      * @dev getStaker return the vote and stake amount for a given proposal and staker\n      * @param _proposalId the ID of the proposal\n      * @param _staker staker address\n      * @return uint256 vote\n      * @return uint256 amount\n    */\n    function getStaker(bytes32 _proposalId, address _staker) external view returns(uint256, uint256) {\n        return (proposals[_proposalId].stakers[_staker].vote, proposals[_proposalId].stakers[_staker].amount);\n    }\n\n    /**\n      * @dev voteStake return the amount stakes for a given proposal and vote\n      * @param _proposalId the ID of the proposal\n      * @param _vote vote number\n      * @return uint256 stake amount\n    */\n    function voteStake(bytes32 _proposalId, uint256 _vote) external view returns(uint256) {\n        return proposals[_proposalId].stakes[_vote];\n    }\n\n  /**\n    * @dev voteStake return the winningVote for a given proposal\n    * @param _proposalId the ID of the proposal\n    * @return uint256 winningVote\n    */\n    function winningVote(bytes32 _proposalId) external view returns(uint256) {\n        return proposals[_proposalId].winningVote;\n    }\n\n    /**\n      * @dev voteStake return the state for a given proposal\n      * @param _proposalId the ID of the proposal\n      * @return ProposalState proposal state\n    */\n    function state(bytes32 _proposalId) external view returns(ProposalState) {\n        return proposals[_proposalId].state;\n    }\n\n   /**\n    * @dev isAbstainAllow returns if the voting machine allow abstain (0)\n    * @return bool true or false\n    */\n    function isAbstainAllow() external pure returns(bool) {\n        return false;\n    }\n\n    /**\n     * @dev getAllowedRangeOfChoices returns the allowed range of choices for a voting machine.\n     * @return min - minimum number of choices\n               max - maximum number of choices\n     */\n    function getAllowedRangeOfChoices() external pure returns(uint256 min, uint256 max) {\n        return (YES, NO);\n    }\n\n    /**\n     * @dev score return the proposal score\n     * @param _proposalId the ID of the proposal\n     * @return uint256 proposal score.\n     */\n    function score(bytes32 _proposalId) public view returns(uint256) {\n        return  _score(_proposalId);\n    }\n}\n",
  "sourcePath": "@daostack/infra/contracts/votingMachines/GenesisProtocol.sol",
  "ast": {
    "absolutePath": "@daostack/infra/contracts/votingMachines/GenesisProtocol.sol",
    "exportedSymbols": {
      "GenesisProtocol": [
        12478
      ]
    },
    "id": 12479,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11987,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:56"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
        "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
        "id": 11988,
        "nodeType": "ImportDirective",
        "scope": 12479,
        "sourceUnit": 15640,
        "src": "25:64:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/infra/contracts/votingMachines/GenesisProtocolLogic.sol",
        "file": "./GenesisProtocolLogic.sol",
        "id": 11989,
        "nodeType": "ImportDirective",
        "scope": 12479,
        "sourceUnit": 15048,
        "src": "90:36:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11990,
              "name": "IntVoteInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15182,
              "src": "248:16:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IntVoteInterface_$15182",
                "typeString": "contract IntVoteInterface"
              }
            },
            "id": 11991,
            "nodeType": "InheritanceSpecifier",
            "src": "248:16:56"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11992,
              "name": "GenesisProtocolLogic",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15047,
              "src": "266:20:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GenesisProtocolLogic_$15047",
                "typeString": "contract GenesisProtocolLogic"
              }
            },
            "id": 11993,
            "nodeType": "InheritanceSpecifier",
            "src": "266:20:56"
          }
        ],
        "contractDependencies": [
          15047,
          15182
        ],
        "contractKind": "contract",
        "documentation": "@title GenesisProtocol implementation -an organization's voting machine scheme.",
        "fullyImplemented": true,
        "id": 12478,
        "linearizedBaseContracts": [
          12478,
          15047,
          15182
        ],
        "name": "GenesisProtocol",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 11996,
            "libraryName": {
              "contractScope": null,
              "id": 11994,
              "name": "ECDSA",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15639,
              "src": "299:5:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ECDSA_$15639",
                "typeString": "library ECDSA"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "293:24:56",
            "typeName": {
              "id": 11995,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "309:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "constant": true,
            "id": 12008,
            "name": "DELEGATION_HASH_EIP712",
            "nodeType": "VariableDeclaration",
            "scope": 12478,
            "src": "441:220:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 11997,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "441:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "hexValue": "616464726573732047656e6573697350726f746f636f6c41646472657373",
                      "id": 12001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "526:32:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_f6f81c79222251f266116add8ba75554a893ee5a90e2827df720a8738b6852ea",
                        "typeString": "literal_string \"address GenesisProtocolAddress\""
                      },
                      "value": "address GenesisProtocolAddress"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "627974657333322050726f706f73616c4964",
                      "id": 12002,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "564:20:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c82636388059bdf5f5ea03cfec7d8e327d93cc6aaa4cd8e5544d7950722aea62",
                        "typeString": "literal_string \"bytes32 ProposalId\""
                      },
                      "value": "bytes32 ProposalId"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e7432353620566f7465",
                      "id": 12003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "590:14:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_5b7c3f5ffe3403c4b459a64b441be5b523982a2df65457e729fee531305984ff",
                        "typeString": "literal_string \"uint256 Vote\""
                      },
                      "value": "uint256 Vote"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e7432353620416d6f756e74546f5374616b65",
                      "id": 12004,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "610:23:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_eaeb9db97e42ac65bdd1048a940a8f71fc1af8b56d16e6cd3de10e163148977c",
                        "typeString": "literal_string \"uint256 AmountToStake\""
                      },
                      "value": "uint256 AmountToStake"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e74323536204e6f6e6365",
                      "id": 12005,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "639:15:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_f461d9cb6c7bbc73c9b53173ca291dd54af24fcc1e3e4e673a2da79ed63c9b73",
                        "typeString": "literal_string \"uint256 Nonce\""
                      },
                      "value": "uint256 Nonce"
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_stringliteral_f6f81c79222251f266116add8ba75554a893ee5a90e2827df720a8738b6852ea",
                        "typeString": "literal_string \"address GenesisProtocolAddress\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_c82636388059bdf5f5ea03cfec7d8e327d93cc6aaa4cd8e5544d7950722aea62",
                        "typeString": "literal_string \"bytes32 ProposalId\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_5b7c3f5ffe3403c4b459a64b441be5b523982a2df65457e729fee531305984ff",
                        "typeString": "literal_string \"uint256 Vote\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_eaeb9db97e42ac65bdd1048a940a8f71fc1af8b56d16e6cd3de10e163148977c",
                        "typeString": "literal_string \"uint256 AmountToStake\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_f461d9cb6c7bbc73c9b53173ca291dd54af24fcc1e3e4e673a2da79ed63c9b73",
                        "typeString": "literal_string \"uint256 Nonce\""
                      }
                    ],
                    "expression": {
                      "argumentTypes": null,
                      "id": 11999,
                      "name": "abi",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16769,
                      "src": "504:3:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_abi",
                        "typeString": "abi"
                      }
                    },
                    "id": 12000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "encodePacked",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "504:16:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                      "typeString": "function () pure returns (bytes memory)"
                    }
                  },
                  "id": 12006,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "504:156:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                ],
                "id": 11998,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 16776,
                "src": "494:9:56",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 12007,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "494:167:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12012,
            "name": "stakesNonce",
            "nodeType": "VariableDeclaration",
            "scope": 12478,
            "src": "668:44:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 12011,
              "keyType": {
                "id": 12009,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "676:7:56",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "668:25:56",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 12010,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "685:7:56",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12020,
              "nodeType": "Block",
              "src": "908:7:56",
              "statements": []
            },
            "documentation": "@dev Constructor",
            "id": 12021,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12017,
                    "name": "_stakingToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12014,
                    "src": "893:13:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$16748",
                      "typeString": "contract IERC20"
                    }
                  }
                ],
                "id": 12018,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12016,
                  "name": "GenesisProtocolLogic",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 15047,
                  "src": "872:20:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_GenesisProtocolLogic_$15047_$",
                    "typeString": "type(contract GenesisProtocolLogic)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "872:35:56"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12015,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12014,
                  "name": "_stakingToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 12021,
                  "src": "786:20:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$16748",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 12013,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 16748,
                    "src": "786:6:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$16748",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "785:22:56"
            },
            "returnParameters": {
              "id": 12019,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "908:0:56"
            },
            "scope": 12478,
            "src": "774:141:56",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12040,
              "nodeType": "Block",
              "src": "1278:71:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12033,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12023,
                        "src": "1302:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12034,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12025,
                        "src": "1315:5:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12035,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12027,
                        "src": "1322:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 12036,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "1331:3:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1331:10:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 12032,
                      "name": "_stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14682,
                      "src": "1295:6:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint256,uint256,address) returns (bool)"
                      }
                    },
                    "id": 12038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1295:47:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12031,
                  "id": 12039,
                  "nodeType": "Return",
                  "src": "1288:54:56"
                }
              ]
            },
            "documentation": "@dev staking function\n@param _proposalId id of the proposal\n@param _vote  NO(2) or YES(1).\n@param _amount the betting amount\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 12041,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stake",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12023,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12041,
                  "src": "1202:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12022,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1202:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12025,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 12041,
                  "src": "1223:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12024,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1223:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12027,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12041,
                  "src": "1238:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12026,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1238:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1201:53:56"
            },
            "returnParameters": {
              "id": 12031,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12030,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12041,
                  "src": "1272:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12029,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1272:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1271:6:56"
            },
            "scope": 12478,
            "src": "1187:162:56",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12147,
              "nodeType": "Block",
              "src": "2212:1257:56",
              "statements": [
                {
                  "assignments": [
                    12059
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12059,
                      "name": "delegationDigest",
                      "nodeType": "VariableDeclaration",
                      "scope": 12147,
                      "src": "2269:24:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 12058,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2269:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12060,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2269:24:56"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 12061,
                      "name": "_signatureType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12051,
                      "src": "2307:14:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 12062,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2325:1:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "2307:19:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 12103,
                    "nodeType": "Block",
                    "src": "2745:315:56",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 12101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 12086,
                            "name": "delegationDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12059,
                            "src": "2759:16:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 12091,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 16844,
                                            "src": "2863:4:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_GenesisProtocol_$12478",
                                              "typeString": "contract GenesisProtocol"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_GenesisProtocol_$12478",
                                              "typeString": "contract GenesisProtocol"
                                            }
                                          ],
                                          "id": 12090,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "2855:7:56",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": "address"
                                        },
                                        "id": 12092,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2855:13:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 12093,
                                        "name": "_proposalId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12043,
                                        "src": "2894:11:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 12094,
                                        "name": "_vote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12045,
                                        "src": "2931:5:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 12095,
                                        "name": "_amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12047,
                                        "src": "2962:7:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 12096,
                                        "name": "_nonce",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12049,
                                        "src": "2995:6:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 12088,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 16769,
                                        "src": "2813:3:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 12089,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "encodePacked",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "2813:16:56",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 12097,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2813:189:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 12087,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16776,
                                  "src": "2778:9:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 12098,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2778:246:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 12099,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toEthSignedMessageHash",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 15638,
                              "src": "2778:269:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                                "typeString": "function (bytes32) pure returns (bytes32)"
                              }
                            },
                            "id": 12100,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2778:271:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2759:290:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 12102,
                        "nodeType": "ExpressionStatement",
                        "src": "2759:290:56"
                      }
                    ]
                  },
                  "id": 12104,
                  "nodeType": "IfStatement",
                  "src": "2303:757:56",
                  "trueBody": {
                    "id": 12085,
                    "nodeType": "Block",
                    "src": "2328:411:56",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 12083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 12064,
                            "name": "delegationDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12059,
                            "src": "2342:16:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 12068,
                                    "name": "DELEGATION_HASH_EIP712",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12008,
                                    "src": "2426:22:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 12073,
                                                "name": "this",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 16844,
                                                "src": "2535:4:56",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_GenesisProtocol_$12478",
                                                  "typeString": "contract GenesisProtocol"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_contract$_GenesisProtocol_$12478",
                                                  "typeString": "contract GenesisProtocol"
                                                }
                                              ],
                                              "id": 12072,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "2527:7:56",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": "address"
                                            },
                                            "id": 12074,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2527:13:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 12075,
                                            "name": "_proposalId",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12043,
                                            "src": "2566:11:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 12076,
                                            "name": "_vote",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12045,
                                            "src": "2603:5:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 12077,
                                            "name": "_amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12047,
                                            "src": "2634:7:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 12078,
                                            "name": "_nonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12049,
                                            "src": "2667:6:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 12070,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 16769,
                                            "src": "2485:3:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 12071,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "2485:16:56",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 12079,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2485:189:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 12069,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 16776,
                                      "src": "2450:9:56",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 12080,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2450:246:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 12066,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16769,
                                    "src": "2388:3:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 12067,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2388:16:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 12081,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2388:326:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 12065,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16776,
                              "src": "2361:9:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 12082,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2361:367:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2342:386:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 12084,
                        "nodeType": "ExpressionStatement",
                        "src": "2342:386:56"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    12106
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12106,
                      "name": "staker",
                      "nodeType": "VariableDeclaration",
                      "scope": 12147,
                      "src": "3069:14:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 12105,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3069:7:56",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12111,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12109,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12053,
                        "src": "3111:10:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 12107,
                        "name": "delegationDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12059,
                        "src": "3086:16:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 12108,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15622,
                      "src": "3086:24:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 12110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3086:36:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3069:53:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 12117,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 12113,
                          "name": "staker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12106,
                          "src": "3245:6:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 12115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3263: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": 12114,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3255:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 12116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3255:10:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3245:20:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7374616b657220616464726573732063616e6e6f742062652030",
                        "id": 12118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3267:28:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3430815440156fda2758a526d662027048e6496bf994b390c4dc85badccdf423",
                          "typeString": "literal_string \"staker address cannot be 0\""
                        },
                        "value": "staker address cannot be 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3430815440156fda2758a526d662027048e6496bf994b390c4dc85badccdf423",
                          "typeString": "literal_string \"staker address cannot be 0\""
                        }
                      ],
                      "id": 12112,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16786,
                      "src": "3237:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3237:59:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12120,
                  "nodeType": "ExpressionStatement",
                  "src": "3237:59:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 12126,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 12122,
                            "name": "stakesNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12012,
                            "src": "3314:11:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 12124,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 12123,
                            "name": "staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12106,
                            "src": "3326:6:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3314:19:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 12125,
                          "name": "_nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12049,
                          "src": "3337:6:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3314:29:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12121,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "3306:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3306:38:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12128,
                  "nodeType": "ExpressionStatement",
                  "src": "3306:38:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12129,
                        "name": "stakesNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12012,
                        "src": "3354:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 12131,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 12130,
                        "name": "staker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12106,
                        "src": "3366:6:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3354:19:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 12136,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3400: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,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 12132,
                            "name": "stakesNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12012,
                            "src": "3376:11:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 12134,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 12133,
                            "name": "staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12106,
                            "src": "3388:6:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3376:19:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 12135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 15898,
                        "src": "3376:23: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": 12137,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3376:26:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3354:48:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12139,
                  "nodeType": "ExpressionStatement",
                  "src": "3354:48:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12141,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12043,
                        "src": "3426:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12142,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12045,
                        "src": "3439:5:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12143,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12047,
                        "src": "3446:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12144,
                        "name": "staker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12106,
                        "src": "3455:6:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12140,
                      "name": "_stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14682,
                      "src": "3419:6:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint256,uint256,address) returns (bool)"
                      }
                    },
                    "id": 12145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3419:43:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12057,
                  "id": 12146,
                  "nodeType": "Return",
                  "src": "3412:50:56"
                }
              ]
            },
            "documentation": "@dev stakeWithSignature function\n@param _proposalId id of the proposal\n@param _vote  NO(2) or YES(1).\n@param _amount the betting amount\n@param _nonce nonce value ,it is part of the signature to ensure that\na signature can be received only once.\n@param _signatureType signature type\n1 - for web3.eth.sign\n2 - for eth_signTypedData according to EIP #712.\n@param _signature  - signed data by the staker\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 12148,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stakeWithSignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12043,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "1996:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12042,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1996:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12045,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2025:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12044,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2025:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12047,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2048:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12046,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2048:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12049,
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2073:14:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12048,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2073:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12051,
                  "name": "_signatureType",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2097:22:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12050,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2097:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12053,
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2129:25:56",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 12052,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2129:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1986:178:56"
            },
            "returnParameters": {
              "id": 12057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12056,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2198:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12055,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2197:6:56"
            },
            "scope": 12478,
            "src": "1959:1510:56",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12213,
              "nodeType": "Block",
              "src": "3981:415:56",
              "statements": [
                {
                  "assignments": [
                    12165
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12165,
                      "name": "proposal",
                      "nodeType": "VariableDeclaration",
                      "scope": 12213,
                      "src": "3991:25:56",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$12613_storage_ptr",
                        "typeString": "struct GenesisProtocolLogic.Proposal"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 12164,
                        "name": "Proposal",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12613,
                        "src": "3991:8:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$12613_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Proposal"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12169,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 12166,
                      "name": "proposals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12689,
                      "src": "4019:9:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                        "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                      }
                    },
                    "id": 12168,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 12167,
                      "name": "_proposalId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12150,
                      "src": "4029:11:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4019:22:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                      "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3991:50:56"
                },
                {
                  "assignments": [
                    12171
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12171,
                      "name": "params",
                      "nodeType": "VariableDeclaration",
                      "scope": 12213,
                      "src": "4051:24:56",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Parameters_$12548_memory_ptr",
                        "typeString": "struct GenesisProtocolLogic.Parameters"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 12170,
                        "name": "Parameters",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12548,
                        "src": "4051:10:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Parameters_$12548_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Parameters"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12176,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 12172,
                      "name": "parameters",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12685,
                      "src": "4078:10:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Parameters_$12548_storage_$",
                        "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Parameters storage ref)"
                      }
                    },
                    "id": 12175,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 12173,
                        "name": "proposal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12165,
                        "src": "4089:8:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$12613_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage pointer"
                        }
                      },
                      "id": 12174,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paramsHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12576,
                      "src": "4089:19:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4078:31:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Parameters_$12548_storage",
                      "typeString": "struct GenesisProtocolLogic.Parameters storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4051:58:56"
                },
                {
                  "assignments": [
                    12178
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12178,
                      "name": "voter",
                      "nodeType": "VariableDeclaration",
                      "scope": 12213,
                      "src": "4119:13:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 12177,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4119:7:56",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12179,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4119:13:56"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 12185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 12180,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12171,
                        "src": "4146:6:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Parameters_$12548_memory_ptr",
                          "typeString": "struct GenesisProtocolLogic.Parameters memory"
                        }
                      },
                      "id": 12181,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "voteOnBehalf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12547,
                      "src": "4146:19:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 12183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4177: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": 12182,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4169:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 12184,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4169:10:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "4146:33:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 12204,
                    "nodeType": "Block",
                    "src": "4282:43:56",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 12202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 12199,
                            "name": "voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12178,
                            "src": "4296:5:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 12200,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16782,
                              "src": "4304:3:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 12201,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4304:10:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "4296:18:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 12203,
                        "nodeType": "ExpressionStatement",
                        "src": "4296:18:56"
                      }
                    ]
                  },
                  "id": 12205,
                  "nodeType": "IfStatement",
                  "src": "4142:183:56",
                  "trueBody": {
                    "id": 12198,
                    "nodeType": "Block",
                    "src": "4181:95:56",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 12191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12187,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "4203:3:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12188,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4203:10:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12189,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12171,
                                  "src": "4217:6:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Parameters_$12548_memory_ptr",
                                    "typeString": "struct GenesisProtocolLogic.Parameters memory"
                                  }
                                },
                                "id": 12190,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "voteOnBehalf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 12547,
                                "src": "4217:19:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "4203:33:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 12186,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16785,
                              16786
                            ],
                            "referencedDeclaration": 16785,
                            "src": "4195:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 12192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4195:42:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 12193,
                        "nodeType": "ExpressionStatement",
                        "src": "4195:42:56"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 12196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 12194,
                            "name": "voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12178,
                            "src": "4251:5:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 12195,
                            "name": "_voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12156,
                            "src": "4259:6:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4251:14:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 12197,
                        "nodeType": "ExpressionStatement",
                        "src": "4251:14:56"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12207,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12150,
                        "src": "4354:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12208,
                        "name": "voter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12178,
                        "src": "4367:5:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12209,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12152,
                        "src": "4374:5:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12210,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12154,
                        "src": "4381:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12206,
                      "name": "internalVote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14977,
                      "src": "4341:12:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (bytes32,address,uint256,uint256) returns (bool)"
                      }
                    },
                    "id": 12211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4341:48:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12163,
                  "id": 12212,
                  "nodeType": "Return",
                  "src": "4334:55:56"
                }
              ]
            },
            "documentation": "@dev voting function\n@param _proposalId id of the proposal\n@param _vote NO(2) or YES(1).\n@param _amount the reputation amount to vote with . if _amount == 0 it will use all voter reputation.\n@param _voter voter address\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 12214,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12159,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12150,
                    "src": "3950:11:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 12160,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12158,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12756,
                  "src": "3942:7:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3942:20:56"
              }
            ],
            "name": "vote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12150,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12214,
                  "src": "3856:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12149,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3856:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12152,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 12214,
                  "src": "3877:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12151,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3877:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12154,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12214,
                  "src": "3892:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3892:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12156,
                  "name": "_voter",
                  "nodeType": "VariableDeclaration",
                  "scope": 12214,
                  "src": "3909:14:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12155,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3909:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3855:69:56"
            },
            "returnParameters": {
              "id": 12163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12162,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12214,
                  "src": "3975:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12161,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3975:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3974:6:56"
            },
            "scope": 12478,
            "src": "3842:554:56",
            "stateMutability": "nonpayable",
            "superFunction": 15141,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12223,
              "nodeType": "Block",
              "src": "4683:52:56",
              "statements": [
                {
                  "expression": null,
                  "functionReturnParameters": 12221,
                  "id": 12222,
                  "nodeType": "Return",
                  "src": "4722:7:56"
                }
              ]
            },
            "documentation": "@dev Cancel the vote of the msg.sender.\ncancel vote is not allow in genesisProtocol so this function doing nothing.\nThis function is here in order to comply to the IntVoteInterface .",
            "id": 12224,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12219,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12216,
                    "src": "4670:11:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 12220,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12218,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12756,
                  "src": "4662:7:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4662:20:56"
              }
            ],
            "name": "cancelVote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12217,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12216,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12224,
                  "src": "4632:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12215,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4632:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4631:21:56"
            },
            "returnParameters": {
              "id": 12221,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4683:0:56"
            },
            "scope": 12478,
            "src": "4612:123:56",
            "stateMutability": "nonpayable",
            "superFunction": 15146,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12238,
              "nodeType": "Block",
              "src": "5081:45:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12235,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12226,
                        "src": "5107:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 12234,
                      "name": "_execute",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14496,
                      "src": "5098:8:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (bytes32) returns (bool)"
                      }
                    },
                    "id": 12236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5098:21:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12233,
                  "id": 12237,
                  "nodeType": "Return",
                  "src": "5091:28:56"
                }
              ]
            },
            "documentation": "@dev execute check if the proposal has been decided, and if so, execute the proposal\n@param _proposalId the id of the proposal\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 12239,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12229,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12226,
                    "src": "5054:11:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 12230,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12228,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12756,
                  "src": "5046:7:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5046:20:56"
              }
            ],
            "name": "execute",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12226,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12239,
                  "src": "5016:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12225,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5016:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5015:21:56"
            },
            "returnParameters": {
              "id": 12233,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12232,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12239,
                  "src": "5075:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12231,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5075:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5074:6:56"
            },
            "scope": 12478,
            "src": "4999:127:56",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12248,
              "nodeType": "Block",
              "src": "5353:38:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12246,
                    "name": "NUM_OF_CHOICES",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12704,
                    "src": "5370:14:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12245,
                  "id": 12247,
                  "nodeType": "Return",
                  "src": "5363:21:56"
                }
              ]
            },
            "documentation": "@dev getNumberOfChoices returns the number of choices possible in this proposal\n@return uint256 that contains number of choices",
            "id": 12249,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNumberOfChoices",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12241,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12249,
                  "src": "5313:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12240,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5313:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5312:9:56"
            },
            "returnParameters": {
              "id": 12245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12244,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12249,
                  "src": "5344:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12243,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5344:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5343:9:56"
            },
            "scope": 12478,
            "src": "5285:106:56",
            "stateMutability": "view",
            "superFunction": 15153,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12263,
              "nodeType": "Block",
              "src": "5654:52:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12258,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12689,
                        "src": "5671:9:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 12260,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 12259,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12251,
                        "src": "5681:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5671:22:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 12261,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "times",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12590,
                    "src": "5671:28:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$3_storage",
                      "typeString": "uint256[3] storage ref"
                    }
                  },
                  "functionReturnParameters": 12257,
                  "id": 12262,
                  "nodeType": "Return",
                  "src": "5664:35:56"
                }
              ]
            },
            "documentation": "@dev getProposalTimes returns proposals times variables.\n@param _proposalId id of the proposal\n@return proposals times array",
            "id": 12264,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProposalTimes",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12252,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12251,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12264,
                  "src": "5589:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12250,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5589:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5588:21:56"
            },
            "returnParameters": {
              "id": 12257,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12256,
                  "name": "times",
                  "nodeType": "VariableDeclaration",
                  "scope": 12264,
                  "src": "5632:20:56",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr",
                    "typeString": "uint256[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 12253,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "5632:4:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 12255,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 12254,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5637:1:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5632:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$3_storage_ptr",
                      "typeString": "uint256[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5631:22:56"
            },
            "scope": 12478,
            "src": "5563:143:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12290,
              "nodeType": "Block",
              "src": "6155:122:56",
              "statements": [
                {
                  "assignments": [
                    12276
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12276,
                      "name": "voter",
                      "nodeType": "VariableDeclaration",
                      "scope": 12290,
                      "src": "6165:18:56",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Voter_$12555_memory_ptr",
                        "typeString": "struct GenesisProtocolLogic.Voter"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 12275,
                        "name": "Voter",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12555,
                        "src": "6165:5:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Voter_$12555_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Voter"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12283,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 12277,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12689,
                          "src": "6186:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 12279,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12278,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12266,
                          "src": "6196:11:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6186:22:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 12280,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "voters",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12604,
                      "src": "6186:29:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Voter_$12555_storage_$",
                        "typeString": "mapping(address => struct GenesisProtocolLogic.Voter storage ref)"
                      }
                    },
                    "id": 12282,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 12281,
                      "name": "_voter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12268,
                      "src": "6216:6:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6186:37:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Voter_$12555_storage",
                      "typeString": "struct GenesisProtocolLogic.Voter storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6165:58:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 12284,
                          "name": "voter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12276,
                          "src": "6241:5:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Voter_$12555_memory_ptr",
                            "typeString": "struct GenesisProtocolLogic.Voter memory"
                          }
                        },
                        "id": 12285,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "vote",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12550,
                        "src": "6241:10:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 12286,
                          "name": "voter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12276,
                          "src": "6253:5:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Voter_$12555_memory_ptr",
                            "typeString": "struct GenesisProtocolLogic.Voter memory"
                          }
                        },
                        "id": 12287,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reputation",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12552,
                        "src": "6253:16:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 12288,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "6240:30:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 12274,
                  "id": 12289,
                  "nodeType": "Return",
                  "src": "6233:37:56"
                }
              ]
            },
            "documentation": "@dev voteInfo returns the vote and the amount of reputation of the user committed to this proposal\n@param _proposalId the ID of the proposal\n@param _voter the address of the voter\n@return uint256 vote - the voters vote\n       uint256 reputation - amount of reputation committed by _voter to _proposalId",
            "id": 12291,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteInfo",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12269,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12266,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12291,
                  "src": "6084:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12265,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6084:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12268,
                  "name": "_voter",
                  "nodeType": "VariableDeclaration",
                  "scope": 12291,
                  "src": "6105:14:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12267,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6105:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6083:37:56"
            },
            "returnParameters": {
              "id": 12274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12271,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12291,
                  "src": "6143:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12270,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6143:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12273,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12291,
                  "src": "6149:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12272,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6149:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6142:12:56"
            },
            "scope": 12478,
            "src": "6066:211:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12307,
              "nodeType": "Block",
              "src": "6621:61:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 12300,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12689,
                          "src": "6638:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 12302,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12301,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12293,
                          "src": "6648:11:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6638:22:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 12303,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "votes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12596,
                      "src": "6638:28:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 12305,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 12304,
                      "name": "_choice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12295,
                      "src": "6667:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6638:37:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12299,
                  "id": 12306,
                  "nodeType": "Return",
                  "src": "6631:44:56"
                }
              ]
            },
            "documentation": "@dev voteStatus returns the reputation voted for a proposal for a specific voting choice.\n@param _proposalId the ID of the proposal\n@param _choice the index in the\n@return voted reputation for the given choice",
            "id": 12308,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12296,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12293,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12308,
                  "src": "6552:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12292,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6552:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12295,
                  "name": "_choice",
                  "nodeType": "VariableDeclaration",
                  "scope": 12308,
                  "src": "6573:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12294,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6573:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6551:38:56"
            },
            "returnParameters": {
              "id": 12299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12298,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12308,
                  "src": "6612:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6612:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6611:9:56"
            },
            "scope": 12478,
            "src": "6532:150:56",
            "stateMutability": "view",
            "superFunction": 15169,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12319,
              "nodeType": "Block",
              "src": "6906:47:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12316,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12310,
                        "src": "6934:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 12315,
                      "name": "_isVotable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15046,
                      "src": "6923:10:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (bytes32) view returns (bool)"
                      }
                    },
                    "id": 12317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6923:23:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12314,
                  "id": 12318,
                  "nodeType": "Return",
                  "src": "6916:30:56"
                }
              ]
            },
            "documentation": "@dev isVotable check if the proposal is votable\n@param _proposalId the ID of the proposal\n@return bool true or false",
            "id": 12320,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isVotable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12311,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12310,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12320,
                  "src": "6857:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12309,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6857:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6856:21:56"
            },
            "returnParameters": {
              "id": 12314,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12313,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12320,
                  "src": "6900:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12312,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6900:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6899:6:56"
            },
            "scope": 12478,
            "src": "6838:115:56",
            "stateMutability": "view",
            "superFunction": 15160,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12359,
              "nodeType": "Block",
              "src": "7366:258:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 12333,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12689,
                              "src": "7401:9:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 12335,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 12334,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12322,
                              "src": "7411:11:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7401:22:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 12336,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "preBoostedVotes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12600,
                          "src": "7401:38:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 12338,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12337,
                          "name": "YES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12710,
                          "src": "7440:3:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7401:43:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 12339,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12689,
                              "src": "7462:9:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 12341,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 12340,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12322,
                              "src": "7472:11:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7462:22:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 12342,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "preBoostedVotes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12600,
                          "src": "7462:38:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 12344,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12343,
                          "name": "NO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12707,
                          "src": "7501:2:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7462:42:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 12345,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12689,
                              "src": "7522:9:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 12347,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 12346,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12322,
                              "src": "7532:11:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7522:22:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 12348,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "stakes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12608,
                          "src": "7522:29:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 12350,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12349,
                          "name": "YES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12710,
                          "src": "7552:3:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7522:34:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 12351,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12689,
                              "src": "7574:9:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 12353,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 12352,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12322,
                              "src": "7584:11:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7574:22:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 12354,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "stakes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12608,
                          "src": "7574:29:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 12356,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12355,
                          "name": "NO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12707,
                          "src": "7604:2:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7574:33:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 12357,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "7383:234:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 12332,
                  "id": 12358,
                  "nodeType": "Return",
                  "src": "7376:241:56"
                }
              ]
            },
            "documentation": "@dev proposalStatus return the total votes and stakes for a given proposal\n@param _proposalId the ID of the proposal\n@return uint256 preBoostedVotes YES\n@return uint256 preBoostedVotes NO\n@return uint256 total stakes YES\n@return uint256 total stakes NO",
            "id": 12360,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proposalStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12323,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12322,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12360,
                  "src": "7287:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12321,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7287:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7286:21:56"
            },
            "returnParameters": {
              "id": 12332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12325,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12360,
                  "src": "7330:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12324,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7330:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12327,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12360,
                  "src": "7339:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12326,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7339:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12329,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12360,
                  "src": "7348:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12328,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7348:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12331,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12360,
                  "src": "7357:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12330,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7357:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7329:36:56"
            },
            "scope": 12478,
            "src": "7263:361:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12373,
              "nodeType": "Block",
              "src": "7904:63:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 12367,
                            "name": "proposals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12689,
                            "src": "7922:9:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                              "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                            }
                          },
                          "id": 12369,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 12368,
                            "name": "_proposalId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12362,
                            "src": "7932:11:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7922:22:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                            "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                          }
                        },
                        "id": 12370,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "organizationId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12564,
                        "src": "7922:37:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "id": 12371,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "7921:39:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 12366,
                  "id": 12372,
                  "nodeType": "Return",
                  "src": "7914:46:56"
                }
              ]
            },
            "documentation": "@dev getProposalOrganization return the organizationId for a given proposal\n@param _proposalId the ID of the proposal\n@return bytes32 organization identifier",
            "id": 12374,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProposalOrganization",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12362,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12374,
                  "src": "7852:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12361,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7852:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7851:21:56"
            },
            "returnParameters": {
              "id": 12366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12365,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12374,
                  "src": "7895:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12364,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7895:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7894:9:56"
            },
            "scope": 12478,
            "src": "7819:148:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12401,
              "nodeType": "Block",
              "src": "8321:118:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12385,
                                "name": "proposals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12689,
                                "src": "8339:9:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                  "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                                }
                              },
                              "id": 12387,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 12386,
                                "name": "_proposalId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12376,
                                "src": "8349:11:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8339:22:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                                "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                              }
                            },
                            "id": 12388,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "stakers",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12612,
                            "src": "8339:30:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Staker_$12562_storage_$",
                              "typeString": "mapping(address => struct GenesisProtocolLogic.Staker storage ref)"
                            }
                          },
                          "id": 12390,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 12389,
                            "name": "_staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12378,
                            "src": "8370:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8339:39:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Staker_$12562_storage",
                            "typeString": "struct GenesisProtocolLogic.Staker storage ref"
                          }
                        },
                        "id": 12391,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "vote",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12557,
                        "src": "8339:44:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12392,
                                "name": "proposals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12689,
                                "src": "8385:9:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                  "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                                }
                              },
                              "id": 12394,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 12393,
                                "name": "_proposalId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12376,
                                "src": "8395:11:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8385:22:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                                "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                              }
                            },
                            "id": 12395,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "stakers",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12612,
                            "src": "8385:30:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Staker_$12562_storage_$",
                              "typeString": "mapping(address => struct GenesisProtocolLogic.Staker storage ref)"
                            }
                          },
                          "id": 12397,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 12396,
                            "name": "_staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12378,
                            "src": "8416:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8385:39:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Staker_$12562_storage",
                            "typeString": "struct GenesisProtocolLogic.Staker storage ref"
                          }
                        },
                        "id": 12398,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12559,
                        "src": "8385:46:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 12399,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "8338:94:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 12384,
                  "id": 12400,
                  "nodeType": "Return",
                  "src": "8331:101:56"
                }
              ]
            },
            "documentation": "@dev getStaker return the vote and stake amount for a given proposal and staker\n@param _proposalId the ID of the proposal\n@param _staker staker address\n@return uint256 vote\n@return uint256 amount",
            "id": 12402,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getStaker",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12376,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12402,
                  "src": "8243:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12375,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8243:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12378,
                  "name": "_staker",
                  "nodeType": "VariableDeclaration",
                  "scope": 12402,
                  "src": "8264:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12377,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8264:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8242:38:56"
            },
            "returnParameters": {
              "id": 12384,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12381,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12402,
                  "src": "8303:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12380,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8303:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12383,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12402,
                  "src": "8312:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12382,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8312:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8302:18:56"
            },
            "scope": 12478,
            "src": "8224:215:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12418,
              "nodeType": "Block",
              "src": "8744:60:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 12411,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12689,
                          "src": "8761:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 12413,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12412,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12404,
                          "src": "8771:11:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8761:22:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 12414,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stakes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12608,
                      "src": "8761:29:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 12416,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 12415,
                      "name": "_vote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12406,
                      "src": "8791:5:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8761:36:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12410,
                  "id": 12417,
                  "nodeType": "Return",
                  "src": "8754:43:56"
                }
              ]
            },
            "documentation": "@dev voteStake return the amount stakes for a given proposal and vote\n@param _proposalId the ID of the proposal\n@param _vote vote number\n@return uint256 stake amount",
            "id": 12419,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteStake",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12407,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12404,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12419,
                  "src": "8677:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12403,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8677:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12406,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 12419,
                  "src": "8698:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12405,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8698:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8676:36:56"
            },
            "returnParameters": {
              "id": 12410,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12409,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12419,
                  "src": "8735:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12408,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8735:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8734:9:56"
            },
            "scope": 12478,
            "src": "8658:146:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12431,
              "nodeType": "Block",
              "src": "9043:58:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12426,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12689,
                        "src": "9060:9:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 12428,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 12427,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12421,
                        "src": "9070:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9060:22:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 12429,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "winningVote",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12570,
                    "src": "9060:34:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12425,
                  "id": 12430,
                  "nodeType": "Return",
                  "src": "9053:41:56"
                }
              ]
            },
            "documentation": "@dev voteStake return the winningVote for a given proposal\n@param _proposalId the ID of the proposal\n@return uint256 winningVote",
            "id": 12432,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "winningVote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12422,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12421,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12432,
                  "src": "8991:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12420,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8991:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8990:21:56"
            },
            "returnParameters": {
              "id": 12425,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12424,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12432,
                  "src": "9034:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12423,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9034:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9033:9:56"
            },
            "scope": 12478,
            "src": "8970:131:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12444,
              "nodeType": "Block",
              "src": "9351:52:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12439,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12689,
                        "src": "9368:9:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 12441,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 12440,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12434,
                        "src": "9378:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9368:22:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 12442,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "state",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12568,
                    "src": "9368:28:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ProposalState_$12514",
                      "typeString": "enum GenesisProtocolLogic.ProposalState"
                    }
                  },
                  "functionReturnParameters": 12438,
                  "id": 12443,
                  "nodeType": "Return",
                  "src": "9361:35:56"
                }
              ]
            },
            "documentation": "@dev voteStake return the state for a given proposal\n@param _proposalId the ID of the proposal\n@return ProposalState proposal state",
            "id": 12445,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "state",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12434,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12445,
                  "src": "9293:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12433,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9293:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9292:21:56"
            },
            "returnParameters": {
              "id": 12438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12437,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12445,
                  "src": "9336:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ProposalState_$12514",
                    "typeString": "enum GenesisProtocolLogic.ProposalState"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 12436,
                    "name": "ProposalState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12514,
                    "src": "9336:13:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ProposalState_$12514",
                      "typeString": "enum GenesisProtocolLogic.ProposalState"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9335:15:56"
            },
            "scope": 12478,
            "src": "9278:125:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12452,
              "nodeType": "Block",
              "src": "9584:29:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 12450,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9601:5:56",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 12449,
                  "id": 12451,
                  "nodeType": "Return",
                  "src": "9594:12:56"
                }
              ]
            },
            "documentation": "@dev isAbstainAllow returns if the voting machine allow abstain (0)\n@return bool true or false",
            "id": 12453,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAbstainAllow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12446,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9553:2:56"
            },
            "returnParameters": {
              "id": 12449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12448,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12453,
                  "src": "9578:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12447,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9578:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9577:6:56"
            },
            "scope": 12478,
            "src": "9530:83:56",
            "stateMutability": "pure",
            "superFunction": 15174,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12464,
              "nodeType": "Block",
              "src": "9909:33:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 12460,
                        "name": "YES",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12710,
                        "src": "9927:3:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12461,
                        "name": "NO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12707,
                        "src": "9932:2:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 12462,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "9926:9:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 12459,
                  "id": 12463,
                  "nodeType": "Return",
                  "src": "9919:16:56"
                }
              ]
            },
            "documentation": "@dev getAllowedRangeOfChoices returns the allowed range of choices for a voting machine.\n@return min - minimum number of choices\nmax - maximum number of choices",
            "id": 12465,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAllowedRangeOfChoices",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12454,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9858:2:56"
            },
            "returnParameters": {
              "id": 12459,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12456,
                  "name": "min",
                  "nodeType": "VariableDeclaration",
                  "scope": 12465,
                  "src": "9883:11:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9883:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12458,
                  "name": "max",
                  "nodeType": "VariableDeclaration",
                  "scope": 12465,
                  "src": "9896:11:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12457,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9896:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9882:26:56"
            },
            "scope": 12478,
            "src": "9825:117:56",
            "stateMutability": "pure",
            "superFunction": 15181,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12476,
              "nodeType": "Block",
              "src": "10161:44:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12473,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12467,
                        "src": "10186:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 12472,
                      "name": "_score",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15006,
                      "src": "10179:6:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (bytes32) view returns (uint256)"
                      }
                    },
                    "id": 12474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10179:19:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12471,
                  "id": 12475,
                  "nodeType": "Return",
                  "src": "10171:27:56"
                }
              ]
            },
            "documentation": "@dev score return the proposal score\n@param _proposalId the ID of the proposal\n@return uint256 proposal score.",
            "id": 12477,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "score",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12468,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12467,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12477,
                  "src": "10111:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12466,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10111:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10110:21:56"
            },
            "returnParameters": {
              "id": 12471,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12470,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12477,
                  "src": "10152:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12469,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10152:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10151:9:56"
            },
            "scope": 12478,
            "src": "10096:109:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 12479,
        "src": "220:9987:56"
      }
    ],
    "src": "0:10208:56"
  },
  "legacyAST": {
    "absolutePath": "@daostack/infra/contracts/votingMachines/GenesisProtocol.sol",
    "exportedSymbols": {
      "GenesisProtocol": [
        12478
      ]
    },
    "id": 12479,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11987,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:56"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
        "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
        "id": 11988,
        "nodeType": "ImportDirective",
        "scope": 12479,
        "sourceUnit": 15640,
        "src": "25:64:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/infra/contracts/votingMachines/GenesisProtocolLogic.sol",
        "file": "./GenesisProtocolLogic.sol",
        "id": 11989,
        "nodeType": "ImportDirective",
        "scope": 12479,
        "sourceUnit": 15048,
        "src": "90:36:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11990,
              "name": "IntVoteInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15182,
              "src": "248:16:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IntVoteInterface_$15182",
                "typeString": "contract IntVoteInterface"
              }
            },
            "id": 11991,
            "nodeType": "InheritanceSpecifier",
            "src": "248:16:56"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11992,
              "name": "GenesisProtocolLogic",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15047,
              "src": "266:20:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GenesisProtocolLogic_$15047",
                "typeString": "contract GenesisProtocolLogic"
              }
            },
            "id": 11993,
            "nodeType": "InheritanceSpecifier",
            "src": "266:20:56"
          }
        ],
        "contractDependencies": [
          15047,
          15182
        ],
        "contractKind": "contract",
        "documentation": "@title GenesisProtocol implementation -an organization's voting machine scheme.",
        "fullyImplemented": true,
        "id": 12478,
        "linearizedBaseContracts": [
          12478,
          15047,
          15182
        ],
        "name": "GenesisProtocol",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 11996,
            "libraryName": {
              "contractScope": null,
              "id": 11994,
              "name": "ECDSA",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 15639,
              "src": "299:5:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ECDSA_$15639",
                "typeString": "library ECDSA"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "293:24:56",
            "typeName": {
              "id": 11995,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "309:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "constant": true,
            "id": 12008,
            "name": "DELEGATION_HASH_EIP712",
            "nodeType": "VariableDeclaration",
            "scope": 12478,
            "src": "441:220:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 11997,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "441:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "hexValue": "616464726573732047656e6573697350726f746f636f6c41646472657373",
                      "id": 12001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "526:32:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_f6f81c79222251f266116add8ba75554a893ee5a90e2827df720a8738b6852ea",
                        "typeString": "literal_string \"address GenesisProtocolAddress\""
                      },
                      "value": "address GenesisProtocolAddress"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "627974657333322050726f706f73616c4964",
                      "id": 12002,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "564:20:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c82636388059bdf5f5ea03cfec7d8e327d93cc6aaa4cd8e5544d7950722aea62",
                        "typeString": "literal_string \"bytes32 ProposalId\""
                      },
                      "value": "bytes32 ProposalId"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e7432353620566f7465",
                      "id": 12003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "590:14:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_5b7c3f5ffe3403c4b459a64b441be5b523982a2df65457e729fee531305984ff",
                        "typeString": "literal_string \"uint256 Vote\""
                      },
                      "value": "uint256 Vote"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e7432353620416d6f756e74546f5374616b65",
                      "id": 12004,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "610:23:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_eaeb9db97e42ac65bdd1048a940a8f71fc1af8b56d16e6cd3de10e163148977c",
                        "typeString": "literal_string \"uint256 AmountToStake\""
                      },
                      "value": "uint256 AmountToStake"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e74323536204e6f6e6365",
                      "id": 12005,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "639:15:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_f461d9cb6c7bbc73c9b53173ca291dd54af24fcc1e3e4e673a2da79ed63c9b73",
                        "typeString": "literal_string \"uint256 Nonce\""
                      },
                      "value": "uint256 Nonce"
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_stringliteral_f6f81c79222251f266116add8ba75554a893ee5a90e2827df720a8738b6852ea",
                        "typeString": "literal_string \"address GenesisProtocolAddress\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_c82636388059bdf5f5ea03cfec7d8e327d93cc6aaa4cd8e5544d7950722aea62",
                        "typeString": "literal_string \"bytes32 ProposalId\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_5b7c3f5ffe3403c4b459a64b441be5b523982a2df65457e729fee531305984ff",
                        "typeString": "literal_string \"uint256 Vote\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_eaeb9db97e42ac65bdd1048a940a8f71fc1af8b56d16e6cd3de10e163148977c",
                        "typeString": "literal_string \"uint256 AmountToStake\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_f461d9cb6c7bbc73c9b53173ca291dd54af24fcc1e3e4e673a2da79ed63c9b73",
                        "typeString": "literal_string \"uint256 Nonce\""
                      }
                    ],
                    "expression": {
                      "argumentTypes": null,
                      "id": 11999,
                      "name": "abi",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16769,
                      "src": "504:3:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_abi",
                        "typeString": "abi"
                      }
                    },
                    "id": 12000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "encodePacked",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "504:16:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                      "typeString": "function () pure returns (bytes memory)"
                    }
                  },
                  "id": 12006,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "504:156:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                ],
                "id": 11998,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 16776,
                "src": "494:9:56",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 12007,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "494:167:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12012,
            "name": "stakesNonce",
            "nodeType": "VariableDeclaration",
            "scope": 12478,
            "src": "668:44:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 12011,
              "keyType": {
                "id": 12009,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "676:7:56",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "668:25:56",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 12010,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "685:7:56",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12020,
              "nodeType": "Block",
              "src": "908:7:56",
              "statements": []
            },
            "documentation": "@dev Constructor",
            "id": 12021,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12017,
                    "name": "_stakingToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12014,
                    "src": "893:13:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$16748",
                      "typeString": "contract IERC20"
                    }
                  }
                ],
                "id": 12018,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12016,
                  "name": "GenesisProtocolLogic",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 15047,
                  "src": "872:20:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_GenesisProtocolLogic_$15047_$",
                    "typeString": "type(contract GenesisProtocolLogic)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "872:35:56"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12015,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12014,
                  "name": "_stakingToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 12021,
                  "src": "786:20:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$16748",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 12013,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 16748,
                    "src": "786:6:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$16748",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "785:22:56"
            },
            "returnParameters": {
              "id": 12019,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "908:0:56"
            },
            "scope": 12478,
            "src": "774:141:56",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12040,
              "nodeType": "Block",
              "src": "1278:71:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12033,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12023,
                        "src": "1302:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12034,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12025,
                        "src": "1315:5:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12035,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12027,
                        "src": "1322:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 12036,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16782,
                          "src": "1331:3:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1331:10:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 12032,
                      "name": "_stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14682,
                      "src": "1295:6:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint256,uint256,address) returns (bool)"
                      }
                    },
                    "id": 12038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1295:47:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12031,
                  "id": 12039,
                  "nodeType": "Return",
                  "src": "1288:54:56"
                }
              ]
            },
            "documentation": "@dev staking function\n@param _proposalId id of the proposal\n@param _vote  NO(2) or YES(1).\n@param _amount the betting amount\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 12041,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stake",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12023,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12041,
                  "src": "1202:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12022,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1202:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12025,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 12041,
                  "src": "1223:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12024,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1223:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12027,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12041,
                  "src": "1238:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12026,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1238:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1201:53:56"
            },
            "returnParameters": {
              "id": 12031,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12030,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12041,
                  "src": "1272:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12029,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1272:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1271:6:56"
            },
            "scope": 12478,
            "src": "1187:162:56",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12147,
              "nodeType": "Block",
              "src": "2212:1257:56",
              "statements": [
                {
                  "assignments": [
                    12059
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12059,
                      "name": "delegationDigest",
                      "nodeType": "VariableDeclaration",
                      "scope": 12147,
                      "src": "2269:24:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 12058,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2269:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12060,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2269:24:56"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 12061,
                      "name": "_signatureType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12051,
                      "src": "2307:14:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 12062,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2325:1:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "2307:19:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 12103,
                    "nodeType": "Block",
                    "src": "2745:315:56",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 12101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 12086,
                            "name": "delegationDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12059,
                            "src": "2759:16:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 12091,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 16844,
                                            "src": "2863:4:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_GenesisProtocol_$12478",
                                              "typeString": "contract GenesisProtocol"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_GenesisProtocol_$12478",
                                              "typeString": "contract GenesisProtocol"
                                            }
                                          ],
                                          "id": 12090,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "2855:7:56",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": "address"
                                        },
                                        "id": 12092,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2855:13:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 12093,
                                        "name": "_proposalId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12043,
                                        "src": "2894:11:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 12094,
                                        "name": "_vote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12045,
                                        "src": "2931:5:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 12095,
                                        "name": "_amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12047,
                                        "src": "2962:7:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 12096,
                                        "name": "_nonce",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12049,
                                        "src": "2995:6:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 12088,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 16769,
                                        "src": "2813:3:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 12089,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "encodePacked",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "2813:16:56",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 12097,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2813:189:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 12087,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16776,
                                  "src": "2778:9:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 12098,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2778:246:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 12099,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toEthSignedMessageHash",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 15638,
                              "src": "2778:269:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                                "typeString": "function (bytes32) pure returns (bytes32)"
                              }
                            },
                            "id": 12100,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2778:271:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2759:290:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 12102,
                        "nodeType": "ExpressionStatement",
                        "src": "2759:290:56"
                      }
                    ]
                  },
                  "id": 12104,
                  "nodeType": "IfStatement",
                  "src": "2303:757:56",
                  "trueBody": {
                    "id": 12085,
                    "nodeType": "Block",
                    "src": "2328:411:56",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 12083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 12064,
                            "name": "delegationDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12059,
                            "src": "2342:16:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 12068,
                                    "name": "DELEGATION_HASH_EIP712",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12008,
                                    "src": "2426:22:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 12073,
                                                "name": "this",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 16844,
                                                "src": "2535:4:56",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_GenesisProtocol_$12478",
                                                  "typeString": "contract GenesisProtocol"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_contract$_GenesisProtocol_$12478",
                                                  "typeString": "contract GenesisProtocol"
                                                }
                                              ],
                                              "id": 12072,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "2527:7:56",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": "address"
                                            },
                                            "id": 12074,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2527:13:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 12075,
                                            "name": "_proposalId",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12043,
                                            "src": "2566:11:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 12076,
                                            "name": "_vote",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12045,
                                            "src": "2603:5:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 12077,
                                            "name": "_amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12047,
                                            "src": "2634:7:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 12078,
                                            "name": "_nonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12049,
                                            "src": "2667:6:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 12070,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 16769,
                                            "src": "2485:3:56",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 12071,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "2485:16:56",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 12079,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2485:189:56",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 12069,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 16776,
                                      "src": "2450:9:56",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 12080,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2450:246:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 12066,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16769,
                                    "src": "2388:3:56",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 12067,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2388:16:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 12081,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2388:326:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 12065,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16776,
                              "src": "2361:9:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 12082,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2361:367:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2342:386:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 12084,
                        "nodeType": "ExpressionStatement",
                        "src": "2342:386:56"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    12106
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12106,
                      "name": "staker",
                      "nodeType": "VariableDeclaration",
                      "scope": 12147,
                      "src": "3069:14:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 12105,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3069:7:56",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12111,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12109,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12053,
                        "src": "3111:10:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 12107,
                        "name": "delegationDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12059,
                        "src": "3086:16:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 12108,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 15622,
                      "src": "3086:24:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 12110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3086:36:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3069:53:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 12117,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 12113,
                          "name": "staker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12106,
                          "src": "3245:6:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 12115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3263: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": 12114,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3255:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 12116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3255:10:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3245:20:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7374616b657220616464726573732063616e6e6f742062652030",
                        "id": 12118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3267:28:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3430815440156fda2758a526d662027048e6496bf994b390c4dc85badccdf423",
                          "typeString": "literal_string \"staker address cannot be 0\""
                        },
                        "value": "staker address cannot be 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3430815440156fda2758a526d662027048e6496bf994b390c4dc85badccdf423",
                          "typeString": "literal_string \"staker address cannot be 0\""
                        }
                      ],
                      "id": 12112,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16786,
                      "src": "3237:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3237:59:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12120,
                  "nodeType": "ExpressionStatement",
                  "src": "3237:59:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 12126,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 12122,
                            "name": "stakesNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12012,
                            "src": "3314:11:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 12124,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 12123,
                            "name": "staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12106,
                            "src": "3326:6:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3314:19:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 12125,
                          "name": "_nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12049,
                          "src": "3337:6:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3314:29:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12121,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        16785,
                        16786
                      ],
                      "referencedDeclaration": 16785,
                      "src": "3306:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 12127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3306:38:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12128,
                  "nodeType": "ExpressionStatement",
                  "src": "3306:38:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12129,
                        "name": "stakesNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12012,
                        "src": "3354:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 12131,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 12130,
                        "name": "staker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12106,
                        "src": "3366:6:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3354:19:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 12136,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3400: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,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 12132,
                            "name": "stakesNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12012,
                            "src": "3376:11:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 12134,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 12133,
                            "name": "staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12106,
                            "src": "3388:6:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3376:19:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 12135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 15898,
                        "src": "3376:23: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": 12137,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3376:26:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3354:48:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12139,
                  "nodeType": "ExpressionStatement",
                  "src": "3354:48:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12141,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12043,
                        "src": "3426:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12142,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12045,
                        "src": "3439:5:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12143,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12047,
                        "src": "3446:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12144,
                        "name": "staker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12106,
                        "src": "3455:6:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12140,
                      "name": "_stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14682,
                      "src": "3419:6:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint256,uint256,address) returns (bool)"
                      }
                    },
                    "id": 12145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3419:43:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12057,
                  "id": 12146,
                  "nodeType": "Return",
                  "src": "3412:50:56"
                }
              ]
            },
            "documentation": "@dev stakeWithSignature function\n@param _proposalId id of the proposal\n@param _vote  NO(2) or YES(1).\n@param _amount the betting amount\n@param _nonce nonce value ,it is part of the signature to ensure that\na signature can be received only once.\n@param _signatureType signature type\n1 - for web3.eth.sign\n2 - for eth_signTypedData according to EIP #712.\n@param _signature  - signed data by the staker\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 12148,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stakeWithSignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12043,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "1996:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12042,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1996:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12045,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2025:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12044,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2025:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12047,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2048:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12046,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2048:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12049,
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2073:14:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12048,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2073:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12051,
                  "name": "_signatureType",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2097:22:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12050,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2097:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12053,
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2129:25:56",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 12052,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2129:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1986:178:56"
            },
            "returnParameters": {
              "id": 12057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12056,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12148,
                  "src": "2198:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12055,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2197:6:56"
            },
            "scope": 12478,
            "src": "1959:1510:56",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12213,
              "nodeType": "Block",
              "src": "3981:415:56",
              "statements": [
                {
                  "assignments": [
                    12165
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12165,
                      "name": "proposal",
                      "nodeType": "VariableDeclaration",
                      "scope": 12213,
                      "src": "3991:25:56",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$12613_storage_ptr",
                        "typeString": "struct GenesisProtocolLogic.Proposal"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 12164,
                        "name": "Proposal",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12613,
                        "src": "3991:8:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$12613_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Proposal"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12169,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 12166,
                      "name": "proposals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12689,
                      "src": "4019:9:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                        "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                      }
                    },
                    "id": 12168,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 12167,
                      "name": "_proposalId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12150,
                      "src": "4029:11:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4019:22:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                      "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3991:50:56"
                },
                {
                  "assignments": [
                    12171
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12171,
                      "name": "params",
                      "nodeType": "VariableDeclaration",
                      "scope": 12213,
                      "src": "4051:24:56",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Parameters_$12548_memory_ptr",
                        "typeString": "struct GenesisProtocolLogic.Parameters"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 12170,
                        "name": "Parameters",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12548,
                        "src": "4051:10:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Parameters_$12548_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Parameters"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12176,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 12172,
                      "name": "parameters",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12685,
                      "src": "4078:10:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Parameters_$12548_storage_$",
                        "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Parameters storage ref)"
                      }
                    },
                    "id": 12175,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 12173,
                        "name": "proposal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12165,
                        "src": "4089:8:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$12613_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage pointer"
                        }
                      },
                      "id": 12174,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paramsHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12576,
                      "src": "4089:19:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4078:31:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Parameters_$12548_storage",
                      "typeString": "struct GenesisProtocolLogic.Parameters storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4051:58:56"
                },
                {
                  "assignments": [
                    12178
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12178,
                      "name": "voter",
                      "nodeType": "VariableDeclaration",
                      "scope": 12213,
                      "src": "4119:13:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 12177,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4119:7:56",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12179,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4119:13:56"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 12185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 12180,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12171,
                        "src": "4146:6:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Parameters_$12548_memory_ptr",
                          "typeString": "struct GenesisProtocolLogic.Parameters memory"
                        }
                      },
                      "id": 12181,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "voteOnBehalf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12547,
                      "src": "4146:19:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 12183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4177: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": 12182,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4169:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 12184,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4169:10:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "4146:33:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 12204,
                    "nodeType": "Block",
                    "src": "4282:43:56",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 12202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 12199,
                            "name": "voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12178,
                            "src": "4296:5:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 12200,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16782,
                              "src": "4304:3:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 12201,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4304:10:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "4296:18:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 12203,
                        "nodeType": "ExpressionStatement",
                        "src": "4296:18:56"
                      }
                    ]
                  },
                  "id": 12205,
                  "nodeType": "IfStatement",
                  "src": "4142:183:56",
                  "trueBody": {
                    "id": 12198,
                    "nodeType": "Block",
                    "src": "4181:95:56",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 12191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12187,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16782,
                                  "src": "4203:3:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12188,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4203:10:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 12189,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12171,
                                  "src": "4217:6:56",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Parameters_$12548_memory_ptr",
                                    "typeString": "struct GenesisProtocolLogic.Parameters memory"
                                  }
                                },
                                "id": 12190,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "voteOnBehalf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 12547,
                                "src": "4217:19:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "4203:33:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 12186,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16785,
                              16786
                            ],
                            "referencedDeclaration": 16785,
                            "src": "4195:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 12192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4195:42:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 12193,
                        "nodeType": "ExpressionStatement",
                        "src": "4195:42:56"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 12196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 12194,
                            "name": "voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12178,
                            "src": "4251:5:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 12195,
                            "name": "_voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12156,
                            "src": "4259:6:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4251:14:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 12197,
                        "nodeType": "ExpressionStatement",
                        "src": "4251:14:56"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12207,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12150,
                        "src": "4354:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12208,
                        "name": "voter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12178,
                        "src": "4367:5:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12209,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12152,
                        "src": "4374:5:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12210,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12154,
                        "src": "4381:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12206,
                      "name": "internalVote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14977,
                      "src": "4341:12:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (bytes32,address,uint256,uint256) returns (bool)"
                      }
                    },
                    "id": 12211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4341:48:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12163,
                  "id": 12212,
                  "nodeType": "Return",
                  "src": "4334:55:56"
                }
              ]
            },
            "documentation": "@dev voting function\n@param _proposalId id of the proposal\n@param _vote NO(2) or YES(1).\n@param _amount the reputation amount to vote with . if _amount == 0 it will use all voter reputation.\n@param _voter voter address\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 12214,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12159,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12150,
                    "src": "3950:11:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 12160,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12158,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12756,
                  "src": "3942:7:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3942:20:56"
              }
            ],
            "name": "vote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12150,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12214,
                  "src": "3856:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12149,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3856:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12152,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 12214,
                  "src": "3877:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12151,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3877:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12154,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 12214,
                  "src": "3892:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3892:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12156,
                  "name": "_voter",
                  "nodeType": "VariableDeclaration",
                  "scope": 12214,
                  "src": "3909:14:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12155,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3909:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3855:69:56"
            },
            "returnParameters": {
              "id": 12163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12162,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12214,
                  "src": "3975:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12161,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3975:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3974:6:56"
            },
            "scope": 12478,
            "src": "3842:554:56",
            "stateMutability": "nonpayable",
            "superFunction": 15141,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12223,
              "nodeType": "Block",
              "src": "4683:52:56",
              "statements": [
                {
                  "expression": null,
                  "functionReturnParameters": 12221,
                  "id": 12222,
                  "nodeType": "Return",
                  "src": "4722:7:56"
                }
              ]
            },
            "documentation": "@dev Cancel the vote of the msg.sender.\ncancel vote is not allow in genesisProtocol so this function doing nothing.\nThis function is here in order to comply to the IntVoteInterface .",
            "id": 12224,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12219,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12216,
                    "src": "4670:11:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 12220,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12218,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12756,
                  "src": "4662:7:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4662:20:56"
              }
            ],
            "name": "cancelVote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12217,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12216,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12224,
                  "src": "4632:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12215,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4632:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4631:21:56"
            },
            "returnParameters": {
              "id": 12221,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4683:0:56"
            },
            "scope": 12478,
            "src": "4612:123:56",
            "stateMutability": "nonpayable",
            "superFunction": 15146,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12238,
              "nodeType": "Block",
              "src": "5081:45:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12235,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12226,
                        "src": "5107:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 12234,
                      "name": "_execute",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14496,
                      "src": "5098:8:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (bytes32) returns (bool)"
                      }
                    },
                    "id": 12236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5098:21:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12233,
                  "id": 12237,
                  "nodeType": "Return",
                  "src": "5091:28:56"
                }
              ]
            },
            "documentation": "@dev execute check if the proposal has been decided, and if so, execute the proposal\n@param _proposalId the id of the proposal\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 12239,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 12229,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12226,
                    "src": "5054:11:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 12230,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 12228,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12756,
                  "src": "5046:7:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5046:20:56"
              }
            ],
            "name": "execute",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12226,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12239,
                  "src": "5016:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12225,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5016:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5015:21:56"
            },
            "returnParameters": {
              "id": 12233,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12232,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12239,
                  "src": "5075:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12231,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5075:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5074:6:56"
            },
            "scope": 12478,
            "src": "4999:127:56",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12248,
              "nodeType": "Block",
              "src": "5353:38:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 12246,
                    "name": "NUM_OF_CHOICES",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12704,
                    "src": "5370:14:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12245,
                  "id": 12247,
                  "nodeType": "Return",
                  "src": "5363:21:56"
                }
              ]
            },
            "documentation": "@dev getNumberOfChoices returns the number of choices possible in this proposal\n@return uint256 that contains number of choices",
            "id": 12249,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNumberOfChoices",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12241,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12249,
                  "src": "5313:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12240,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5313:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5312:9:56"
            },
            "returnParameters": {
              "id": 12245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12244,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12249,
                  "src": "5344:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12243,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5344:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5343:9:56"
            },
            "scope": 12478,
            "src": "5285:106:56",
            "stateMutability": "view",
            "superFunction": 15153,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12263,
              "nodeType": "Block",
              "src": "5654:52:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12258,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12689,
                        "src": "5671:9:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 12260,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 12259,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12251,
                        "src": "5681:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5671:22:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 12261,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "times",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12590,
                    "src": "5671:28:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$3_storage",
                      "typeString": "uint256[3] storage ref"
                    }
                  },
                  "functionReturnParameters": 12257,
                  "id": 12262,
                  "nodeType": "Return",
                  "src": "5664:35:56"
                }
              ]
            },
            "documentation": "@dev getProposalTimes returns proposals times variables.\n@param _proposalId id of the proposal\n@return proposals times array",
            "id": 12264,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProposalTimes",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12252,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12251,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12264,
                  "src": "5589:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12250,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5589:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5588:21:56"
            },
            "returnParameters": {
              "id": 12257,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12256,
                  "name": "times",
                  "nodeType": "VariableDeclaration",
                  "scope": 12264,
                  "src": "5632:20:56",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr",
                    "typeString": "uint256[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 12253,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "5632:4:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 12255,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 12254,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5637:1:56",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5632:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$3_storage_ptr",
                      "typeString": "uint256[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5631:22:56"
            },
            "scope": 12478,
            "src": "5563:143:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12290,
              "nodeType": "Block",
              "src": "6155:122:56",
              "statements": [
                {
                  "assignments": [
                    12276
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12276,
                      "name": "voter",
                      "nodeType": "VariableDeclaration",
                      "scope": 12290,
                      "src": "6165:18:56",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Voter_$12555_memory_ptr",
                        "typeString": "struct GenesisProtocolLogic.Voter"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 12275,
                        "name": "Voter",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 12555,
                        "src": "6165:5:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Voter_$12555_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Voter"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 12283,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 12277,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12689,
                          "src": "6186:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 12279,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12278,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12266,
                          "src": "6196:11:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6186:22:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 12280,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "voters",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12604,
                      "src": "6186:29:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Voter_$12555_storage_$",
                        "typeString": "mapping(address => struct GenesisProtocolLogic.Voter storage ref)"
                      }
                    },
                    "id": 12282,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 12281,
                      "name": "_voter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12268,
                      "src": "6216:6:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6186:37:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Voter_$12555_storage",
                      "typeString": "struct GenesisProtocolLogic.Voter storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6165:58:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 12284,
                          "name": "voter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12276,
                          "src": "6241:5:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Voter_$12555_memory_ptr",
                            "typeString": "struct GenesisProtocolLogic.Voter memory"
                          }
                        },
                        "id": 12285,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "vote",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12550,
                        "src": "6241:10:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 12286,
                          "name": "voter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12276,
                          "src": "6253:5:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Voter_$12555_memory_ptr",
                            "typeString": "struct GenesisProtocolLogic.Voter memory"
                          }
                        },
                        "id": 12287,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reputation",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12552,
                        "src": "6253:16:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 12288,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "6240:30:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 12274,
                  "id": 12289,
                  "nodeType": "Return",
                  "src": "6233:37:56"
                }
              ]
            },
            "documentation": "@dev voteInfo returns the vote and the amount of reputation of the user committed to this proposal\n@param _proposalId the ID of the proposal\n@param _voter the address of the voter\n@return uint256 vote - the voters vote\n       uint256 reputation - amount of reputation committed by _voter to _proposalId",
            "id": 12291,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteInfo",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12269,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12266,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12291,
                  "src": "6084:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12265,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6084:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12268,
                  "name": "_voter",
                  "nodeType": "VariableDeclaration",
                  "scope": 12291,
                  "src": "6105:14:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12267,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6105:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6083:37:56"
            },
            "returnParameters": {
              "id": 12274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12271,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12291,
                  "src": "6143:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12270,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6143:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12273,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12291,
                  "src": "6149:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12272,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6149:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6142:12:56"
            },
            "scope": 12478,
            "src": "6066:211:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12307,
              "nodeType": "Block",
              "src": "6621:61:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 12300,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12689,
                          "src": "6638:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 12302,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12301,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12293,
                          "src": "6648:11:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6638:22:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 12303,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "votes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12596,
                      "src": "6638:28:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 12305,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 12304,
                      "name": "_choice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12295,
                      "src": "6667:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6638:37:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12299,
                  "id": 12306,
                  "nodeType": "Return",
                  "src": "6631:44:56"
                }
              ]
            },
            "documentation": "@dev voteStatus returns the reputation voted for a proposal for a specific voting choice.\n@param _proposalId the ID of the proposal\n@param _choice the index in the\n@return voted reputation for the given choice",
            "id": 12308,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12296,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12293,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12308,
                  "src": "6552:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12292,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6552:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12295,
                  "name": "_choice",
                  "nodeType": "VariableDeclaration",
                  "scope": 12308,
                  "src": "6573:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12294,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6573:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6551:38:56"
            },
            "returnParameters": {
              "id": 12299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12298,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12308,
                  "src": "6612:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6612:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6611:9:56"
            },
            "scope": 12478,
            "src": "6532:150:56",
            "stateMutability": "view",
            "superFunction": 15169,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12319,
              "nodeType": "Block",
              "src": "6906:47:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12316,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12310,
                        "src": "6934:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 12315,
                      "name": "_isVotable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15046,
                      "src": "6923:10:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (bytes32) view returns (bool)"
                      }
                    },
                    "id": 12317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6923:23:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12314,
                  "id": 12318,
                  "nodeType": "Return",
                  "src": "6916:30:56"
                }
              ]
            },
            "documentation": "@dev isVotable check if the proposal is votable\n@param _proposalId the ID of the proposal\n@return bool true or false",
            "id": 12320,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isVotable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12311,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12310,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12320,
                  "src": "6857:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12309,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6857:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6856:21:56"
            },
            "returnParameters": {
              "id": 12314,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12313,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12320,
                  "src": "6900:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12312,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6900:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6899:6:56"
            },
            "scope": 12478,
            "src": "6838:115:56",
            "stateMutability": "view",
            "superFunction": 15160,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12359,
              "nodeType": "Block",
              "src": "7366:258:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 12333,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12689,
                              "src": "7401:9:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 12335,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 12334,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12322,
                              "src": "7411:11:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7401:22:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 12336,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "preBoostedVotes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12600,
                          "src": "7401:38:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 12338,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12337,
                          "name": "YES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12710,
                          "src": "7440:3:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7401:43:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 12339,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12689,
                              "src": "7462:9:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 12341,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 12340,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12322,
                              "src": "7472:11:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7462:22:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 12342,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "preBoostedVotes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12600,
                          "src": "7462:38:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 12344,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12343,
                          "name": "NO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12707,
                          "src": "7501:2:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7462:42:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 12345,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12689,
                              "src": "7522:9:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 12347,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 12346,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12322,
                              "src": "7532:11:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7522:22:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 12348,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "stakes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12608,
                          "src": "7522:29:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 12350,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12349,
                          "name": "YES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12710,
                          "src": "7552:3:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7522:34:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 12351,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12689,
                              "src": "7574:9:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 12353,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 12352,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12322,
                              "src": "7584:11:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7574:22:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 12354,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "stakes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12608,
                          "src": "7574:29:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 12356,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12355,
                          "name": "NO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12707,
                          "src": "7604:2:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7574:33:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 12357,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "7383:234:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 12332,
                  "id": 12358,
                  "nodeType": "Return",
                  "src": "7376:241:56"
                }
              ]
            },
            "documentation": "@dev proposalStatus return the total votes and stakes for a given proposal\n@param _proposalId the ID of the proposal\n@return uint256 preBoostedVotes YES\n@return uint256 preBoostedVotes NO\n@return uint256 total stakes YES\n@return uint256 total stakes NO",
            "id": 12360,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proposalStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12323,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12322,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12360,
                  "src": "7287:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12321,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7287:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7286:21:56"
            },
            "returnParameters": {
              "id": 12332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12325,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12360,
                  "src": "7330:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12324,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7330:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12327,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12360,
                  "src": "7339:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12326,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7339:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12329,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12360,
                  "src": "7348:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12328,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7348:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12331,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12360,
                  "src": "7357:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12330,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7357:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7329:36:56"
            },
            "scope": 12478,
            "src": "7263:361:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12373,
              "nodeType": "Block",
              "src": "7904:63:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 12367,
                            "name": "proposals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12689,
                            "src": "7922:9:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                              "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                            }
                          },
                          "id": 12369,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 12368,
                            "name": "_proposalId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12362,
                            "src": "7932:11:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7922:22:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                            "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                          }
                        },
                        "id": 12370,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "organizationId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12564,
                        "src": "7922:37:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "id": 12371,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "7921:39:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 12366,
                  "id": 12372,
                  "nodeType": "Return",
                  "src": "7914:46:56"
                }
              ]
            },
            "documentation": "@dev getProposalOrganization return the organizationId for a given proposal\n@param _proposalId the ID of the proposal\n@return bytes32 organization identifier",
            "id": 12374,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProposalOrganization",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12362,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12374,
                  "src": "7852:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12361,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7852:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7851:21:56"
            },
            "returnParameters": {
              "id": 12366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12365,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12374,
                  "src": "7895:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12364,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7895:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7894:9:56"
            },
            "scope": 12478,
            "src": "7819:148:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12401,
              "nodeType": "Block",
              "src": "8321:118:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12385,
                                "name": "proposals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12689,
                                "src": "8339:9:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                  "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                                }
                              },
                              "id": 12387,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 12386,
                                "name": "_proposalId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12376,
                                "src": "8349:11:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8339:22:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                                "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                              }
                            },
                            "id": 12388,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "stakers",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12612,
                            "src": "8339:30:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Staker_$12562_storage_$",
                              "typeString": "mapping(address => struct GenesisProtocolLogic.Staker storage ref)"
                            }
                          },
                          "id": 12390,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 12389,
                            "name": "_staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12378,
                            "src": "8370:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8339:39:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Staker_$12562_storage",
                            "typeString": "struct GenesisProtocolLogic.Staker storage ref"
                          }
                        },
                        "id": 12391,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "vote",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12557,
                        "src": "8339:44:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 12392,
                                "name": "proposals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12689,
                                "src": "8385:9:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                                  "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                                }
                              },
                              "id": 12394,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 12393,
                                "name": "_proposalId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12376,
                                "src": "8395:11:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8385:22:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                                "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                              }
                            },
                            "id": 12395,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "stakers",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12612,
                            "src": "8385:30:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Staker_$12562_storage_$",
                              "typeString": "mapping(address => struct GenesisProtocolLogic.Staker storage ref)"
                            }
                          },
                          "id": 12397,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 12396,
                            "name": "_staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12378,
                            "src": "8416:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8385:39:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Staker_$12562_storage",
                            "typeString": "struct GenesisProtocolLogic.Staker storage ref"
                          }
                        },
                        "id": 12398,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12559,
                        "src": "8385:46:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 12399,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "8338:94:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 12384,
                  "id": 12400,
                  "nodeType": "Return",
                  "src": "8331:101:56"
                }
              ]
            },
            "documentation": "@dev getStaker return the vote and stake amount for a given proposal and staker\n@param _proposalId the ID of the proposal\n@param _staker staker address\n@return uint256 vote\n@return uint256 amount",
            "id": 12402,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getStaker",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12376,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12402,
                  "src": "8243:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12375,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8243:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12378,
                  "name": "_staker",
                  "nodeType": "VariableDeclaration",
                  "scope": 12402,
                  "src": "8264:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12377,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8264:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8242:38:56"
            },
            "returnParameters": {
              "id": 12384,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12381,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12402,
                  "src": "8303:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12380,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8303:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12383,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12402,
                  "src": "8312:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12382,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8312:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8302:18:56"
            },
            "scope": 12478,
            "src": "8224:215:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12418,
              "nodeType": "Block",
              "src": "8744:60:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 12411,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12689,
                          "src": "8761:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 12413,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 12412,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12404,
                          "src": "8771:11:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8761:22:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 12414,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stakes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12608,
                      "src": "8761:29:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 12416,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 12415,
                      "name": "_vote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12406,
                      "src": "8791:5:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8761:36:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12410,
                  "id": 12417,
                  "nodeType": "Return",
                  "src": "8754:43:56"
                }
              ]
            },
            "documentation": "@dev voteStake return the amount stakes for a given proposal and vote\n@param _proposalId the ID of the proposal\n@param _vote vote number\n@return uint256 stake amount",
            "id": 12419,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteStake",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12407,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12404,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12419,
                  "src": "8677:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12403,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8677:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12406,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 12419,
                  "src": "8698:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12405,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8698:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8676:36:56"
            },
            "returnParameters": {
              "id": 12410,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12409,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12419,
                  "src": "8735:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12408,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8735:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8734:9:56"
            },
            "scope": 12478,
            "src": "8658:146:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12431,
              "nodeType": "Block",
              "src": "9043:58:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12426,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12689,
                        "src": "9060:9:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 12428,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 12427,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12421,
                        "src": "9070:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9060:22:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 12429,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "winningVote",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12570,
                    "src": "9060:34:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12425,
                  "id": 12430,
                  "nodeType": "Return",
                  "src": "9053:41:56"
                }
              ]
            },
            "documentation": "@dev voteStake return the winningVote for a given proposal\n@param _proposalId the ID of the proposal\n@return uint256 winningVote",
            "id": 12432,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "winningVote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12422,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12421,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12432,
                  "src": "8991:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12420,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8991:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8990:21:56"
            },
            "returnParameters": {
              "id": 12425,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12424,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12432,
                  "src": "9034:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12423,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9034:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9033:9:56"
            },
            "scope": 12478,
            "src": "8970:131:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12444,
              "nodeType": "Block",
              "src": "9351:52:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 12439,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12689,
                        "src": "9368:9:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$12613_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 12441,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 12440,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12434,
                        "src": "9378:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9368:22:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$12613_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 12442,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "state",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 12568,
                    "src": "9368:28:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ProposalState_$12514",
                      "typeString": "enum GenesisProtocolLogic.ProposalState"
                    }
                  },
                  "functionReturnParameters": 12438,
                  "id": 12443,
                  "nodeType": "Return",
                  "src": "9361:35:56"
                }
              ]
            },
            "documentation": "@dev voteStake return the state for a given proposal\n@param _proposalId the ID of the proposal\n@return ProposalState proposal state",
            "id": 12445,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "state",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12434,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12445,
                  "src": "9293:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12433,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9293:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9292:21:56"
            },
            "returnParameters": {
              "id": 12438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12437,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12445,
                  "src": "9336:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ProposalState_$12514",
                    "typeString": "enum GenesisProtocolLogic.ProposalState"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 12436,
                    "name": "ProposalState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12514,
                    "src": "9336:13:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ProposalState_$12514",
                      "typeString": "enum GenesisProtocolLogic.ProposalState"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9335:15:56"
            },
            "scope": 12478,
            "src": "9278:125:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12452,
              "nodeType": "Block",
              "src": "9584:29:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 12450,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9601:5:56",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 12449,
                  "id": 12451,
                  "nodeType": "Return",
                  "src": "9594:12:56"
                }
              ]
            },
            "documentation": "@dev isAbstainAllow returns if the voting machine allow abstain (0)\n@return bool true or false",
            "id": 12453,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAbstainAllow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12446,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9553:2:56"
            },
            "returnParameters": {
              "id": 12449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12448,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12453,
                  "src": "9578:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12447,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9578:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9577:6:56"
            },
            "scope": 12478,
            "src": "9530:83:56",
            "stateMutability": "pure",
            "superFunction": 15174,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12464,
              "nodeType": "Block",
              "src": "9909:33:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 12460,
                        "name": "YES",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12710,
                        "src": "9927:3:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 12461,
                        "name": "NO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12707,
                        "src": "9932:2:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 12462,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "9926:9:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 12459,
                  "id": 12463,
                  "nodeType": "Return",
                  "src": "9919:16:56"
                }
              ]
            },
            "documentation": "@dev getAllowedRangeOfChoices returns the allowed range of choices for a voting machine.\n@return min - minimum number of choices\nmax - maximum number of choices",
            "id": 12465,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAllowedRangeOfChoices",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12454,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9858:2:56"
            },
            "returnParameters": {
              "id": 12459,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12456,
                  "name": "min",
                  "nodeType": "VariableDeclaration",
                  "scope": 12465,
                  "src": "9883:11:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9883:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12458,
                  "name": "max",
                  "nodeType": "VariableDeclaration",
                  "scope": 12465,
                  "src": "9896:11:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12457,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9896:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9882:26:56"
            },
            "scope": 12478,
            "src": "9825:117:56",
            "stateMutability": "pure",
            "superFunction": 15181,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12476,
              "nodeType": "Block",
              "src": "10161:44:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 12473,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12467,
                        "src": "10186:11:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 12472,
                      "name": "_score",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15006,
                      "src": "10179:6:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (bytes32) view returns (uint256)"
                      }
                    },
                    "id": 12474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10179:19:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12471,
                  "id": 12475,
                  "nodeType": "Return",
                  "src": "10171:27:56"
                }
              ]
            },
            "documentation": "@dev score return the proposal score\n@param _proposalId the ID of the proposal\n@return uint256 proposal score.",
            "id": 12477,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "score",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12468,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12467,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 12477,
                  "src": "10111:19:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12466,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10111:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10110:21:56"
            },
            "returnParameters": {
              "id": 12471,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12470,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 12477,
                  "src": "10152:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12469,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10152:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10151:9:56"
            },
            "scope": 12478,
            "src": "10096:109:56",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 12479,
        "src": "220:9987:56"
      }
    ],
    "src": "0:10208:56"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.4+commit.9549d8ff.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.16",
  "updatedAt": "2020-07-07T14:28:02.147Z",
  "devdoc": {
    "methods": {
      "cancelVote(bytes32)": {
        "details": "Cancel the vote of the msg.sender. cancel vote is not allow in genesisProtocol so this function doing nothing. This function is here in order to comply to the IntVoteInterface ."
      },
      "constructor": {
        "details": "Constructor"
      },
      "execute(bytes32)": {
        "details": "execute check if the proposal has been decided, and if so, execute the proposal",
        "params": {
          "_proposalId": "the id of the proposal"
        },
        "return": "bool true - the proposal has been executed             false - otherwise."
      },
      "executeBoosted(bytes32)": {
        "details": "executeBoosted try to execute a boosted or QuietEndingPeriod proposal if it is expired",
        "params": {
          "_proposalId": "the id of the proposal"
        },
        "return": "uint256 expirationCallBounty the bounty amount for the expiration call"
      },
      "getAllowedRangeOfChoices()": {
        "details": "getAllowedRangeOfChoices returns the allowed range of choices for a voting machine.",
        "return": "min - minimum number of choices max - maximum number of choices"
      },
      "getNumberOfChoices(bytes32)": {
        "details": "getNumberOfChoices returns the number of choices possible in this proposal",
        "return": "uint256 that contains number of choices"
      },
      "getParametersHash(uint256[11],address)": {
        "details": "hashParameters returns a hash of the given parameters"
      },
      "getProposalOrganization(bytes32)": {
        "details": "getProposalOrganization return the organizationId for a given proposal",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "bytes32 organization identifier"
      },
      "getProposalTimes(bytes32)": {
        "details": "getProposalTimes returns proposals times variables.",
        "params": {
          "_proposalId": "id of the proposal"
        },
        "return": "proposals times array"
      },
      "getStaker(bytes32,address)": {
        "details": "getStaker return the vote and stake amount for a given proposal and staker",
        "params": {
          "_proposalId": "the ID of the proposal",
          "_staker": "staker address"
        },
        "return": "uint256 voteuint256 amount"
      },
      "isAbstainAllow()": {
        "details": "isAbstainAllow returns if the voting machine allow abstain (0)",
        "return": "bool true or false"
      },
      "isVotable(bytes32)": {
        "details": "isVotable check if the proposal is votable",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "bool true or false"
      },
      "proposalStatus(bytes32)": {
        "details": "proposalStatus return the total votes and stakes for a given proposal",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "uint256 preBoostedVotes YESuint256 preBoostedVotes NOuint256 total stakes YESuint256 total stakes NO"
      },
      "propose(uint256,bytes32,address,address)": {
        "details": "register a new proposal with the given parameters. Every proposal has a unique ID which is being generated by calculating keccak256 of a incremented counter.",
        "params": {
          "_organization": "address",
          "_paramsHash": "parameters hash",
          "_proposer": "address"
        }
      },
      "redeem(bytes32,address)": {
        "details": "redeem a reward for a successful stake, vote or proposing. The function use a beneficiary address as a parameter (and not msg.sender) to enable users to redeem on behalf of someone else.",
        "params": {
          "_beneficiary": "- the beneficiary address",
          "_proposalId": "the ID of the proposal"
        },
        "return": "rewards -          [0] stakerTokenReward          [1] voterReputationReward          [2] proposerReputationReward"
      },
      "redeemDaoBounty(bytes32,address)": {
        "details": "redeemDaoBounty a reward for a successful stake. The function use a beneficiary address as a parameter (and not msg.sender) to enable users to redeem on behalf of someone else.",
        "params": {
          "_beneficiary": "- the beneficiary address",
          "_proposalId": "the ID of the proposal"
        },
        "return": "redeemedAmount - redeem token amountpotentialAmount - potential redeem token amount(if there is enough tokens bounty at the organization )"
      },
      "score(bytes32)": {
        "details": "score return the proposal score",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "uint256 proposal score."
      },
      "setParameters(uint256[11],address)": {
        "details": "hash the parameters, save them if necessary, and return the hash value",
        "params": {
          "_params": "a parameters array   _params[0] - _queuedVoteRequiredPercentage,   _params[1] - _queuedVotePeriodLimit, //the time limit for a proposal to be in an absolute voting mode.   _params[2] - _boostedVotePeriodLimit, //the time limit for a proposal to be in an relative voting mode.   _params[3] - _preBoostedVotePeriodLimit, //the time limit for a proposal to be in an preparation                 state (stable) before boosted.   _params[4] -_thresholdConst   _params[5] -_quietEndingPeriod   _params[6] -_proposingRepReward   _params[7] -_votersReputationLossRatio   _params[8] -_minimumDaoBounty   _params[9] -_daoBountyConst   _params[10] -_activationTime",
          "_voteOnBehalf": "- authorized to vote on behalf of others."
        }
      },
      "shouldBoost(bytes32)": {
        "details": "shouldBoost check if a proposal should be shifted to boosted phase.",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "bool true or false."
      },
      "stake(bytes32,uint256,uint256)": {
        "details": "staking function",
        "params": {
          "_amount": "the betting amount",
          "_proposalId": "id of the proposal",
          "_vote": "NO(2) or YES(1)."
        },
        "return": "bool true - the proposal has been executed             false - otherwise."
      },
      "stakeWithSignature(bytes32,uint256,uint256,uint256,uint256,bytes)": {
        "details": "stakeWithSignature function",
        "params": {
          "_amount": "the betting amount",
          "_nonce": "nonce value ,it is part of the signature to ensure that a signature can be received only once.",
          "_proposalId": "id of the proposal",
          "_signature": "- signed data by the staker",
          "_signatureType": "signature type 1 - for web3.eth.sign 2 - for eth_signTypedData according to EIP #712.",
          "_vote": "NO(2) or YES(1)."
        },
        "return": "bool true - the proposal has been executed             false - otherwise."
      },
      "state(bytes32)": {
        "details": "voteStake return the state for a given proposal",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "ProposalState proposal state"
      },
      "threshold(bytes32,bytes32)": {
        "details": "threshold return the organization's score threshold which required by a proposal to shift to boosted state. This threshold is dynamically set and it depend on the number of boosted proposal.",
        "params": {
          "_organizationId": "the organization identifier",
          "_paramsHash": "the organization parameters hash"
        },
        "return": "uint256 organization's score threshold as real number."
      },
      "vote(bytes32,uint256,uint256,address)": {
        "details": "voting function",
        "params": {
          "_amount": "the reputation amount to vote with . if _amount == 0 it will use all voter reputation.",
          "_proposalId": "id of the proposal",
          "_vote": "NO(2) or YES(1).",
          "_voter": "voter address"
        },
        "return": "bool true - the proposal has been executed             false - otherwise."
      },
      "voteInfo(bytes32,address)": {
        "details": "voteInfo returns the vote and the amount of reputation of the user committed to this proposal",
        "params": {
          "_proposalId": "the ID of the proposal",
          "_voter": "the address of the voter"
        },
        "return": "uint256 vote - the voters vote       uint256 reputation - amount of reputation committed by _voter to _proposalId"
      },
      "voteStake(bytes32,uint256)": {
        "details": "voteStake return the amount stakes for a given proposal and vote",
        "params": {
          "_proposalId": "the ID of the proposal",
          "_vote": "vote number"
        },
        "return": "uint256 stake amount"
      },
      "voteStatus(bytes32,uint256)": {
        "details": "voteStatus returns the reputation voted for a proposal for a specific voting choice.",
        "params": {
          "_choice": "the index in the",
          "_proposalId": "the ID of the proposal"
        },
        "return": "voted reputation for the given choice"
      },
      "winningVote(bytes32)": {
        "details": "voteStake return the winningVote for a given proposal",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "uint256 winningVote"
      }
    },
    "title": "GenesisProtocol implementation -an organization's voting machine scheme."
  },
  "userdoc": {
    "methods": {}
  }
}