{
  "contractName": "EventFactory",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "categoricalEventMasterCopy",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "scalarEventMasterCopy",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "categoricalEvents",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "scalarEvents",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "outcomeTokenMasterCopy",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_categoricalEventMasterCopy",
          "type": "address"
        },
        {
          "name": "_scalarEventMasterCopy",
          "type": "address"
        },
        {
          "name": "_outcomeTokenMasterCopy",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "creator",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "categoricalEvent",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "oracle",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "outcomeCount",
          "type": "uint8"
        }
      ],
      "name": "CategoricalEventCreation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "creator",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "scalarEvent",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "oracle",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "lowerBound",
          "type": "int256"
        },
        {
          "indexed": false,
          "name": "upperBound",
          "type": "int256"
        }
      ],
      "name": "ScalarEventCreation",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "collateralToken",
          "type": "address"
        },
        {
          "name": "oracle",
          "type": "address"
        },
        {
          "name": "outcomeCount",
          "type": "uint8"
        }
      ],
      "name": "createCategoricalEvent",
      "outputs": [
        {
          "name": "eventContract",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "collateralToken",
          "type": "address"
        },
        {
          "name": "oracle",
          "type": "address"
        },
        {
          "name": "lowerBound",
          "type": "int256"
        },
        {
          "name": "upperBound",
          "type": "int256"
        }
      ],
      "name": "createScalarEvent",
      "outputs": [
        {
          "name": "eventContract",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.6+commit.b259423e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"categoricalEventMasterCopy\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"scalarEventMasterCopy\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"collateralToken\",\"type\":\"address\"},{\"name\":\"oracle\",\"type\":\"address\"},{\"name\":\"lowerBound\",\"type\":\"int256\"},{\"name\":\"upperBound\",\"type\":\"int256\"}],\"name\":\"createScalarEvent\",\"outputs\":[{\"name\":\"eventContract\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"categoricalEvents\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"scalarEvents\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"collateralToken\",\"type\":\"address\"},{\"name\":\"oracle\",\"type\":\"address\"},{\"name\":\"outcomeCount\",\"type\":\"uint8\"}],\"name\":\"createCategoricalEvent\",\"outputs\":[{\"name\":\"eventContract\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"outcomeTokenMasterCopy\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_categoricalEventMasterCopy\",\"type\":\"address\"},{\"name\":\"_scalarEventMasterCopy\",\"type\":\"address\"},{\"name\":\"_outcomeTokenMasterCopy\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"categoricalEvent\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"collateralToken\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"oracle\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"outcomeCount\",\"type\":\"uint8\"}],\"name\":\"CategoricalEventCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"scalarEvent\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"collateralToken\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"oracle\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"lowerBound\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"upperBound\",\"type\":\"int256\"}],\"name\":\"ScalarEventCreation\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Stefan George - <stefan@gnosis.pm>\",\"methods\":{\"createCategoricalEvent(address,address,uint8)\":{\"details\":\"Creates a new categorical event and adds it to the event mapping\",\"params\":{\"collateralToken\":\"Tokens used as collateral in exchange for outcome tokens\",\"oracle\":\"Oracle contract used to resolve the event\",\"outcomeCount\":\"Number of event outcomes\"},\"return\":\"Event contract\"},\"createScalarEvent(address,address,int256,int256)\":{\"details\":\"Creates a new scalar event and adds it to the event mapping\",\"params\":{\"collateralToken\":\"Tokens used as collateral in exchange for outcome tokens\",\"lowerBound\":\"Lower bound for event outcome\",\"oracle\":\"Oracle contract used to resolve the event\",\"upperBound\":\"Lower bound for event outcome\"},\"return\":\"Event contract\"}},\"title\":\"Event factory contract - Allows creation of categorical and scalar events\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/EventFactory.sol\":\"EventFactory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/CategoricalEvent.sol\":{\"keccak256\":\"0x0d618ff0e76444e82eb38603d60798a2ca697ca0262ef541ed0987503ed493da\",\"urls\":[\"bzzr://a8677480e10d1c369ab348a093598f84d85a51f400d114ece3d1d5055a09267a\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/Event.sol\":{\"keccak256\":\"0xdcacfa25145426b5681ad7d8bafb3c117c92a37b7a0175d72a10b42f130fb8c1\",\"urls\":[\"bzzr://bd10fbdb82f0d50866442c9e95317b3176c8ee067def27d764529973fb36420a\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/EventFactory.sol\":{\"keccak256\":\"0xd9c190f46a1f260cb6ca7aa455444cb79f4d0e732bbaa4485e36e7b6c344739c\",\"urls\":[\"bzzr://f84bccd78e77be6288cf97d3fc0cb4808d161f75d291b89df3f2232d394082f0\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol\":{\"keccak256\":\"0xb8113f1a3f63ec0b6ae2d1a833fbffcf2b2af9470d4d7591d8e2c2784a163b32\",\"urls\":[\"bzzr://feb468d84fdda273585ba31abbbf8cceb906df5a9142695ec30c98f000a05bd4\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Oracles/Oracle.sol\":{\"keccak256\":\"0xf4d12f4a59c17e66dfa6791188f621a8914e2038a4e3f72d6fc9fb903ca8e18e\",\"urls\":[\"bzzr://a477ccd203e677cc904b1a4f8fcc85251c5b5e09c5c10eed27e01318584b16d1\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Tokens/OutcomeToken.sol\":{\"keccak256\":\"0x3d4c9ec14a60cf7577d366da5116e919a4331da8d6d993174f7d599f84ae74e0\",\"urls\":[\"bzzr://20f87450259a3af24ff1769faa9ab3b714d01921e9d8fa4efa75a0c277837a8a\"]},\"@gnosis.pm/util-contracts/contracts/Proxy.sol\":{\"keccak256\":\"0xeab0e83a9ec9e7f052c0455a11577061ec6d1994db08dae429abd6faaabf6555\",\"urls\":[\"bzzr://b2c1273d4ec30e2f9e768eea8c510f8493a7359b03e01923d93eea86b57ec145\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x852793a3c2f86d336a683b30d688ec3dcfc57451af5a2bf5975cda3b7191a901\",\"urls\":[\"bzzr://07fb42206812a17c1f71e548cfa5cec6f9aa1ae0ca5df870718ca4aa9759d1a5\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzzr://aa8b45b57edafc3d67bc5d916327ea16807fae33f753ca163ae0c4061b789766\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506040516060806120978339810180604052606081101561003057600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050611f6d8061012a6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638d1d2c211161005b5780638d1d2c21146101ce5780639897e8a51461023c5780639df0c176146102aa578063d1de36c21461035b5761007d565b80634b62cde6146100825780634ea0c802146100cc5780635ea194a314610116575b600080fd5b61008a6103a5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100d46103cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61018c6004803603608081101561012c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506103f1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101fa600480360360208110156101e457600080fd5b810190808035906020019092919050505061079e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102686004803603602081101561025257600080fd5b81019080803590602001909291905050506107d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610319600480360360608110156102c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050610804565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610363610bab565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008085858585604051602001808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401838152602001828152602001945050505050604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104ff57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787878760405161055590610bd1565b808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050604051809103906000f08015801561064e573d6000803e3d6000fd5b509150816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fd613e63983a1538814e1b390fc232d0e20462cf7410924f6b6a5f29ea38e82ed8388888888604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a250949350505050565b60006020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080848484604051602001808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018260ff1660ff1660f81b81526001019350505050604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461091257600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686868660405161096790610bde565b808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff16815260200195505050505050604051809103906000f080158015610a5f573d6000803e3d6000fd5b5091508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f9732758aee476f5125b50d29cc43e28422f12ec078ba9f5c712f9dbd52796f5983878787604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff16815260200194505050505060405180910390a2509392505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a5d80610bec83390190565b6108f9806116498339019056fe608060405234801561001057600080fd5b5060405160c080610a5d833981018060405260c081101561003057600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505085600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100ae57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156101595750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b61016257600080fd5b83600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008090505b60028160ff16101561033f5760008660405161020590610365565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015610257573d6000803e3d6000fd5b50905060048190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507fad24776dc347085865b6988e249c191fc22d9b31cf54cb62233c3c16be1736ee8183604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff1681526020019250505060405180910390a15080806001019150506101ea565b5081811361034c57600080fd5b8160058190555080600681905550505050505050610372565b61021c8061084183390190565b6104c0806103816000396000f3fe60806040526004361061009c5760003560e01c8063a384d6ff11610064578063a384d6ff1461024d578063a619486e14610278578063a871da91146102cf578063b09ad8a014610300578063b2016bd41461032b578063ccdf68f3146103825761009c565b806327793f87146100ea578063561cce0a146101155780636e5452fe146101465780637dc0d1d01461017b5780638abe59ea146101d2575b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050366000803760008036600084600019f43d6000803e80600081146100e5573d6000f35b3d6000fd5b3480156100f657600080fd5b506100ff6103b1565b6040518082815260200191505060405180910390f35b34801561012157600080fd5b5061012a6103b7565b604051808260ff1660ff16815260200191505060405180910390f35b34801561015257600080fd5b5061015b6103bc565b604051808262ffffff1662ffffff16815260200191505060405180910390f35b34801561018757600080fd5b506101906103c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101de57600080fd5b5061020b600480360360208110156101f557600080fd5b81019080803590602001909291905050506103e9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025957600080fd5b50610262610425565b6040518082815260200191505060405180910390f35b34801561028457600080fd5b5061028d61042b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102db57600080fd5b506102e4610450565b604051808260ff1660ff16815260200191505060405180910390f35b34801561030c57600080fd5b50610315610455565b6040518082815260200191505060405180910390f35b34801561033757600080fd5b5061034061045b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038e57600080fd5b50610397610481565b604051808215151515815260200191505060405180910390f35b60035481565b600181565b620f424081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600481815481106103f657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff168156fea165627a7a723058201ad326563df01e279e60dfba8f6610d07e653666c4be8ecd67c56aa15da6c7750029608060405234801561001057600080fd5b5060405160208061021c8339810180604052602081101561003057600080fd5b810190808051906020019092919050505080600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561007c57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061010e8061010e6000396000f3fe608060405260043610601c5760003560e01c8063a619486e146069575b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050366000803760008036600084600019f43d6000803e80600081146064573d6000f35b3d6000fd5b348015607457600080fd5b50607b60bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168156fea165627a7a72305820cbbb84b03efb936eec7a7a63670e9c47ced04c53284f2b0435d190970bfd2eb40029608060405234801561001057600080fd5b5060405160a0806108f9833981018060405260a081101561003057600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505084600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100a457600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561014f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561015f575060028160ff1610155b61016857600080fd5b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008090505b8160ff168160ff1610156103475760008560405161020d90610352565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f08015801561025f573d6000803e3d6000fd5b50905060048190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507fad24776dc347085865b6988e249c191fc22d9b31cf54cb62233c3c16be1736ee8183604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff1681526020019250505060405180910390a15080806001019150506101f0565b50505050505061035f565b61021c806106dd83390190565b61036f8061036e6000396000f3fe6080604052600436106100555760003560e01c806327793f87146100a35780637dc0d1d0146100ce5780638abe59ea14610125578063a619486e146101a0578063b2016bd4146101f7578063ccdf68f31461024e575b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050366000803760008036600084600019f43d6000803e806000811461009e573d6000f35b3d6000fd5b3480156100af57600080fd5b506100b861027d565b6040518082815260200191505060405180910390f35b3480156100da57600080fd5b506100e3610283565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561013157600080fd5b5061015e6004803603602081101561014857600080fd5b81019080803590602001909291905050506102a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101ac57600080fd5b506101b56102e5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561020357600080fd5b5061020c61030a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025a57600080fd5b50610263610330565b604051808215151515815260200191505060405180910390f35b60035481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600481815481106102b657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff168156fea165627a7a72305820014e05e63184c259de93dc2c6cc18e3837a4303e70d98d8e73308d4c09d57e8e0029608060405234801561001057600080fd5b5060405160208061021c8339810180604052602081101561003057600080fd5b810190808051906020019092919050505080600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561007c57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061010e8061010e6000396000f3fe608060405260043610601c5760003560e01c8063a619486e146069575b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050366000803760008036600084600019f43d6000803e80600081146064573d6000f35b3d6000fd5b348015607457600080fd5b50607b60bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168156fea165627a7a72305820cbbb84b03efb936eec7a7a63670e9c47ced04c53284f2b0435d190970bfd2eb40029a165627a7a7230582008101e4f0a242b6a57fb1991dcb40883536c1ac1cc65fdd821a6a5d6b3ccf3dd0029",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638d1d2c211161005b5780638d1d2c21146101ce5780639897e8a51461023c5780639df0c176146102aa578063d1de36c21461035b5761007d565b80634b62cde6146100825780634ea0c802146100cc5780635ea194a314610116575b600080fd5b61008a6103a5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100d46103cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61018c6004803603608081101561012c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506103f1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101fa600480360360208110156101e457600080fd5b810190808035906020019092919050505061079e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102686004803603602081101561025257600080fd5b81019080803590602001909291905050506107d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610319600480360360608110156102c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050610804565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610363610bab565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008085858585604051602001808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401838152602001828152602001945050505050604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104ff57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787878760405161055590610bd1565b808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050604051809103906000f08015801561064e573d6000803e3d6000fd5b509150816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fd613e63983a1538814e1b390fc232d0e20462cf7410924f6b6a5f29ea38e82ed8388888888604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a250949350505050565b60006020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080848484604051602001808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018260ff1660ff1660f81b81526001019350505050604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461091257600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686868660405161096790610bde565b808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff16815260200195505050505050604051809103906000f080158015610a5f573d6000803e3d6000fd5b5091508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f9732758aee476f5125b50d29cc43e28422f12ec078ba9f5c712f9dbd52796f5983878787604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff16815260200194505050505060405180910390a2509392505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a5d80610bec83390190565b6108f9806116498339019056fe608060405234801561001057600080fd5b5060405160c080610a5d833981018060405260c081101561003057600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505085600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100ae57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156101595750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b61016257600080fd5b83600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008090505b60028160ff16101561033f5760008660405161020590610365565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015610257573d6000803e3d6000fd5b50905060048190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507fad24776dc347085865b6988e249c191fc22d9b31cf54cb62233c3c16be1736ee8183604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff1681526020019250505060405180910390a15080806001019150506101ea565b5081811361034c57600080fd5b8160058190555080600681905550505050505050610372565b61021c8061084183390190565b6104c0806103816000396000f3fe60806040526004361061009c5760003560e01c8063a384d6ff11610064578063a384d6ff1461024d578063a619486e14610278578063a871da91146102cf578063b09ad8a014610300578063b2016bd41461032b578063ccdf68f3146103825761009c565b806327793f87146100ea578063561cce0a146101155780636e5452fe146101465780637dc0d1d01461017b5780638abe59ea146101d2575b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050366000803760008036600084600019f43d6000803e80600081146100e5573d6000f35b3d6000fd5b3480156100f657600080fd5b506100ff6103b1565b6040518082815260200191505060405180910390f35b34801561012157600080fd5b5061012a6103b7565b604051808260ff1660ff16815260200191505060405180910390f35b34801561015257600080fd5b5061015b6103bc565b604051808262ffffff1662ffffff16815260200191505060405180910390f35b34801561018757600080fd5b506101906103c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101de57600080fd5b5061020b600480360360208110156101f557600080fd5b81019080803590602001909291905050506103e9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025957600080fd5b50610262610425565b6040518082815260200191505060405180910390f35b34801561028457600080fd5b5061028d61042b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102db57600080fd5b506102e4610450565b604051808260ff1660ff16815260200191505060405180910390f35b34801561030c57600080fd5b50610315610455565b6040518082815260200191505060405180910390f35b34801561033757600080fd5b5061034061045b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038e57600080fd5b50610397610481565b604051808215151515815260200191505060405180910390f35b60035481565b600181565b620f424081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600481815481106103f657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff168156fea165627a7a723058201ad326563df01e279e60dfba8f6610d07e653666c4be8ecd67c56aa15da6c7750029608060405234801561001057600080fd5b5060405160208061021c8339810180604052602081101561003057600080fd5b810190808051906020019092919050505080600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561007c57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061010e8061010e6000396000f3fe608060405260043610601c5760003560e01c8063a619486e146069575b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050366000803760008036600084600019f43d6000803e80600081146064573d6000f35b3d6000fd5b348015607457600080fd5b50607b60bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168156fea165627a7a72305820cbbb84b03efb936eec7a7a63670e9c47ced04c53284f2b0435d190970bfd2eb40029608060405234801561001057600080fd5b5060405160a0806108f9833981018060405260a081101561003057600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505084600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100a457600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561014f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561015f575060028160ff1610155b61016857600080fd5b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008090505b8160ff168160ff1610156103475760008560405161020d90610352565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f08015801561025f573d6000803e3d6000fd5b50905060048190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507fad24776dc347085865b6988e249c191fc22d9b31cf54cb62233c3c16be1736ee8183604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff1681526020019250505060405180910390a15080806001019150506101f0565b50505050505061035f565b61021c806106dd83390190565b61036f8061036e6000396000f3fe6080604052600436106100555760003560e01c806327793f87146100a35780637dc0d1d0146100ce5780638abe59ea14610125578063a619486e146101a0578063b2016bd4146101f7578063ccdf68f31461024e575b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050366000803760008036600084600019f43d6000803e806000811461009e573d6000f35b3d6000fd5b3480156100af57600080fd5b506100b861027d565b6040518082815260200191505060405180910390f35b3480156100da57600080fd5b506100e3610283565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561013157600080fd5b5061015e6004803603602081101561014857600080fd5b81019080803590602001909291905050506102a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101ac57600080fd5b506101b56102e5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561020357600080fd5b5061020c61030a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025a57600080fd5b50610263610330565b604051808215151515815260200191505060405180910390f35b60035481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600481815481106102b657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff168156fea165627a7a72305820014e05e63184c259de93dc2c6cc18e3837a4303e70d98d8e73308d4c09d57e8e0029608060405234801561001057600080fd5b5060405160208061021c8339810180604052602081101561003057600080fd5b810190808051906020019092919050505080600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561007c57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061010e8061010e6000396000f3fe608060405260043610601c5760003560e01c8063a619486e146069575b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050366000803760008036600084600019f43d6000803e80600081146064573d6000f35b3d6000fd5b348015607457600080fd5b50607b60bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168156fea165627a7a72305820cbbb84b03efb936eec7a7a63670e9c47ced04c53284f2b0435d190970bfd2eb40029a165627a7a7230582008101e4f0a242b6a57fb1991dcb40883536c1ac1cc65fdd821a6a5d6b3ccf3dd0029",
  "sourceMap": "235:3477:2:-;;;948:368;8:9:-1;5:2;;;30:1;27;20:12;5:2;948:368:2;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;948:368:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1168:27;1139:26;;:56;;;;;;;;;;;;;;;;;;1229:22;1205:21;;:46;;;;;;;;;;;;;;;;;;1286:23;1261:22;;:48;;;;;;;;;;;;;;;;;;948:368;;;235:3477;;;;;;",
  "deployedSourceMap": "235:3477:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;235:3477:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;757:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;813:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2849:861;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2849:861:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;631:62;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;631:62:2;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;699:52;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;699:52:2;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1636:839;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1636:839:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;859:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;757:50;;;;;;;;;;;;;:::o;813:40::-;;;;;;;;;;;;;:::o;2849:861::-;3016:25;3057:17;3104:15;3121:6;3129:10;3141;3087:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3087:65:2;;;3077:76;;;;;;3057:96;;3253:1;3209:46;;3217:12;:23;3230:9;3217:23;;;;;;;;;;;;;;;;;;;;;3209:46;;;3201:55;;;;;;3368:21;;;;;;;;;;;3412:22;;;;;;;;;;;3449:15;3478:6;3498:10;3522;3326:216;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3326:216:2;3290:254;;3580:13;3554:12;:23;3567:9;3554:23;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;3628:10;3608:95;;;3640:13;3655:15;3672:6;3680:10;3692;3608:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2849:861;;;;;;;:::o;631:62::-;;;;;;;;;;;;;;;;;;;;;;:::o;699:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;1636:839::-;1788:30;1834:17;1881:15;1898:6;1906:12;1864:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1864:55:2;;;1854:66;;;;;;1834:86;;2025:1;1976:51;;1984:17;:28;2002:9;1984:28;;;;;;;;;;;;;;;;;;;;;1976:51;;;1968:60;;;;;;2150:26;;;;;;;;;;;2199:22;;;;;;;;;;;2236:15;2265:6;2285:12;2103:204;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2103:204:2;2062:247;;2350:13;2319:17;:28;2337:9;2319:28;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;2403:10;2378:90;;;2415:13;2430:15;2447:6;2455:12;2378:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1636:839;;;;;;:::o;859:42::-;;;;;;;;;;;;;:::o;235:3477::-;;;;;;;;:::o;:::-;;;;;;;;:::o",
  "source": "pragma solidity ^0.5.0;\nimport \"../Events/CategoricalEvent.sol\";\nimport \"../Events/ScalarEvent.sol\";\n\n\n/// @title Event factory contract - Allows creation of categorical and scalar events\n/// @author Stefan George - <stefan@gnosis.pm>\ncontract EventFactory {\n\n    /*\n     *  Events\n     */\n    event CategoricalEventCreation(address indexed creator, CategoricalEvent categoricalEvent, ERC20 collateralToken, Oracle oracle, uint8 outcomeCount);\n    event ScalarEventCreation(address indexed creator, ScalarEvent scalarEvent, ERC20 collateralToken, Oracle oracle, int lowerBound, int upperBound);\n\n    /*\n     *  Storage\n     */\n    mapping (bytes32 => CategoricalEvent) public categoricalEvents;\n    mapping (bytes32 => ScalarEvent) public scalarEvents;\n    CategoricalEvent public categoricalEventMasterCopy;\n    ScalarEvent public scalarEventMasterCopy;\n    OutcomeToken public outcomeTokenMasterCopy;\n\n    /*\n     *  Public functions\n     */\n    constructor(\n        CategoricalEvent _categoricalEventMasterCopy,\n        ScalarEvent _scalarEventMasterCopy,\n        OutcomeToken _outcomeTokenMasterCopy\n    )\n        public\n    {\n        categoricalEventMasterCopy = _categoricalEventMasterCopy;\n        scalarEventMasterCopy = _scalarEventMasterCopy;\n        outcomeTokenMasterCopy = _outcomeTokenMasterCopy;\n    }\n\n    /// @dev Creates a new categorical event and adds it to the event mapping\n    /// @param collateralToken Tokens used as collateral in exchange for outcome tokens\n    /// @param oracle Oracle contract used to resolve the event\n    /// @param outcomeCount Number of event outcomes\n    /// @return Event contract\n    function createCategoricalEvent(\n        ERC20 collateralToken,\n        Oracle oracle,\n        uint8 outcomeCount\n    )\n        public\n        returns (CategoricalEvent eventContract)\n    {\n        bytes32 eventHash = keccak256(abi.encodePacked(collateralToken, oracle, outcomeCount));\n        // Event should not exist yet\n        require(address(categoricalEvents[eventHash]) == address(0));\n        // Create event\n        eventContract = CategoricalEvent(address(new CategoricalEventProxy(\n            address(categoricalEventMasterCopy),\n            address(outcomeTokenMasterCopy),\n            collateralToken,\n            oracle,\n            outcomeCount\n        )));\n        categoricalEvents[eventHash] = eventContract;\n        emit CategoricalEventCreation(msg.sender, eventContract, collateralToken, oracle, outcomeCount);\n    }\n\n    /// @dev Creates a new scalar event and adds it to the event mapping\n    /// @param collateralToken Tokens used as collateral in exchange for outcome tokens\n    /// @param oracle Oracle contract used to resolve the event\n    /// @param lowerBound Lower bound for event outcome\n    /// @param upperBound Lower bound for event outcome\n    /// @return Event contract\n    function createScalarEvent(\n        ERC20 collateralToken,\n        Oracle oracle,\n        int lowerBound,\n        int upperBound\n    )\n        public\n        returns (ScalarEvent eventContract)\n    {\n        bytes32 eventHash = keccak256(abi.encodePacked(collateralToken, oracle, lowerBound, upperBound));\n        // Event should not exist yet\n        require(address(scalarEvents[eventHash]) == address(0));\n        // Create event\n        eventContract = ScalarEvent(address(new ScalarEventProxy(\n            address(scalarEventMasterCopy),\n            address(outcomeTokenMasterCopy),\n            collateralToken,\n            oracle,\n            lowerBound,\n            upperBound\n        )));\n        scalarEvents[eventHash] = eventContract;\n        emit ScalarEventCreation(msg.sender, eventContract, collateralToken, oracle, lowerBound, upperBound);\n    }\n}\n",
  "sourcePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/EventFactory.sol",
  "ast": {
    "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/EventFactory.sol",
    "exportedSymbols": {
      "EventFactory": [
        602
      ]
    },
    "id": 603,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 394,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/CategoricalEvent.sol",
        "file": "../Events/CategoricalEvent.sol",
        "id": 395,
        "nodeType": "ImportDirective",
        "scope": 603,
        "sourceUnit": 159,
        "src": "24:40:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol",
        "file": "../Events/ScalarEvent.sol",
        "id": 396,
        "nodeType": "ImportDirective",
        "scope": 603,
        "sourceUnit": 871,
        "src": "65:35:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [
          89,
          720
        ],
        "contractKind": "contract",
        "documentation": "@title Event factory contract - Allows creation of categorical and scalar events\n @author Stefan George - <stefan@gnosis.pm>",
        "fullyImplemented": true,
        "id": 602,
        "linearizedBaseContracts": [
          602
        ],
        "name": "EventFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 408,
            "name": "CategoricalEventCreation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 407,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 398,
                  "indexed": true,
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "325:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 397,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "325:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 400,
                  "indexed": false,
                  "name": "categoricalEvent",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "350:33:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                    "typeString": "contract CategoricalEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 399,
                    "name": "CategoricalEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 158,
                    "src": "350:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 402,
                  "indexed": false,
                  "name": "collateralToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "385:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$7778",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 401,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7778,
                    "src": "385:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$7778",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 404,
                  "indexed": false,
                  "name": "oracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "408:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Oracle_$4841",
                    "typeString": "contract Oracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 403,
                    "name": "Oracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4841,
                    "src": "408:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Oracle_$4841",
                      "typeString": "contract Oracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 406,
                  "indexed": false,
                  "name": "outcomeCount",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "423:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 405,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "423:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "324:118:2"
            },
            "src": "294:149:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 422,
            "name": "ScalarEventCreation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 421,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 410,
                  "indexed": true,
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "474:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "474:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 412,
                  "indexed": false,
                  "name": "scalarEvent",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "499:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ScalarEvent_$870",
                    "typeString": "contract ScalarEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 411,
                    "name": "ScalarEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 870,
                    "src": "499:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 414,
                  "indexed": false,
                  "name": "collateralToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "524:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$7778",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 413,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7778,
                    "src": "524:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$7778",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 416,
                  "indexed": false,
                  "name": "oracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "547:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Oracle_$4841",
                    "typeString": "contract Oracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 415,
                    "name": "Oracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4841,
                    "src": "547:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Oracle_$4841",
                      "typeString": "contract Oracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 418,
                  "indexed": false,
                  "name": "lowerBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "562:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 417,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "562:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 420,
                  "indexed": false,
                  "name": "upperBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "578:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 419,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "578:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "473:120:2"
            },
            "src": "448:146:2"
          },
          {
            "constant": false,
            "id": 426,
            "name": "categoricalEvents",
            "nodeType": "VariableDeclaration",
            "scope": 602,
            "src": "631:62:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CategoricalEvent_$158_$",
              "typeString": "mapping(bytes32 => contract CategoricalEvent)"
            },
            "typeName": {
              "id": 425,
              "keyType": {
                "id": 423,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "640:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "631:37:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CategoricalEvent_$158_$",
                "typeString": "mapping(bytes32 => contract CategoricalEvent)"
              },
              "valueType": {
                "contractScope": null,
                "id": 424,
                "name": "CategoricalEvent",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 158,
                "src": "651:16:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                  "typeString": "contract CategoricalEvent"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 430,
            "name": "scalarEvents",
            "nodeType": "VariableDeclaration",
            "scope": 602,
            "src": "699:52:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_ScalarEvent_$870_$",
              "typeString": "mapping(bytes32 => contract ScalarEvent)"
            },
            "typeName": {
              "id": 429,
              "keyType": {
                "id": 427,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "708:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "699:32:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_ScalarEvent_$870_$",
                "typeString": "mapping(bytes32 => contract ScalarEvent)"
              },
              "valueType": {
                "contractScope": null,
                "id": 428,
                "name": "ScalarEvent",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 870,
                "src": "719:11:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ScalarEvent_$870",
                  "typeString": "contract ScalarEvent"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 432,
            "name": "categoricalEventMasterCopy",
            "nodeType": "VariableDeclaration",
            "scope": 602,
            "src": "757:50:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_CategoricalEvent_$158",
              "typeString": "contract CategoricalEvent"
            },
            "typeName": {
              "contractScope": null,
              "id": 431,
              "name": "CategoricalEvent",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 158,
              "src": "757:16:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                "typeString": "contract CategoricalEvent"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 434,
            "name": "scalarEventMasterCopy",
            "nodeType": "VariableDeclaration",
            "scope": 602,
            "src": "813:40:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ScalarEvent_$870",
              "typeString": "contract ScalarEvent"
            },
            "typeName": {
              "contractScope": null,
              "id": 433,
              "name": "ScalarEvent",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 870,
              "src": "813:11:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ScalarEvent_$870",
                "typeString": "contract ScalarEvent"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 436,
            "name": "outcomeTokenMasterCopy",
            "nodeType": "VariableDeclaration",
            "scope": 602,
            "src": "859:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_OutcomeToken_$5793",
              "typeString": "contract OutcomeToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 435,
              "name": "OutcomeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5793,
              "src": "859:12:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                "typeString": "contract OutcomeToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 457,
              "nodeType": "Block",
              "src": "1129:187:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 445,
                      "name": "categoricalEventMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 432,
                      "src": "1139:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 446,
                      "name": "_categoricalEventMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 438,
                      "src": "1168:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "src": "1139:56:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "id": 448,
                  "nodeType": "ExpressionStatement",
                  "src": "1139:56:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 449,
                      "name": "scalarEventMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 434,
                      "src": "1205:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 450,
                      "name": "_scalarEventMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 440,
                      "src": "1229:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "src": "1205:46:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "id": 452,
                  "nodeType": "ExpressionStatement",
                  "src": "1205:46:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 453,
                      "name": "outcomeTokenMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 436,
                      "src": "1261:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                        "typeString": "contract OutcomeToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 454,
                      "name": "_outcomeTokenMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 442,
                      "src": "1286:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                        "typeString": "contract OutcomeToken"
                      }
                    },
                    "src": "1261:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                      "typeString": "contract OutcomeToken"
                    }
                  },
                  "id": 456,
                  "nodeType": "ExpressionStatement",
                  "src": "1261:48:2"
                }
              ]
            },
            "documentation": null,
            "id": 458,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 438,
                  "name": "_categoricalEventMasterCopy",
                  "nodeType": "VariableDeclaration",
                  "scope": 458,
                  "src": "969:44:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                    "typeString": "contract CategoricalEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 437,
                    "name": "CategoricalEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 158,
                    "src": "969:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 440,
                  "name": "_scalarEventMasterCopy",
                  "nodeType": "VariableDeclaration",
                  "scope": 458,
                  "src": "1023:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ScalarEvent_$870",
                    "typeString": "contract ScalarEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 439,
                    "name": "ScalarEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 870,
                    "src": "1023:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 442,
                  "name": "_outcomeTokenMasterCopy",
                  "nodeType": "VariableDeclaration",
                  "scope": 458,
                  "src": "1067:36:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                    "typeString": "contract OutcomeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 441,
                    "name": "OutcomeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5793,
                    "src": "1067:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                      "typeString": "contract OutcomeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "959:150:2"
            },
            "returnParameters": {
              "id": 444,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1129:0:2"
            },
            "scope": 602,
            "src": "948:368:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 526,
              "nodeType": "Block",
              "src": "1824:651:2",
              "statements": [
                {
                  "assignments": [
                    470
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 470,
                      "name": "eventHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 526,
                      "src": "1834:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 469,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1834:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 479,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 474,
                            "name": "collateralToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 460,
                            "src": "1881:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$7778",
                              "typeString": "contract ERC20"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 475,
                            "name": "oracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 462,
                            "src": "1898:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Oracle_$4841",
                              "typeString": "contract Oracle"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 476,
                            "name": "outcomeCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 464,
                            "src": "1906:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$7778",
                              "typeString": "contract ERC20"
                            },
                            {
                              "typeIdentifier": "t_contract$_Oracle_$4841",
                              "typeString": "contract Oracle"
                            },
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 472,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7907,
                            "src": "1864:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1864:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 477,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1864:55:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 471,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7914,
                      "src": "1854:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1854:66:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1834:86:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 482,
                                "name": "categoricalEvents",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 426,
                                "src": "1984:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CategoricalEvent_$158_$",
                                  "typeString": "mapping(bytes32 => contract CategoricalEvent)"
                                }
                              },
                              "id": 484,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 483,
                                "name": "eventHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 470,
                                "src": "2002:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1984:28:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                "typeString": "contract CategoricalEvent"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                "typeString": "contract CategoricalEvent"
                              }
                            ],
                            "id": 481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1976:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1976:37:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2025:1:2",
                              "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": 486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2017:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 488,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2017:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1976:51:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 480,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "1968:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1968:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 491,
                  "nodeType": "ExpressionStatement",
                  "src": "1968:60:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 492,
                      "name": "eventContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 467,
                      "src": "2062:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 498,
                                      "name": "categoricalEventMasterCopy",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 432,
                                      "src": "2150:26:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                        "typeString": "contract CategoricalEvent"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                        "typeString": "contract CategoricalEvent"
                                      }
                                    ],
                                    "id": 497,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2142:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 499,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2142:35:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 501,
                                      "name": "outcomeTokenMasterCopy",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 436,
                                      "src": "2199:22:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                        "typeString": "contract OutcomeToken"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                        "typeString": "contract OutcomeToken"
                                      }
                                    ],
                                    "id": 500,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2191:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 502,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2191:31:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 503,
                                  "name": "collateralToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 460,
                                  "src": "2236:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$7778",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 504,
                                  "name": "oracle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 462,
                                  "src": "2265:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Oracle_$4841",
                                    "typeString": "contract Oracle"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 505,
                                  "name": "outcomeCount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 464,
                                  "src": "2285:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_ERC20_$7778",
                                    "typeString": "contract ERC20"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_Oracle_$4841",
                                    "typeString": "contract Oracle"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "id": 496,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "NewExpression",
                                "src": "2103:25:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_uint8_$returns$_t_contract$_CategoricalEventProxy_$89_$",
                                  "typeString": "function (address,address,contract ERC20,contract Oracle,uint8) returns (contract CategoricalEventProxy)"
                                },
                                "typeName": {
                                  "contractScope": null,
                                  "id": 495,
                                  "name": "CategoricalEventProxy",
                                  "nodeType": "UserDefinedTypeName",
                                  "referencedDeclaration": 89,
                                  "src": "2107:21:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CategoricalEventProxy_$89",
                                    "typeString": "contract CategoricalEventProxy"
                                  }
                                }
                              },
                              "id": 506,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2103:204:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CategoricalEventProxy_$89",
                                "typeString": "contract CategoricalEventProxy"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_CategoricalEventProxy_$89",
                                "typeString": "contract CategoricalEventProxy"
                              }
                            ],
                            "id": 494,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2095:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 507,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2095:213:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 493,
                        "name": "CategoricalEvent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 158,
                        "src": "2078:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_CategoricalEvent_$158_$",
                          "typeString": "type(contract CategoricalEvent)"
                        }
                      },
                      "id": 508,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2078:231:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "src": "2062:247:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "id": 510,
                  "nodeType": "ExpressionStatement",
                  "src": "2062:247:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 515,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 511,
                        "name": "categoricalEvents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 426,
                        "src": "2319:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CategoricalEvent_$158_$",
                          "typeString": "mapping(bytes32 => contract CategoricalEvent)"
                        }
                      },
                      "id": 513,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 512,
                        "name": "eventHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 470,
                        "src": "2337:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2319:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 514,
                      "name": "eventContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 467,
                      "src": "2350:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "src": "2319:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "id": 516,
                  "nodeType": "ExpressionStatement",
                  "src": "2319:44:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 518,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7920,
                          "src": "2403:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2403:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 520,
                        "name": "eventContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 467,
                        "src": "2415:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                          "typeString": "contract CategoricalEvent"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 521,
                        "name": "collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 460,
                        "src": "2430:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$7778",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 522,
                        "name": "oracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 462,
                        "src": "2447:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Oracle_$4841",
                          "typeString": "contract Oracle"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 523,
                        "name": "outcomeCount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 464,
                        "src": "2455:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                          "typeString": "contract CategoricalEvent"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20_$7778",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_contract$_Oracle_$4841",
                          "typeString": "contract Oracle"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 517,
                      "name": "CategoricalEventCreation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 408,
                      "src": "2378:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_CategoricalEvent_$158_$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_uint8_$returns$__$",
                        "typeString": "function (address,contract CategoricalEvent,contract ERC20,contract Oracle,uint8)"
                      }
                    },
                    "id": 524,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2378:90:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 525,
                  "nodeType": "EmitStatement",
                  "src": "2373:95:2"
                }
              ]
            },
            "documentation": "@dev Creates a new categorical event and adds it to the event mapping\n @param collateralToken Tokens used as collateral in exchange for outcome tokens\n @param oracle Oracle contract used to resolve the event\n @param outcomeCount Number of event outcomes\n @return Event contract",
            "id": 527,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createCategoricalEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 465,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 460,
                  "name": "collateralToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 527,
                  "src": "1677:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$7778",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 459,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7778,
                    "src": "1677:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$7778",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 462,
                  "name": "oracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 527,
                  "src": "1708:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Oracle_$4841",
                    "typeString": "contract Oracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 461,
                    "name": "Oracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4841,
                    "src": "1708:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Oracle_$4841",
                      "typeString": "contract Oracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 464,
                  "name": "outcomeCount",
                  "nodeType": "VariableDeclaration",
                  "scope": 527,
                  "src": "1731:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 463,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1731:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1667:88:2"
            },
            "returnParameters": {
              "id": 468,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 467,
                  "name": "eventContract",
                  "nodeType": "VariableDeclaration",
                  "scope": 527,
                  "src": "1788:30:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                    "typeString": "contract CategoricalEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 466,
                    "name": "CategoricalEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 158,
                    "src": "1788:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1787:32:2"
            },
            "scope": 602,
            "src": "1636:839:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 600,
              "nodeType": "Block",
              "src": "3047:663:2",
              "statements": [
                {
                  "assignments": [
                    541
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 541,
                      "name": "eventHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 600,
                      "src": "3057:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 540,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3057:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 551,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 545,
                            "name": "collateralToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 529,
                            "src": "3104:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$7778",
                              "typeString": "contract ERC20"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 546,
                            "name": "oracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 531,
                            "src": "3121:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Oracle_$4841",
                              "typeString": "contract Oracle"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 547,
                            "name": "lowerBound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 533,
                            "src": "3129:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 548,
                            "name": "upperBound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 535,
                            "src": "3141:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$7778",
                              "typeString": "contract ERC20"
                            },
                            {
                              "typeIdentifier": "t_contract$_Oracle_$4841",
                              "typeString": "contract Oracle"
                            },
                            {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 543,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7907,
                            "src": "3087:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3087:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3087:65:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 542,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7914,
                      "src": "3077:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3077:76:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3057:96:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 561,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 554,
                                "name": "scalarEvents",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 430,
                                "src": "3217:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_ScalarEvent_$870_$",
                                  "typeString": "mapping(bytes32 => contract ScalarEvent)"
                                }
                              },
                              "id": 556,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 555,
                                "name": "eventHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 541,
                                "src": "3230:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3217:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                "typeString": "contract ScalarEvent"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                "typeString": "contract ScalarEvent"
                              }
                            ],
                            "id": 553,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3209:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3209:32:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 559,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3253:1:2",
                              "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": 558,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3245:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 560,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3245:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3209:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 552,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "3201:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3201:55:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 563,
                  "nodeType": "ExpressionStatement",
                  "src": "3201:55:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 564,
                      "name": "eventContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 538,
                      "src": "3290:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 570,
                                      "name": "scalarEventMasterCopy",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 434,
                                      "src": "3368:21:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                        "typeString": "contract ScalarEvent"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                        "typeString": "contract ScalarEvent"
                                      }
                                    ],
                                    "id": 569,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3360:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 571,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3360:30:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 573,
                                      "name": "outcomeTokenMasterCopy",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 436,
                                      "src": "3412:22:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                        "typeString": "contract OutcomeToken"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                        "typeString": "contract OutcomeToken"
                                      }
                                    ],
                                    "id": 572,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3404:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 574,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3404:31:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 575,
                                  "name": "collateralToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 529,
                                  "src": "3449:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$7778",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 576,
                                  "name": "oracle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 531,
                                  "src": "3478:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Oracle_$4841",
                                    "typeString": "contract Oracle"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 577,
                                  "name": "lowerBound",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 533,
                                  "src": "3498:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 578,
                                  "name": "upperBound",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 535,
                                  "src": "3522:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_ERC20_$7778",
                                    "typeString": "contract ERC20"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_Oracle_$4841",
                                    "typeString": "contract Oracle"
                                  },
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "id": 568,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "NewExpression",
                                "src": "3326:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_int256_$_t_int256_$returns$_t_contract$_ScalarEventProxy_$720_$",
                                  "typeString": "function (address,address,contract ERC20,contract Oracle,int256,int256) returns (contract ScalarEventProxy)"
                                },
                                "typeName": {
                                  "contractScope": null,
                                  "id": 567,
                                  "name": "ScalarEventProxy",
                                  "nodeType": "UserDefinedTypeName",
                                  "referencedDeclaration": 720,
                                  "src": "3330:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ScalarEventProxy_$720",
                                    "typeString": "contract ScalarEventProxy"
                                  }
                                }
                              },
                              "id": 579,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3326:216:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ScalarEventProxy_$720",
                                "typeString": "contract ScalarEventProxy"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ScalarEventProxy_$720",
                                "typeString": "contract ScalarEventProxy"
                              }
                            ],
                            "id": 566,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3318:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3318:225:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 565,
                        "name": "ScalarEvent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 870,
                        "src": "3306:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ScalarEvent_$870_$",
                          "typeString": "type(contract ScalarEvent)"
                        }
                      },
                      "id": 581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3306:238:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "src": "3290:254:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "id": 583,
                  "nodeType": "ExpressionStatement",
                  "src": "3290:254:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 584,
                        "name": "scalarEvents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 430,
                        "src": "3554:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_ScalarEvent_$870_$",
                          "typeString": "mapping(bytes32 => contract ScalarEvent)"
                        }
                      },
                      "id": 586,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 585,
                        "name": "eventHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 541,
                        "src": "3567:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3554:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 587,
                      "name": "eventContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 538,
                      "src": "3580:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "src": "3554:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "id": 589,
                  "nodeType": "ExpressionStatement",
                  "src": "3554:39:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 591,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7920,
                          "src": "3628:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 592,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3628:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 593,
                        "name": "eventContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 538,
                        "src": "3640:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ScalarEvent_$870",
                          "typeString": "contract ScalarEvent"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 594,
                        "name": "collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 529,
                        "src": "3655:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$7778",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 595,
                        "name": "oracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 531,
                        "src": "3672:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Oracle_$4841",
                          "typeString": "contract Oracle"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 596,
                        "name": "lowerBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 533,
                        "src": "3680:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 597,
                        "name": "upperBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 535,
                        "src": "3692:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_ScalarEvent_$870",
                          "typeString": "contract ScalarEvent"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20_$7778",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_contract$_Oracle_$4841",
                          "typeString": "contract Oracle"
                        },
                        {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      ],
                      "id": 590,
                      "name": "ScalarEventCreation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 422,
                      "src": "3608:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_ScalarEvent_$870_$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_int256_$_t_int256_$returns$__$",
                        "typeString": "function (address,contract ScalarEvent,contract ERC20,contract Oracle,int256,int256)"
                      }
                    },
                    "id": 598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3608:95:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 599,
                  "nodeType": "EmitStatement",
                  "src": "3603:100:2"
                }
              ]
            },
            "documentation": "@dev Creates a new scalar event and adds it to the event mapping\n @param collateralToken Tokens used as collateral in exchange for outcome tokens\n @param oracle Oracle contract used to resolve the event\n @param lowerBound Lower bound for event outcome\n @param upperBound Lower bound for event outcome\n @return Event contract",
            "id": 601,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createScalarEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 536,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 529,
                  "name": "collateralToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 601,
                  "src": "2885:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$7778",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 528,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7778,
                    "src": "2885:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$7778",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 531,
                  "name": "oracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 601,
                  "src": "2916:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Oracle_$4841",
                    "typeString": "contract Oracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 530,
                    "name": "Oracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4841,
                    "src": "2916:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Oracle_$4841",
                      "typeString": "contract Oracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 533,
                  "name": "lowerBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 601,
                  "src": "2939:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 532,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "2939:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 535,
                  "name": "upperBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 601,
                  "src": "2963:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 534,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "2963:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2875:108:2"
            },
            "returnParameters": {
              "id": 539,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 538,
                  "name": "eventContract",
                  "nodeType": "VariableDeclaration",
                  "scope": 601,
                  "src": "3016:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ScalarEvent_$870",
                    "typeString": "contract ScalarEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 537,
                    "name": "ScalarEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 870,
                    "src": "3016:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3015:27:2"
            },
            "scope": 602,
            "src": "2849:861:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 603,
        "src": "235:3477:2"
      }
    ],
    "src": "0:3713:2"
  },
  "legacyAST": {
    "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/EventFactory.sol",
    "exportedSymbols": {
      "EventFactory": [
        602
      ]
    },
    "id": 603,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 394,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/CategoricalEvent.sol",
        "file": "../Events/CategoricalEvent.sol",
        "id": 395,
        "nodeType": "ImportDirective",
        "scope": 603,
        "sourceUnit": 159,
        "src": "24:40:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol",
        "file": "../Events/ScalarEvent.sol",
        "id": 396,
        "nodeType": "ImportDirective",
        "scope": 603,
        "sourceUnit": 871,
        "src": "65:35:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [
          89,
          720
        ],
        "contractKind": "contract",
        "documentation": "@title Event factory contract - Allows creation of categorical and scalar events\n @author Stefan George - <stefan@gnosis.pm>",
        "fullyImplemented": true,
        "id": 602,
        "linearizedBaseContracts": [
          602
        ],
        "name": "EventFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 408,
            "name": "CategoricalEventCreation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 407,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 398,
                  "indexed": true,
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "325:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 397,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "325:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 400,
                  "indexed": false,
                  "name": "categoricalEvent",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "350:33:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                    "typeString": "contract CategoricalEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 399,
                    "name": "CategoricalEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 158,
                    "src": "350:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 402,
                  "indexed": false,
                  "name": "collateralToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "385:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$7778",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 401,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7778,
                    "src": "385:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$7778",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 404,
                  "indexed": false,
                  "name": "oracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "408:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Oracle_$4841",
                    "typeString": "contract Oracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 403,
                    "name": "Oracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4841,
                    "src": "408:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Oracle_$4841",
                      "typeString": "contract Oracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 406,
                  "indexed": false,
                  "name": "outcomeCount",
                  "nodeType": "VariableDeclaration",
                  "scope": 408,
                  "src": "423:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 405,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "423:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "324:118:2"
            },
            "src": "294:149:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 422,
            "name": "ScalarEventCreation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 421,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 410,
                  "indexed": true,
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "474:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "474:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 412,
                  "indexed": false,
                  "name": "scalarEvent",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "499:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ScalarEvent_$870",
                    "typeString": "contract ScalarEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 411,
                    "name": "ScalarEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 870,
                    "src": "499:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 414,
                  "indexed": false,
                  "name": "collateralToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "524:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$7778",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 413,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7778,
                    "src": "524:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$7778",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 416,
                  "indexed": false,
                  "name": "oracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "547:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Oracle_$4841",
                    "typeString": "contract Oracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 415,
                    "name": "Oracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4841,
                    "src": "547:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Oracle_$4841",
                      "typeString": "contract Oracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 418,
                  "indexed": false,
                  "name": "lowerBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "562:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 417,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "562:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 420,
                  "indexed": false,
                  "name": "upperBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "578:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 419,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "578:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "473:120:2"
            },
            "src": "448:146:2"
          },
          {
            "constant": false,
            "id": 426,
            "name": "categoricalEvents",
            "nodeType": "VariableDeclaration",
            "scope": 602,
            "src": "631:62:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CategoricalEvent_$158_$",
              "typeString": "mapping(bytes32 => contract CategoricalEvent)"
            },
            "typeName": {
              "id": 425,
              "keyType": {
                "id": 423,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "640:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "631:37:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CategoricalEvent_$158_$",
                "typeString": "mapping(bytes32 => contract CategoricalEvent)"
              },
              "valueType": {
                "contractScope": null,
                "id": 424,
                "name": "CategoricalEvent",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 158,
                "src": "651:16:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                  "typeString": "contract CategoricalEvent"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 430,
            "name": "scalarEvents",
            "nodeType": "VariableDeclaration",
            "scope": 602,
            "src": "699:52:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_ScalarEvent_$870_$",
              "typeString": "mapping(bytes32 => contract ScalarEvent)"
            },
            "typeName": {
              "id": 429,
              "keyType": {
                "id": 427,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "708:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "699:32:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_ScalarEvent_$870_$",
                "typeString": "mapping(bytes32 => contract ScalarEvent)"
              },
              "valueType": {
                "contractScope": null,
                "id": 428,
                "name": "ScalarEvent",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 870,
                "src": "719:11:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ScalarEvent_$870",
                  "typeString": "contract ScalarEvent"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 432,
            "name": "categoricalEventMasterCopy",
            "nodeType": "VariableDeclaration",
            "scope": 602,
            "src": "757:50:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_CategoricalEvent_$158",
              "typeString": "contract CategoricalEvent"
            },
            "typeName": {
              "contractScope": null,
              "id": 431,
              "name": "CategoricalEvent",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 158,
              "src": "757:16:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                "typeString": "contract CategoricalEvent"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 434,
            "name": "scalarEventMasterCopy",
            "nodeType": "VariableDeclaration",
            "scope": 602,
            "src": "813:40:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ScalarEvent_$870",
              "typeString": "contract ScalarEvent"
            },
            "typeName": {
              "contractScope": null,
              "id": 433,
              "name": "ScalarEvent",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 870,
              "src": "813:11:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ScalarEvent_$870",
                "typeString": "contract ScalarEvent"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 436,
            "name": "outcomeTokenMasterCopy",
            "nodeType": "VariableDeclaration",
            "scope": 602,
            "src": "859:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_OutcomeToken_$5793",
              "typeString": "contract OutcomeToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 435,
              "name": "OutcomeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5793,
              "src": "859:12:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                "typeString": "contract OutcomeToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 457,
              "nodeType": "Block",
              "src": "1129:187:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 445,
                      "name": "categoricalEventMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 432,
                      "src": "1139:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 446,
                      "name": "_categoricalEventMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 438,
                      "src": "1168:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "src": "1139:56:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "id": 448,
                  "nodeType": "ExpressionStatement",
                  "src": "1139:56:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 449,
                      "name": "scalarEventMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 434,
                      "src": "1205:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 450,
                      "name": "_scalarEventMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 440,
                      "src": "1229:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "src": "1205:46:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "id": 452,
                  "nodeType": "ExpressionStatement",
                  "src": "1205:46:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 453,
                      "name": "outcomeTokenMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 436,
                      "src": "1261:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                        "typeString": "contract OutcomeToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 454,
                      "name": "_outcomeTokenMasterCopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 442,
                      "src": "1286:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                        "typeString": "contract OutcomeToken"
                      }
                    },
                    "src": "1261:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                      "typeString": "contract OutcomeToken"
                    }
                  },
                  "id": 456,
                  "nodeType": "ExpressionStatement",
                  "src": "1261:48:2"
                }
              ]
            },
            "documentation": null,
            "id": 458,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 438,
                  "name": "_categoricalEventMasterCopy",
                  "nodeType": "VariableDeclaration",
                  "scope": 458,
                  "src": "969:44:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                    "typeString": "contract CategoricalEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 437,
                    "name": "CategoricalEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 158,
                    "src": "969:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 440,
                  "name": "_scalarEventMasterCopy",
                  "nodeType": "VariableDeclaration",
                  "scope": 458,
                  "src": "1023:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ScalarEvent_$870",
                    "typeString": "contract ScalarEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 439,
                    "name": "ScalarEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 870,
                    "src": "1023:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 442,
                  "name": "_outcomeTokenMasterCopy",
                  "nodeType": "VariableDeclaration",
                  "scope": 458,
                  "src": "1067:36:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                    "typeString": "contract OutcomeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 441,
                    "name": "OutcomeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5793,
                    "src": "1067:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                      "typeString": "contract OutcomeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "959:150:2"
            },
            "returnParameters": {
              "id": 444,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1129:0:2"
            },
            "scope": 602,
            "src": "948:368:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 526,
              "nodeType": "Block",
              "src": "1824:651:2",
              "statements": [
                {
                  "assignments": [
                    470
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 470,
                      "name": "eventHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 526,
                      "src": "1834:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 469,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1834:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 479,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 474,
                            "name": "collateralToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 460,
                            "src": "1881:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$7778",
                              "typeString": "contract ERC20"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 475,
                            "name": "oracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 462,
                            "src": "1898:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Oracle_$4841",
                              "typeString": "contract Oracle"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 476,
                            "name": "outcomeCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 464,
                            "src": "1906:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$7778",
                              "typeString": "contract ERC20"
                            },
                            {
                              "typeIdentifier": "t_contract$_Oracle_$4841",
                              "typeString": "contract Oracle"
                            },
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 472,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7907,
                            "src": "1864:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1864:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 477,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1864:55:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 471,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7914,
                      "src": "1854:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1854:66:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1834:86:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 482,
                                "name": "categoricalEvents",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 426,
                                "src": "1984:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CategoricalEvent_$158_$",
                                  "typeString": "mapping(bytes32 => contract CategoricalEvent)"
                                }
                              },
                              "id": 484,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 483,
                                "name": "eventHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 470,
                                "src": "2002:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1984:28:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                "typeString": "contract CategoricalEvent"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                "typeString": "contract CategoricalEvent"
                              }
                            ],
                            "id": 481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1976:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1976:37:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2025:1:2",
                              "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": 486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2017:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 488,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2017:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1976:51:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 480,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "1968:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1968:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 491,
                  "nodeType": "ExpressionStatement",
                  "src": "1968:60:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 492,
                      "name": "eventContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 467,
                      "src": "2062:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 498,
                                      "name": "categoricalEventMasterCopy",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 432,
                                      "src": "2150:26:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                        "typeString": "contract CategoricalEvent"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                        "typeString": "contract CategoricalEvent"
                                      }
                                    ],
                                    "id": 497,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2142:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 499,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2142:35:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 501,
                                      "name": "outcomeTokenMasterCopy",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 436,
                                      "src": "2199:22:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                        "typeString": "contract OutcomeToken"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                        "typeString": "contract OutcomeToken"
                                      }
                                    ],
                                    "id": 500,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2191:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 502,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2191:31:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 503,
                                  "name": "collateralToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 460,
                                  "src": "2236:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$7778",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 504,
                                  "name": "oracle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 462,
                                  "src": "2265:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Oracle_$4841",
                                    "typeString": "contract Oracle"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 505,
                                  "name": "outcomeCount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 464,
                                  "src": "2285:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_ERC20_$7778",
                                    "typeString": "contract ERC20"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_Oracle_$4841",
                                    "typeString": "contract Oracle"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "id": 496,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "NewExpression",
                                "src": "2103:25:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_uint8_$returns$_t_contract$_CategoricalEventProxy_$89_$",
                                  "typeString": "function (address,address,contract ERC20,contract Oracle,uint8) returns (contract CategoricalEventProxy)"
                                },
                                "typeName": {
                                  "contractScope": null,
                                  "id": 495,
                                  "name": "CategoricalEventProxy",
                                  "nodeType": "UserDefinedTypeName",
                                  "referencedDeclaration": 89,
                                  "src": "2107:21:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CategoricalEventProxy_$89",
                                    "typeString": "contract CategoricalEventProxy"
                                  }
                                }
                              },
                              "id": 506,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2103:204:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CategoricalEventProxy_$89",
                                "typeString": "contract CategoricalEventProxy"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_CategoricalEventProxy_$89",
                                "typeString": "contract CategoricalEventProxy"
                              }
                            ],
                            "id": 494,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2095:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 507,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2095:213:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 493,
                        "name": "CategoricalEvent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 158,
                        "src": "2078:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_CategoricalEvent_$158_$",
                          "typeString": "type(contract CategoricalEvent)"
                        }
                      },
                      "id": 508,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2078:231:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "src": "2062:247:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "id": 510,
                  "nodeType": "ExpressionStatement",
                  "src": "2062:247:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 515,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 511,
                        "name": "categoricalEvents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 426,
                        "src": "2319:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_CategoricalEvent_$158_$",
                          "typeString": "mapping(bytes32 => contract CategoricalEvent)"
                        }
                      },
                      "id": 513,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 512,
                        "name": "eventHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 470,
                        "src": "2337:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2319:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 514,
                      "name": "eventContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 467,
                      "src": "2350:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "src": "2319:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "id": 516,
                  "nodeType": "ExpressionStatement",
                  "src": "2319:44:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 518,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7920,
                          "src": "2403:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2403:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 520,
                        "name": "eventContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 467,
                        "src": "2415:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                          "typeString": "contract CategoricalEvent"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 521,
                        "name": "collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 460,
                        "src": "2430:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$7778",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 522,
                        "name": "oracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 462,
                        "src": "2447:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Oracle_$4841",
                          "typeString": "contract Oracle"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 523,
                        "name": "outcomeCount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 464,
                        "src": "2455:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                          "typeString": "contract CategoricalEvent"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20_$7778",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_contract$_Oracle_$4841",
                          "typeString": "contract Oracle"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 517,
                      "name": "CategoricalEventCreation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 408,
                      "src": "2378:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_CategoricalEvent_$158_$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_uint8_$returns$__$",
                        "typeString": "function (address,contract CategoricalEvent,contract ERC20,contract Oracle,uint8)"
                      }
                    },
                    "id": 524,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2378:90:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 525,
                  "nodeType": "EmitStatement",
                  "src": "2373:95:2"
                }
              ]
            },
            "documentation": "@dev Creates a new categorical event and adds it to the event mapping\n @param collateralToken Tokens used as collateral in exchange for outcome tokens\n @param oracle Oracle contract used to resolve the event\n @param outcomeCount Number of event outcomes\n @return Event contract",
            "id": 527,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createCategoricalEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 465,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 460,
                  "name": "collateralToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 527,
                  "src": "1677:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$7778",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 459,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7778,
                    "src": "1677:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$7778",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 462,
                  "name": "oracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 527,
                  "src": "1708:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Oracle_$4841",
                    "typeString": "contract Oracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 461,
                    "name": "Oracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4841,
                    "src": "1708:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Oracle_$4841",
                      "typeString": "contract Oracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 464,
                  "name": "outcomeCount",
                  "nodeType": "VariableDeclaration",
                  "scope": 527,
                  "src": "1731:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 463,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1731:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1667:88:2"
            },
            "returnParameters": {
              "id": 468,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 467,
                  "name": "eventContract",
                  "nodeType": "VariableDeclaration",
                  "scope": 527,
                  "src": "1788:30:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                    "typeString": "contract CategoricalEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 466,
                    "name": "CategoricalEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 158,
                    "src": "1788:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1787:32:2"
            },
            "scope": 602,
            "src": "1636:839:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 600,
              "nodeType": "Block",
              "src": "3047:663:2",
              "statements": [
                {
                  "assignments": [
                    541
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 541,
                      "name": "eventHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 600,
                      "src": "3057:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 540,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3057:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 551,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 545,
                            "name": "collateralToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 529,
                            "src": "3104:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$7778",
                              "typeString": "contract ERC20"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 546,
                            "name": "oracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 531,
                            "src": "3121:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Oracle_$4841",
                              "typeString": "contract Oracle"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 547,
                            "name": "lowerBound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 533,
                            "src": "3129:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 548,
                            "name": "upperBound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 535,
                            "src": "3141:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$7778",
                              "typeString": "contract ERC20"
                            },
                            {
                              "typeIdentifier": "t_contract$_Oracle_$4841",
                              "typeString": "contract Oracle"
                            },
                            {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 543,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7907,
                            "src": "3087:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3087:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3087:65:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 542,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7914,
                      "src": "3077:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3077:76:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3057:96:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 561,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 554,
                                "name": "scalarEvents",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 430,
                                "src": "3217:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_ScalarEvent_$870_$",
                                  "typeString": "mapping(bytes32 => contract ScalarEvent)"
                                }
                              },
                              "id": 556,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 555,
                                "name": "eventHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 541,
                                "src": "3230:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3217:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                "typeString": "contract ScalarEvent"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                "typeString": "contract ScalarEvent"
                              }
                            ],
                            "id": 553,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3209:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3209:32:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 559,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3253:1:2",
                              "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": 558,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3245:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 560,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3245:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3209:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 552,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "3201:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3201:55:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 563,
                  "nodeType": "ExpressionStatement",
                  "src": "3201:55:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 564,
                      "name": "eventContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 538,
                      "src": "3290:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 570,
                                      "name": "scalarEventMasterCopy",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 434,
                                      "src": "3368:21:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                        "typeString": "contract ScalarEvent"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                        "typeString": "contract ScalarEvent"
                                      }
                                    ],
                                    "id": 569,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3360:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 571,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3360:30:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 573,
                                      "name": "outcomeTokenMasterCopy",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 436,
                                      "src": "3412:22:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                        "typeString": "contract OutcomeToken"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                        "typeString": "contract OutcomeToken"
                                      }
                                    ],
                                    "id": 572,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3404:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 574,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3404:31:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 575,
                                  "name": "collateralToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 529,
                                  "src": "3449:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$7778",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 576,
                                  "name": "oracle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 531,
                                  "src": "3478:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Oracle_$4841",
                                    "typeString": "contract Oracle"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 577,
                                  "name": "lowerBound",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 533,
                                  "src": "3498:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 578,
                                  "name": "upperBound",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 535,
                                  "src": "3522:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_ERC20_$7778",
                                    "typeString": "contract ERC20"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_Oracle_$4841",
                                    "typeString": "contract Oracle"
                                  },
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "id": 568,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "NewExpression",
                                "src": "3326:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_int256_$_t_int256_$returns$_t_contract$_ScalarEventProxy_$720_$",
                                  "typeString": "function (address,address,contract ERC20,contract Oracle,int256,int256) returns (contract ScalarEventProxy)"
                                },
                                "typeName": {
                                  "contractScope": null,
                                  "id": 567,
                                  "name": "ScalarEventProxy",
                                  "nodeType": "UserDefinedTypeName",
                                  "referencedDeclaration": 720,
                                  "src": "3330:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ScalarEventProxy_$720",
                                    "typeString": "contract ScalarEventProxy"
                                  }
                                }
                              },
                              "id": 579,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3326:216:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ScalarEventProxy_$720",
                                "typeString": "contract ScalarEventProxy"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ScalarEventProxy_$720",
                                "typeString": "contract ScalarEventProxy"
                              }
                            ],
                            "id": 566,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3318:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3318:225:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 565,
                        "name": "ScalarEvent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 870,
                        "src": "3306:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ScalarEvent_$870_$",
                          "typeString": "type(contract ScalarEvent)"
                        }
                      },
                      "id": 581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3306:238:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "src": "3290:254:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "id": 583,
                  "nodeType": "ExpressionStatement",
                  "src": "3290:254:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 584,
                        "name": "scalarEvents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 430,
                        "src": "3554:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_contract$_ScalarEvent_$870_$",
                          "typeString": "mapping(bytes32 => contract ScalarEvent)"
                        }
                      },
                      "id": 586,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 585,
                        "name": "eventHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 541,
                        "src": "3567:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3554:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 587,
                      "name": "eventContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 538,
                      "src": "3580:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ScalarEvent_$870",
                        "typeString": "contract ScalarEvent"
                      }
                    },
                    "src": "3554:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "id": 589,
                  "nodeType": "ExpressionStatement",
                  "src": "3554:39:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 591,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7920,
                          "src": "3628:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 592,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3628:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 593,
                        "name": "eventContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 538,
                        "src": "3640:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ScalarEvent_$870",
                          "typeString": "contract ScalarEvent"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 594,
                        "name": "collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 529,
                        "src": "3655:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$7778",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 595,
                        "name": "oracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 531,
                        "src": "3672:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Oracle_$4841",
                          "typeString": "contract Oracle"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 596,
                        "name": "lowerBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 533,
                        "src": "3680:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 597,
                        "name": "upperBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 535,
                        "src": "3692:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_ScalarEvent_$870",
                          "typeString": "contract ScalarEvent"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20_$7778",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_contract$_Oracle_$4841",
                          "typeString": "contract Oracle"
                        },
                        {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      ],
                      "id": 590,
                      "name": "ScalarEventCreation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 422,
                      "src": "3608:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_ScalarEvent_$870_$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_int256_$_t_int256_$returns$__$",
                        "typeString": "function (address,contract ScalarEvent,contract ERC20,contract Oracle,int256,int256)"
                      }
                    },
                    "id": 598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3608:95:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 599,
                  "nodeType": "EmitStatement",
                  "src": "3603:100:2"
                }
              ]
            },
            "documentation": "@dev Creates a new scalar event and adds it to the event mapping\n @param collateralToken Tokens used as collateral in exchange for outcome tokens\n @param oracle Oracle contract used to resolve the event\n @param lowerBound Lower bound for event outcome\n @param upperBound Lower bound for event outcome\n @return Event contract",
            "id": 601,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createScalarEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 536,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 529,
                  "name": "collateralToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 601,
                  "src": "2885:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$7778",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 528,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7778,
                    "src": "2885:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$7778",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 531,
                  "name": "oracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 601,
                  "src": "2916:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Oracle_$4841",
                    "typeString": "contract Oracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 530,
                    "name": "Oracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4841,
                    "src": "2916:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Oracle_$4841",
                      "typeString": "contract Oracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 533,
                  "name": "lowerBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 601,
                  "src": "2939:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 532,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "2939:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 535,
                  "name": "upperBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 601,
                  "src": "2963:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 534,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "2963:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2875:108:2"
            },
            "returnParameters": {
              "id": 539,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 538,
                  "name": "eventContract",
                  "nodeType": "VariableDeclaration",
                  "scope": 601,
                  "src": "3016:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ScalarEvent_$870",
                    "typeString": "contract ScalarEvent"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 537,
                    "name": "ScalarEvent",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 870,
                    "src": "3016:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ScalarEvent_$870",
                      "typeString": "contract ScalarEvent"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3015:27:2"
            },
            "scope": 602,
            "src": "2849:861:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 603,
        "src": "235:3477:2"
      }
    ],
    "src": "0:3713:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.6+commit.b259423e.Emscripten.clang"
  },
  "networks": {
    "1": {
      "events": {},
      "links": {},
      "address": "0xc113873694e254c75bfa1dc6667f0d57b3e2e1e3",
      "transactionHash": "0x12e8d20e98347849c61dc55da18434afbaec75862c49e5eeaf9860728b2bc535"
    },
    "3": {
      "events": {},
      "links": {},
      "address": "0xd047a93c883ae84d44a646b538ce9d62cd49094b",
      "transactionHash": "0x11f24e1ba732bf586d7e4381b042eaf017df51a93b318b068839915d450d6783"
    },
    "4": {
      "events": {},
      "links": {},
      "address": "0x8a8fff095771faf29f3fcc00cb8e980ebe08405e",
      "transactionHash": "0x052c1f2145cbf150df188f8402cd5fb4a16663282f53a0cb5f22c621d1ac0211"
    },
    "42": {
      "events": {},
      "links": {},
      "address": "0x964422ecbdf08f44347ef3e551fe027ec51c1c62",
      "transactionHash": "0x51ee7f9d3e32603fc45b3e426e892308e7202bc1c7090c4fdde69d3764290f8a"
    },
    "437894314312": {
      "events": {},
      "links": {},
      "address": "0xb09bcc172050fbd4562da8b229cf3e45dc3045a6",
      "transactionHash": "0x3bbc0494a74b9709fcd66c01260da5c742eff1be3f8c8b4ce784feea04e966d7"
    }
  },
  "schemaVersion": "3.0.11",
  "updatedAt": "2019-09-20T17:46:52.112Z",
  "devdoc": {
    "author": "Stefan George - <stefan@gnosis.pm>",
    "methods": {
      "createCategoricalEvent(address,address,uint8)": {
        "details": "Creates a new categorical event and adds it to the event mapping",
        "params": {
          "collateralToken": "Tokens used as collateral in exchange for outcome tokens",
          "oracle": "Oracle contract used to resolve the event",
          "outcomeCount": "Number of event outcomes"
        },
        "return": "Event contract"
      },
      "createScalarEvent(address,address,int256,int256)": {
        "details": "Creates a new scalar event and adds it to the event mapping",
        "params": {
          "collateralToken": "Tokens used as collateral in exchange for outcome tokens",
          "lowerBound": "Lower bound for event outcome",
          "oracle": "Oracle contract used to resolve the event",
          "upperBound": "Lower bound for event outcome"
        },
        "return": "Event contract"
      }
    },
    "title": "Event factory contract - Allows creation of categorical and scalar events"
  },
  "userdoc": {
    "methods": {}
  }
}