{
  "contractName": "PreSaleSTOFactory",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "monthlySubscriptionCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSubscriptionCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySubscriptionFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSetupCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySetupFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polyToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "setupCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newUsageCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactoryUsageFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "usageCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_polyAddress",
          "type": "address"
        },
        {
          "name": "_setupCost",
          "type": "uint256"
        },
        {
          "name": "_usageCost",
          "type": "uint256"
        },
        {
          "name": "_subscriptionCost",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSetupcost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newSetupCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySetupFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactoryUsageFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newMonthlySubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySubscriptionFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_module",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_moduleName",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_moduleFactory",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_creator",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogGenerateModuleFromFactory",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getType",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getName",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getDescription",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTitle",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInstructions",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTags",
      "outputs": [
        {
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506040516080806126c5833981016040908152815160208301519183015160609093015160008054600160a060020a0319908116331790915560018054600160a060020a039094169390911692909217909155600291909155600391909155600455612644806100816000396000f3006080604052600436106100d65763ffffffff60e060020a60003504166277436081146100db57806306184a251461011757806315dae03e1461013e57806317d7de7c146101695780631a0925411461017e5780633ae192bd1461020857806358a191c3146102225780636faa22a51461023a578063715018a61461024f5780637e363ffa146102645780638da5cb5b14610279578063995d9ab71461028e578063aac67b05146102f3578063d54c47261461030b578063e0d5497014610320578063f2fde38b14610335578063ff3c1a8f14610356575b600080fd5b3480156100e757600080fd5b506100fb600480356024810191013561036b565b60408051600160a060020a039092168252519081900360200190f35b34801561012357600080fd5b5061012c61076b565b60408051918252519081900360200190f35b34801561014a57600080fd5b50610153610771565b6040805160ff9092168252519081900360200190f35b34801561017557600080fd5b5061012c610776565b34801561018a57600080fd5b5061019361079a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101cd5781810151838201526020016101b5565b50505050905090810190601f1680156101fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021457600080fd5b506102206004356107f9565b005b34801561022e57600080fd5b50610220600435610856565b34801561024657600080fd5b506100fb6108b3565b34801561025b57600080fd5b506102206108c2565b34801561027057600080fd5b5061012c61092e565b34801561028557600080fd5b506100fb610934565b34801561029a57600080fd5b506102a3610943565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102df5781810151838201526020016102c7565b505050509050019250505060405180910390f35b3480156102ff57600080fd5b506102206004356109a7565b34801561031757600080fd5b5061012c610a04565b34801561032c57600080fd5b50610193610a0a565b34801561034157600080fd5b50610220600160a060020a0360043516610a69565b34801561036257600080fd5b50610193610a8c565b600080600060025411156104dd5760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b1580156103f857600080fd5b505af115801561040c573d6000803e3d6000fd5b505050506040513d602081101561042257600080fd5b505115156104dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a03166104f3610bc1565b600160a060020a03928316815291166020820152604080519182900301906000f080158015610526573d6000803e3d6000fd5b50905080600160a060020a0316631613ec9d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561056757600080fd5b505af115801561057b573d6000803e3d6000fd5b505050506040513d602081101561059157600080fd5b5051604080516020601f87018190048102820181019092528581527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909216916105ec91879087908190840183828082843750610ac3945050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461067757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642064617461206973206e6f742076616c6964000000000000604482015290519081900360640190fd5b80600160a060020a03168484604051808383808284378201915050925050506000604051808303816000865af1915050151561071457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e2d7375636365737366756c6c2063616c6c00000000000000000000000000604482015290519081900360640190fd5b3061071d610776565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600390565b7f50726553616c6553544f0000000000000000000000000000000000000000000090565b60408051606081018252603581527f416c6c6f77732049737375657220746f20636f6e666967757265207072652d7360208201527f616c6520746f6b656e20616c6c6f636174696f6e7300000000000000000000009181019190915290565b600054600160a060020a0316331461081057600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461086d57600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a031633146108d957600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b604080516001808252818301909252606091829190602080830190803883390190505090507f50726573616c650000000000000000000000000000000000000000000000000081600081518110151561099857fe5b60209081029091010152905090565b600054600160a060020a031633146109be57600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60408051606081018252602e81527f436f6e66696775726520616e6420747261636b207072652d73616c6520746f6b60208201527f656e20616c6c6f636174696f6e730000000000000000000000000000000000009181019190915290565b600054600160a060020a03163314610a8057600080fd5b610a8981610b44565b50565b60408051808201909152600b81527f50726553616c652053544f000000000000000000000000000000000000000000602082015290565b60008060006004845110610ad8576004610adb565b83515b9150600090505b81811015610b3d5780600183030360080260020a8482815181101515610b0457fe5b90602001015160f860020a900460f860020a0260f860020a9004028360e060020a90040160e060020a0292508080600101915050610ae2565b5050919050565b600160a060020a0381161515610b5957600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604051611a4780610bd283390190560060806040526002805460a060020a60ff021916905534801561002057600080fd5b50604051604080611a4783398101604052805160209091015160018054600160a060020a03938416600160a060020a03199182161790915560008054821633179055600280549390921692169190911790556119c6806100816000396000f30060806040526004361061015b5763ffffffff60e060020a6000350416631613ec9d81146101605780631903fe4f146101aa5780631eb25e0a146102ac5780633197cbb6146102c457806335ff3a51146102eb57806338c59de9146103005780633f4ba83a14610315578063518ab2a81461032a57806351eea7751461033f5780635c975abb146103545780635f7619a41461037d5780636f7bc9be146103955780636faa22a5146103b657806378e97925146103e75780638456cb59146103fc5780638905fd4f146104115780639a903ca714610432578063a3fb8f151461045c578063a412f87c14610471578063b2cca39d14610495578063b84dfbd2146104aa578063be16338c146104bf578063c3a07df6146104d4578063c45a015514610539578063cd72ab691461054e578063d70afa9614610563578063d7e64c0014610578578063eda524bc1461058d578063ee7c0db0146105a8575b600080fd5b34801561016c57600080fd5b506101756105bd565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b3480156101b657600080fd5b50604080516020600480358082013583810280860185019096528085526102aa95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506105f29650505050505050565b005b3480156102b857600080fd5b506102aa6004356109aa565b3480156102d057600080fd5b506102d9610a68565b60408051918252519081900360200190f35b3480156102f757600080fd5b506102d9610a6e565b34801561030c57600080fd5b506102d9610a74565b34801561032157600080fd5b506102aa610a7a565b34801561033657600080fd5b506102d9610b62565b34801561034b57600080fd5b506102d9610b68565b34801561036057600080fd5b50610369610b7a565b604080519115158252519081900360200190f35b34801561038957600080fd5b50610369600435610b9b565b3480156103a157600080fd5b506102d9600160a060020a0360043516610eda565b3480156103c257600080fd5b506103cb610eec565b60408051600160a060020a039092168252519081900360200190f35b3480156103f357600080fd5b506102d9610efb565b34801561040857600080fd5b506102aa610f01565b34801561041d57600080fd5b506102aa600160a060020a0360043516610ff5565b34801561043e57600080fd5b506102aa600160a060020a0360043516602435604435606435611223565b34801561046857600080fd5b506102d9611652565b34801561047d57600080fd5b50610369600160a060020a0360043516602435611658565b3480156104a157600080fd5b506102d96116fc565b3480156104b657600080fd5b506103cb611702565b3480156104cb57600080fd5b506102d9611711565b3480156104e057600080fd5b506104e9611717565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561052557818101518382015260200161050d565b505050509050019250505060405180910390f35b34801561054557600080fd5b506103cb611769565b34801561055a57600080fd5b506102d9611778565b34801561056f57600080fd5b506102d961177e565b34801561058457600080fd5b506102d96117a2565b34801561059957600080fd5b5061036960ff600435166117a8565b3480156105b457600080fd5b506102d96117bd565b604080517f636f6e6669677572652875696e743235362900000000000000000000000000008152905190819003601201902090565b600060008051602061197b833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b505160005433600160a060020a0392831681149450911614905081806106a65750805b8061074c5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561071f57600080fd5b505af1158015610733573d6000803e3d6000fd5b505050506040513d602081101561074957600080fd5b50515b15156107a2576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b8651885114610821576040805160e560020a62461bcd02815260206004820152602560248201527f4d69732d6d6174636820696e20746865206c656e677468206f6620746865206160448201527f7272617973000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84518651146108a0576040805160e560020a62461bcd02815260206004820152602560248201527f4d69732d6d6174636820696e20746865206c656e677468206f6620746865206160448201527f7272617973000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b875186511461091f576040805160e560020a62461bcd02815260206004820152602560248201527f4d69732d6d6174636820696e20746865206c656e677468206f6620746865206160448201527f7272617973000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600093505b87518410156109a057610995888581518110151561093e57fe5b90602001906020020151888681518110151561095657fe5b90602001906020020151888781518110151561096e57fe5b90602001906020020151888881518110151561098657fe5b90602001906020020151611223565b600190930192610924565b5050505050505050565b600054600160a060020a03163314610a0c576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b801515610a63576040805160e560020a62461bcd02815260206004820152601760248201527f656e6454696d652073686f756c64206e6f742062652030000000000000000000604482015290519081900360640190fd5b600555565b60055481565b60095490565b60085490565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610acd57600080fd5b505af1158015610ae1573d6000803e3d6000fd5b505050506040513d6020811015610af757600080fd5b5051600160a060020a03163314610b58576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610b606117c3565b565b600b5481565b60008051602061197b83398151915281565b60025474010000000000000000000000000000000000000000900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610c1457600080fd5b505af1158015610c28573d6000803e3d6000fd5b505050506040513d6020811015610c3e57600080fd5b505160005433600160a060020a039283168114945091161490508180610c615750805b80610d075750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610cda57600080fd5b505af1158015610cee573d6000803e3d6000fd5b505050506040513d6020811015610d0457600080fd5b50515b1515610d5d576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b505050506040513d6020811015610df657600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610e4d57600080fd5b505af1158015610e61573d6000803e3d6000fd5b505050506040513d6020811015610e7757600080fd5b50511515610ecf576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b60076020526000908152604090205481565b600254600160a060020a031681565b60045481565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f5457600080fd5b505af1158015610f68573d6000803e3d6000fd5b505050506040513d6020811015610f7e57600080fd5b5051600160a060020a03163314610fdf576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6005544210610fed57600080fd5b610b6061188a565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561104b57600080fd5b505af115801561105f573d6000803e3d6000fd5b505050506040513d602081101561107557600080fd5b5051600160a060020a031633146110d6576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b600160a060020a03831615156110eb57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561114f57600080fd5b505af1158015611163573d6000803e3d6000fd5b505050506040513d602081101561117957600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b1580156111e757600080fd5b505af11580156111fb573d6000803e3d6000fd5b505050506040513d602081101561121157600080fd5b5051151561121e57600080fd5b505050565b60008051602061197b833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561128857600080fd5b505af115801561129c573d6000803e3d6000fd5b505050506040513d60208110156112b257600080fd5b505160005433600160a060020a0392831681149450911614905081806112d55750805b8061137b5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561134e57600080fd5b505af1158015611362573d6000803e3d6000fd5b505050506040513d602081101561137857600080fd5b50515b15156113d1576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600554421115611451576040805160e560020a62461bcd02815260206004820152602960248201527f43757272656e742074696d652073686f756c64206c657373207468616e20746860448201527f6520656e6454696d650000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600086116114cf576040805160e560020a62461bcd02815260206004820152603160248201527f4e6f2e206f6620746f6b656e732070726f76696465642073686f756c6420626560448201527f206772656174657220746865207a65726f000000000000000000000000000000606482015290519081900360840190fd5b600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038a81166004830152602482018a9052915191909216916340c10f199160448083019260209291908290030181600087803b15801561153e57600080fd5b505af1158015611552573d6000803e3d6000fd5b505050506040513d602081101561156857600080fd5b5050600160a060020a038716600090815260076020526040902054611593908763ffffffff61196716565b600160a060020a0388166000908152600760205260409020556008546115c090600163ffffffff61196716565b6008556009546115d6908663ffffffff61196716565b600955600a546115ec908563ffffffff61196716565b600a55600b54611602908763ffffffff61196716565b600b5560408051600160a060020a03891681526020810188905281517f3b87361b8a201c697d51aaa7a509f6dfb3870db9e5c5501d22d3e9fae858f725929181900390910190a150505050505050565b600a5490565b600254604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015291516000938593169163dd62ed3e91604480830192602092919082900301818887803b1580156116c757600080fd5b505af11580156116db573d6000803e3d6000fd5b505050506040513d60208110156116f157600080fd5b505110159392505050565b60065481565b600154600160a060020a031681565b600a5481565b6040805160018082528183019092526060918291906020808301908038833901905050905060008051602061197b83398151915281600081518110151561175a57fe5b60209081029091010152905090565b600054600160a060020a031681565b60095481565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b60085481565b60036020526000908152604090205460ff1681565b600b5490565b60025474010000000000000000000000000000000000000000900460ff161515611837576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b60025474010000000000000000000000000000000000000000900460ff16156118fd576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1565b8181018281101561197457fe5b9291505056005052455f53414c455f41444d494e000000000000000000000000000000000000a165627a7a72305820a275328811e3bbb8ddf3ae79ff7b19a84f3680cd6441bd95c82d46ae76a6e7f70029a165627a7a723058203266c99858a3e716c25f95abdf4f405a348b518c79fbd36a01f6c52060cb2ca50029",
  "deployedBytecode": "0x6080604052600436106100d65763ffffffff60e060020a60003504166277436081146100db57806306184a251461011757806315dae03e1461013e57806317d7de7c146101695780631a0925411461017e5780633ae192bd1461020857806358a191c3146102225780636faa22a51461023a578063715018a61461024f5780637e363ffa146102645780638da5cb5b14610279578063995d9ab71461028e578063aac67b05146102f3578063d54c47261461030b578063e0d5497014610320578063f2fde38b14610335578063ff3c1a8f14610356575b600080fd5b3480156100e757600080fd5b506100fb600480356024810191013561036b565b60408051600160a060020a039092168252519081900360200190f35b34801561012357600080fd5b5061012c61076b565b60408051918252519081900360200190f35b34801561014a57600080fd5b50610153610771565b6040805160ff9092168252519081900360200190f35b34801561017557600080fd5b5061012c610776565b34801561018a57600080fd5b5061019361079a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101cd5781810151838201526020016101b5565b50505050905090810190601f1680156101fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021457600080fd5b506102206004356107f9565b005b34801561022e57600080fd5b50610220600435610856565b34801561024657600080fd5b506100fb6108b3565b34801561025b57600080fd5b506102206108c2565b34801561027057600080fd5b5061012c61092e565b34801561028557600080fd5b506100fb610934565b34801561029a57600080fd5b506102a3610943565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102df5781810151838201526020016102c7565b505050509050019250505060405180910390f35b3480156102ff57600080fd5b506102206004356109a7565b34801561031757600080fd5b5061012c610a04565b34801561032c57600080fd5b50610193610a0a565b34801561034157600080fd5b50610220600160a060020a0360043516610a69565b34801561036257600080fd5b50610193610a8c565b600080600060025411156104dd5760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b1580156103f857600080fd5b505af115801561040c573d6000803e3d6000fd5b505050506040513d602081101561042257600080fd5b505115156104dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a03166104f3610bc1565b600160a060020a03928316815291166020820152604080519182900301906000f080158015610526573d6000803e3d6000fd5b50905080600160a060020a0316631613ec9d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561056757600080fd5b505af115801561057b573d6000803e3d6000fd5b505050506040513d602081101561059157600080fd5b5051604080516020601f87018190048102820181019092528581527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909216916105ec91879087908190840183828082843750610ac3945050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461067757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642064617461206973206e6f742076616c6964000000000000604482015290519081900360640190fd5b80600160a060020a03168484604051808383808284378201915050925050506000604051808303816000865af1915050151561071457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e2d7375636365737366756c6c2063616c6c00000000000000000000000000604482015290519081900360640190fd5b3061071d610776565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600390565b7f50726553616c6553544f0000000000000000000000000000000000000000000090565b60408051606081018252603581527f416c6c6f77732049737375657220746f20636f6e666967757265207072652d7360208201527f616c6520746f6b656e20616c6c6f636174696f6e7300000000000000000000009181019190915290565b600054600160a060020a0316331461081057600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461086d57600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a031633146108d957600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b604080516001808252818301909252606091829190602080830190803883390190505090507f50726573616c650000000000000000000000000000000000000000000000000081600081518110151561099857fe5b60209081029091010152905090565b600054600160a060020a031633146109be57600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60408051606081018252602e81527f436f6e66696775726520616e6420747261636b207072652d73616c6520746f6b60208201527f656e20616c6c6f636174696f6e730000000000000000000000000000000000009181019190915290565b600054600160a060020a03163314610a8057600080fd5b610a8981610b44565b50565b60408051808201909152600b81527f50726553616c652053544f000000000000000000000000000000000000000000602082015290565b60008060006004845110610ad8576004610adb565b83515b9150600090505b81811015610b3d5780600183030360080260020a8482815181101515610b0457fe5b90602001015160f860020a900460f860020a0260f860020a9004028360e060020a90040160e060020a0292508080600101915050610ae2565b5050919050565b600160a060020a0381161515610b5957600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604051611a4780610bd283390190560060806040526002805460a060020a60ff021916905534801561002057600080fd5b50604051604080611a4783398101604052805160209091015160018054600160a060020a03938416600160a060020a03199182161790915560008054821633179055600280549390921692169190911790556119c6806100816000396000f30060806040526004361061015b5763ffffffff60e060020a6000350416631613ec9d81146101605780631903fe4f146101aa5780631eb25e0a146102ac5780633197cbb6146102c457806335ff3a51146102eb57806338c59de9146103005780633f4ba83a14610315578063518ab2a81461032a57806351eea7751461033f5780635c975abb146103545780635f7619a41461037d5780636f7bc9be146103955780636faa22a5146103b657806378e97925146103e75780638456cb59146103fc5780638905fd4f146104115780639a903ca714610432578063a3fb8f151461045c578063a412f87c14610471578063b2cca39d14610495578063b84dfbd2146104aa578063be16338c146104bf578063c3a07df6146104d4578063c45a015514610539578063cd72ab691461054e578063d70afa9614610563578063d7e64c0014610578578063eda524bc1461058d578063ee7c0db0146105a8575b600080fd5b34801561016c57600080fd5b506101756105bd565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b3480156101b657600080fd5b50604080516020600480358082013583810280860185019096528085526102aa95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506105f29650505050505050565b005b3480156102b857600080fd5b506102aa6004356109aa565b3480156102d057600080fd5b506102d9610a68565b60408051918252519081900360200190f35b3480156102f757600080fd5b506102d9610a6e565b34801561030c57600080fd5b506102d9610a74565b34801561032157600080fd5b506102aa610a7a565b34801561033657600080fd5b506102d9610b62565b34801561034b57600080fd5b506102d9610b68565b34801561036057600080fd5b50610369610b7a565b604080519115158252519081900360200190f35b34801561038957600080fd5b50610369600435610b9b565b3480156103a157600080fd5b506102d9600160a060020a0360043516610eda565b3480156103c257600080fd5b506103cb610eec565b60408051600160a060020a039092168252519081900360200190f35b3480156103f357600080fd5b506102d9610efb565b34801561040857600080fd5b506102aa610f01565b34801561041d57600080fd5b506102aa600160a060020a0360043516610ff5565b34801561043e57600080fd5b506102aa600160a060020a0360043516602435604435606435611223565b34801561046857600080fd5b506102d9611652565b34801561047d57600080fd5b50610369600160a060020a0360043516602435611658565b3480156104a157600080fd5b506102d96116fc565b3480156104b657600080fd5b506103cb611702565b3480156104cb57600080fd5b506102d9611711565b3480156104e057600080fd5b506104e9611717565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561052557818101518382015260200161050d565b505050509050019250505060405180910390f35b34801561054557600080fd5b506103cb611769565b34801561055a57600080fd5b506102d9611778565b34801561056f57600080fd5b506102d961177e565b34801561058457600080fd5b506102d96117a2565b34801561059957600080fd5b5061036960ff600435166117a8565b3480156105b457600080fd5b506102d96117bd565b604080517f636f6e6669677572652875696e743235362900000000000000000000000000008152905190819003601201902090565b600060008051602061197b833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b505160005433600160a060020a0392831681149450911614905081806106a65750805b8061074c5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561071f57600080fd5b505af1158015610733573d6000803e3d6000fd5b505050506040513d602081101561074957600080fd5b50515b15156107a2576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b8651885114610821576040805160e560020a62461bcd02815260206004820152602560248201527f4d69732d6d6174636820696e20746865206c656e677468206f6620746865206160448201527f7272617973000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84518651146108a0576040805160e560020a62461bcd02815260206004820152602560248201527f4d69732d6d6174636820696e20746865206c656e677468206f6620746865206160448201527f7272617973000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b875186511461091f576040805160e560020a62461bcd02815260206004820152602560248201527f4d69732d6d6174636820696e20746865206c656e677468206f6620746865206160448201527f7272617973000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600093505b87518410156109a057610995888581518110151561093e57fe5b90602001906020020151888681518110151561095657fe5b90602001906020020151888781518110151561096e57fe5b90602001906020020151888881518110151561098657fe5b90602001906020020151611223565b600190930192610924565b5050505050505050565b600054600160a060020a03163314610a0c576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b801515610a63576040805160e560020a62461bcd02815260206004820152601760248201527f656e6454696d652073686f756c64206e6f742062652030000000000000000000604482015290519081900360640190fd5b600555565b60055481565b60095490565b60085490565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610acd57600080fd5b505af1158015610ae1573d6000803e3d6000fd5b505050506040513d6020811015610af757600080fd5b5051600160a060020a03163314610b58576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610b606117c3565b565b600b5481565b60008051602061197b83398151915281565b60025474010000000000000000000000000000000000000000900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610c1457600080fd5b505af1158015610c28573d6000803e3d6000fd5b505050506040513d6020811015610c3e57600080fd5b505160005433600160a060020a039283168114945091161490508180610c615750805b80610d075750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610cda57600080fd5b505af1158015610cee573d6000803e3d6000fd5b505050506040513d6020811015610d0457600080fd5b50515b1515610d5d576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b505050506040513d6020811015610df657600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610e4d57600080fd5b505af1158015610e61573d6000803e3d6000fd5b505050506040513d6020811015610e7757600080fd5b50511515610ecf576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b60076020526000908152604090205481565b600254600160a060020a031681565b60045481565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f5457600080fd5b505af1158015610f68573d6000803e3d6000fd5b505050506040513d6020811015610f7e57600080fd5b5051600160a060020a03163314610fdf576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6005544210610fed57600080fd5b610b6061188a565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561104b57600080fd5b505af115801561105f573d6000803e3d6000fd5b505050506040513d602081101561107557600080fd5b5051600160a060020a031633146110d6576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b600160a060020a03831615156110eb57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561114f57600080fd5b505af1158015611163573d6000803e3d6000fd5b505050506040513d602081101561117957600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b1580156111e757600080fd5b505af11580156111fb573d6000803e3d6000fd5b505050506040513d602081101561121157600080fd5b5051151561121e57600080fd5b505050565b60008051602061197b833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561128857600080fd5b505af115801561129c573d6000803e3d6000fd5b505050506040513d60208110156112b257600080fd5b505160005433600160a060020a0392831681149450911614905081806112d55750805b8061137b5750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561134e57600080fd5b505af1158015611362573d6000803e3d6000fd5b505050506040513d602081101561137857600080fd5b50515b15156113d1576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b600554421115611451576040805160e560020a62461bcd02815260206004820152602960248201527f43757272656e742074696d652073686f756c64206c657373207468616e20746860448201527f6520656e6454696d650000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600086116114cf576040805160e560020a62461bcd02815260206004820152603160248201527f4e6f2e206f6620746f6b656e732070726f76696465642073686f756c6420626560448201527f206772656174657220746865207a65726f000000000000000000000000000000606482015290519081900360840190fd5b600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038a81166004830152602482018a9052915191909216916340c10f199160448083019260209291908290030181600087803b15801561153e57600080fd5b505af1158015611552573d6000803e3d6000fd5b505050506040513d602081101561156857600080fd5b5050600160a060020a038716600090815260076020526040902054611593908763ffffffff61196716565b600160a060020a0388166000908152600760205260409020556008546115c090600163ffffffff61196716565b6008556009546115d6908663ffffffff61196716565b600955600a546115ec908563ffffffff61196716565b600a55600b54611602908763ffffffff61196716565b600b5560408051600160a060020a03891681526020810188905281517f3b87361b8a201c697d51aaa7a509f6dfb3870db9e5c5501d22d3e9fae858f725929181900390910190a150505050505050565b600a5490565b600254604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015291516000938593169163dd62ed3e91604480830192602092919082900301818887803b1580156116c757600080fd5b505af11580156116db573d6000803e3d6000fd5b505050506040513d60208110156116f157600080fd5b505110159392505050565b60065481565b600154600160a060020a031681565b600a5481565b6040805160018082528183019092526060918291906020808301908038833901905050905060008051602061197b83398151915281600081518110151561175a57fe5b60209081029091010152905090565b600054600160a060020a031681565b60095481565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b60085481565b60036020526000908152604090205460ff1681565b600b5490565b60025474010000000000000000000000000000000000000000900460ff161515611837576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b60025474010000000000000000000000000000000000000000900460ff16156118fd576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1565b8181018281101561197457fe5b9291505056005052455f53414c455f41444d494e000000000000000000000000000000000000a165627a7a72305820a275328811e3bbb8ddf3ae79ff7b19a84f3680cd6441bd95c82d46ae76a6e7f70029a165627a7a723058203266c99858a3e716c25f95abdf4f405a348b518c79fbd36a01f6c52060cb2ca50029",
  "sourceMap": "197:2466:43:-;;;344:199;8:9:-1;5:2;;;30:1;27;20:12;5:2;344:199:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;567:5:64;:18;;-1:-1:-1;;;;;;567:18:64;;;575:10;567:18;;;;;1123:31:14;;-1:-1:-1;;;;;1123:31:14;;;;;;;;;;;;;;1162:9;:22;;;;1192:9;:22;;;;1222:23;:43;197:2466:43;;;;;;",
  "deployedSourceMap": "197:2466:43:-;;;;;;;;;-1:-1:-1;;;197:2466:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;769:774;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;769:774:43;;;;;;;;;;;;;;;;-1:-1:-1;;;;;769:774:43;;;;;;;;;;;;;;363:38:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;363:38:14;;;;;;;;;;;;;;;;;;;;1607:71:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1607:71:43;;;;;;;;;;;;;;;;;;;;;;;1742:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1742:84:43;;;;1897:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1897:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1897:133:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3197:265:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3197:265:14;;;;;;;2548:193;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2548:193:14;;;;;275:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;275:22:14;;;;827:111:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;827:111:64;;;;303:24:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;303:24:14;;;;238:20:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:64;;;;2476:184:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2476:184:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2476:184:43;;;;;;;;;;;;;;;;;2862:193:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2862:193:14;;;;;333:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;333:24:14;;;;2269:127:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2269:127:43;;;;1100:103:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1100:103:64;-1:-1:-1;;;;;1100:103:64;;;;;2095:85:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2095:85:43;;;;769:774;815:7;1083:21;850:1;838:9;;:13;834:175;;;875:9;;;910:5;;917:9;;875:52;;;;;;898:10;875:52;;;;-1:-1:-1;;;;;910:5:43;;;875:52;;;;;;;;;;;;:9;;;;;:22;;:52;;;;;;;;;;;;;;;;;;;:9;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;875:52:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;875:52:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;875:52:43;867:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1142:9;;1122:10;;-1:-1:-1;;;;;1142:9:43;1107:46;;:::i;:::-;-1:-1:-1;;;;;1107:46:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1107:46:43;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1107:46:43;1083:70;;1261:10;-1:-1:-1;;;;;1261:26:43;;:28;;;;;-1:-1:-1;;;1261:28:43;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1261:28:43;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1261:28:43;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1261:28:43;1244:13;;;1261:28;1244:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;1244:45:43;;;;:13;;1251:5;;;;;;1244:13;;1251:5;;;;1244:13;;-1:-1:-1;1244:6:43;;-1:-1:-1;;;;;1244:13:43:i;:::-;-1:-1:-1;;1244:45:43;;1236:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1346:10;-1:-1:-1;;;;;1338:24:43;1363:5;;1338:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1330:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1477:4;1458:9;:7;:9::i;:::-;1408:92;;;-1:-1:-1;;;;;1408:92:43;;;;1484:10;1408:92;;;;1496:3;1408:92;;;;;;;;;;;;;;;1525:10;769:774;-1:-1:-1;;;769:774:43:o;363:38:14:-;;;;:::o;1607:71:43:-;1670:1;1607:71;:::o;1742:84::-;1800:19;1742:84;:::o;1897:133::-;1961:62;;;1943:6;1961:62;;;;;;;;;;;;;;;;;;;;1897:133;:::o;3197:265:14:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;3329:23:14;;3297:93;;;;;;;;;;;;3384:4;3297:93;;;;;;;;;;;;;;3400:23;:46;3197:265::o;2548:193::-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;2659:9:14;;2634:65;;;;;;;;;;;;2693:4;2634:65;;;;;;;;;;;;;;2709:9;:25;2548:193::o;275:22::-;;;-1:-1:-1;;;;;275:22:14;;:::o;827:111:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;903:5;;;884:25;;-1:-1:-1;;;;;903:5:64;;;;884:25;;;931:1;915:18;;-1:-1:-1;;915:18:64;;;827:111::o;303:24:14:-;;;;:::o;238:20:64:-;;;-1:-1:-1;;;;;238:20:64;;:::o;2476:184:43:-;2569:16;;;2583:1;2569:16;;;;;;;;;2515:9;;;;2569:16;;;;;;;105:10:-1;2569:16:43;88:34:-1;136:17;;-1:-1;2569:16:43;2536:49;;2595:28;:13;2609:1;2595:16;;;;;;;;;;;;;;;;;;:28;2640:13;-1:-1:-1;2476:184:43;:::o;2862:193:14:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;2973:9:14;;2948:65;;;;;;;;;;;;3007:4;2948:65;;;;;;;;;;;;;;3023:9;:25;2862:193::o;333:24::-;;;;:::o;2269:127:43:-;2334:55;;;2316:6;2334:55;;;;;;;;;;;;;;;;;;;;2269:127;:::o;1100:103:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;1169:29;1188:9;1169:18;:29::i;:::-;1100:103;:::o;2095:85:43:-;2153:20;;;;;;;;;;;;;;;;;2095:85;:::o;2166:261:14:-;2218:10;2240:8;2301:6;2266:1;2251:5;:12;:16;:35;;2285:1;2251:35;;;2270:5;:12;2251:35;2240:46;;2310:1;2301:10;;2296:125;2317:3;2313:1;:7;2296:125;;;2405:1;2401;2395:3;:7;:11;2390:1;:17;2384:1;:24;2371:5;2377:1;2371:8;;;;;;;;;;;;;;;-1:-1:-1;;;2371:8:14;;-1:-1:-1;;;2371:8:14;-1:-1:-1;;;2366:14:14;;:43;2359:3;-1:-1:-1;;;2354:9:14;;:55;-1:-1:-1;;;2347:63:14;2341:69;;2322:3;;;;;;;2296:125;;;2166:261;;;;;:::o;1338:171:64:-;-1:-1:-1;;;;;1408:23:64;;;;1400:32;;;;;;1464:5;;;1443:38;;-1:-1:-1;;;;;1443:38:64;;;;1464:5;;;1443:38;;;1487:5;:17;;-1:-1:-1;;1487:17:64;-1:-1:-1;;;;;1487:17:64;;;;;;;;;;1338:171::o;197:2466:43:-;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./PreSaleSTO.sol\";\nimport \"../../interfaces/IModuleFactory.sol\";\nimport \"../../interfaces/IModule.sol\";\n\n/**\n * @title Factory for deploying PreSaleSTO module\n */\ncontract PreSaleSTOFactory is IModuleFactory {\n\n    /**\n     * @notice Constructor\n     * @param _polyAddress Address of the polytoken\n     */\n    constructor (address _polyAddress, uint256 _setupCost, uint256 _usageCost, uint256 _subscriptionCost) public\n      IModuleFactory(_polyAddress, _setupCost, _usageCost, _subscriptionCost)\n    {\n\n    }\n\n    /**\n     * @notice used to launch the Module with the help of factory\n     * @param _data Data used for the intialization of the module factory variables\n     * @return address Contract address of the Module\n     */\n    function deploy(bytes _data) external returns(address) {\n        if (setupCost > 0) {\n            require(polyToken.transferFrom(msg.sender, owner, setupCost), \"Failed transferFrom because of sufficent Allowance is not provided\");\n        }\n        //Check valid bytes - can only call module init function\n        PreSaleSTO preSaleSTO = new PreSaleSTO(msg.sender, address(polyToken));\n        //Checks that _data is valid (not calling anything it shouldn't)\n        require(getSig(_data) == preSaleSTO.getInitFunction(), \"Provided data is not valid\");\n        require(address(preSaleSTO).call(_data), \"Un-successfull call\");\n        emit LogGenerateModuleFromFactory(address(preSaleSTO), getName(), address(this), msg.sender, now);\n        return address(preSaleSTO);\n    }\n\n    /**\n     * @notice Type of the Module factory\n     */\n    function getType() public view returns(uint8) {\n        return 3;\n    }\n\n    /**\n     * @notice Get the name of the Module\n     */\n    function getName() public view returns(bytes32) {\n        return \"PreSaleSTO\";\n    }\n\n    /**\n     * @notice Get the description of the Module\n     */\n    function getDescription() public view returns(string) {\n        return \"Allows Issuer to configure pre-sale token allocations\";\n    }\n\n    /**\n     * @notice Get the title of the Module\n     */\n    function getTitle() public view returns(string) {\n        return \"PreSale STO\";\n    }\n\n    /**\n     * @notice Get the Instructions that helped to used the module\n     */\n    function getInstructions() public view returns(string) {\n        return \"Configure and track pre-sale token allocations\";\n    }\n\n    /**\n     * @notice Get the tags related to the module factory\n     */\n    function getTags() public view returns(bytes32[]) {\n        bytes32[] memory availableTags = new bytes32[](1);\n        availableTags[0] = \"Presale\";\n        return availableTags;\n    }\n\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/PreSaleSTOFactory.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/PreSaleSTOFactory.sol",
    "exportedSymbols": {
      "PreSaleSTOFactory": [
        15075
      ]
    },
    "id": 15076,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 14912,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:43"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/PreSaleSTO.sol",
        "file": "./PreSaleSTO.sol",
        "id": 14913,
        "nodeType": "ImportDirective",
        "scope": 15076,
        "sourceUnit": 14911,
        "src": "26:26:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 14914,
        "nodeType": "ImportDirective",
        "scope": 15076,
        "sourceUnit": 9955,
        "src": "53:45:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModule.sol",
        "file": "../../interfaces/IModule.sol",
        "id": 14915,
        "nodeType": "ImportDirective",
        "scope": 15076,
        "sourceUnit": 9718,
        "src": "99:38:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14916,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "227:14:43",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 14917,
            "nodeType": "InheritanceSpecifier",
            "src": "227:14:43"
          }
        ],
        "contractDependencies": [
          9954,
          14910,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying PreSaleSTO module",
        "fullyImplemented": true,
        "id": 15075,
        "linearizedBaseContracts": [
          15075,
          9954,
          22664
        ],
        "name": "PreSaleSTOFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 14934,
              "nodeType": "Block",
              "src": "535:8:43",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 14935,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14928,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14919,
                    "src": "474:12:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 14929,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14921,
                    "src": "488:10:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 14930,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14923,
                    "src": "500:10:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 14931,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14925,
                    "src": "512:17:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 14932,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14927,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "459:14:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "459:71:43"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14919,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 14935,
                  "src": "357:20:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14918,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "357:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14921,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 14935,
                  "src": "379:18:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14920,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "379:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14923,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 14935,
                  "src": "399:18:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14922,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "399:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14925,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 14935,
                  "src": "419:25:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14924,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "419:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "356:89:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 14933,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "535:0:43"
            },
            "scope": 15075,
            "src": "344:199:43",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15008,
              "nodeType": "Block",
              "src": "824:719:43",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 14942,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "838:9:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 14943,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "850:1:43",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "838:13:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14957,
                  "nodeType": "IfStatement",
                  "src": "834:175:43",
                  "trueBody": {
                    "id": 14956,
                    "nodeType": "Block",
                    "src": "853:156:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 14948,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 23131,
                                    "src": "898:3:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 14949,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "898:10:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 14950,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22582,
                                  "src": "910:5:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 14951,
                                  "name": "setupCost",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9727,
                                  "src": "917:9:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 14946,
                                  "name": "polyToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9725,
                                  "src": "875:9:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$22837",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 14947,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transferFrom",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22819,
                                "src": "875:22:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,address,uint256) external returns (bool)"
                                }
                              },
                              "id": 14952,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "875:52:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                              "id": 14953,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "929:68:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                                "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                              },
                              "value": "Failed transferFrom because of sufficent Allowance is not provided"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                                "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                              }
                            ],
                            "id": 14945,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "867:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 14954,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "867:131:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14955,
                        "nodeType": "ExpressionStatement",
                        "src": "867:131:43"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    14959
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14959,
                      "name": "preSaleSTO",
                      "nodeType": "VariableDeclaration",
                      "scope": 15009,
                      "src": "1083:21:43",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                        "typeString": "contract PreSaleSTO"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14958,
                        "name": "PreSaleSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14910,
                        "src": "1083:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                          "typeString": "contract PreSaleSTO"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14968,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14962,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1122:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 14963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1122:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14965,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1142:9:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 14964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1134:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 14966,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1134:18:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1107:14:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_PreSaleSTO_$14910_$",
                        "typeString": "function (address,address) returns (contract PreSaleSTO)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14960,
                        "name": "PreSaleSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14910,
                        "src": "1111:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                          "typeString": "contract PreSaleSTO"
                        }
                      }
                    },
                    "id": 14967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1107:46:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                      "typeString": "contract PreSaleSTO"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1083:70:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 14976,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 14971,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14937,
                              "src": "1251:5:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 14970,
                            "name": "getSig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9893,
                            "src": "1244:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes memory) pure returns (bytes4)"
                            }
                          },
                          "id": 14972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1244:13:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 14973,
                              "name": "preSaleSTO",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14959,
                              "src": "1261:10:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                                "typeString": "contract PreSaleSTO"
                              }
                            },
                            "id": 14974,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getInitFunction",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14697,
                            "src": "1261:26:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_pure$__$returns$_t_bytes4_$",
                              "typeString": "function () pure external returns (bytes4)"
                            }
                          },
                          "id": 14975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1261:28:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "1244:45:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50726f76696465642064617461206973206e6f742076616c6964",
                        "id": 14977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1291:28:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        },
                        "value": "Provided data is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        }
                      ],
                      "id": 14969,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1236:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1236:84:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14979,
                  "nodeType": "ExpressionStatement",
                  "src": "1236:84:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14985,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14937,
                            "src": "1363:5:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 14982,
                                "name": "preSaleSTO",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14959,
                                "src": "1346:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                                  "typeString": "contract PreSaleSTO"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                                  "typeString": "contract PreSaleSTO"
                                }
                              ],
                              "id": 14981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1338:7:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 14983,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1338:19:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 14984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1338:24:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$__$returns$_t_bool_$",
                            "typeString": "function () payable returns (bool)"
                          }
                        },
                        "id": 14986,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1338:31:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e2d7375636365737366756c6c2063616c6c",
                        "id": 14987,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1371:21:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        },
                        "value": "Un-successfull call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        }
                      ],
                      "id": 14980,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1330:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1330:63:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14989,
                  "nodeType": "ExpressionStatement",
                  "src": "1330:63:43"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14992,
                            "name": "preSaleSTO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14959,
                            "src": "1445:10:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                              "typeString": "contract PreSaleSTO"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                              "typeString": "contract PreSaleSTO"
                            }
                          ],
                          "id": 14991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1437:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 14993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1437:19:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 14994,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            15025
                          ],
                          "referencedDeclaration": 15025,
                          "src": "1458:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 14995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1458:9:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14997,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23280,
                            "src": "1477:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PreSaleSTOFactory_$15075",
                              "typeString": "contract PreSaleSTOFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PreSaleSTOFactory_$15075",
                              "typeString": "contract PreSaleSTOFactory"
                            }
                          ],
                          "id": 14996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1469:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 14998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1469:13:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14999,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1484:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 15000,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1484:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15001,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1496:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14990,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1408:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,address,uint256)"
                      }
                    },
                    "id": 15002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1408:92:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15003,
                  "nodeType": "EmitStatement",
                  "src": "1403:97:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15005,
                        "name": "preSaleSTO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14959,
                        "src": "1525:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                          "typeString": "contract PreSaleSTO"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                          "typeString": "contract PreSaleSTO"
                        }
                      ],
                      "id": 15004,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1517:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 15006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1517:19:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 14941,
                  "id": 15007,
                  "nodeType": "Return",
                  "src": "1510:26:43"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@param _data Data used for the intialization of the module factory variables\n@return address Contract address of the Module",
            "id": 15009,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14937,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 15009,
                  "src": "785:11:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14936,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "785:5:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "784:13:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 14941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14940,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15009,
                  "src": "815:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14939,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "815:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "814:9:43"
            },
            "scope": 15075,
            "src": "769:774:43",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 15016,
              "nodeType": "Block",
              "src": "1653:25:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 15014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1670:1:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3_by_1",
                      "typeString": "int_const 3"
                    },
                    "value": "3"
                  },
                  "functionReturnParameters": 15013,
                  "id": 15015,
                  "nodeType": "Return",
                  "src": "1663:8:43"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 15017,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15010,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1623:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15013,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15012,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15017,
                  "src": "1646:5:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 15011,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1646:5:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1645:7:43"
            },
            "scope": 15075,
            "src": "1607:71:43",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15024,
              "nodeType": "Block",
              "src": "1790:36:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "50726553616c6553544f",
                    "id": 15022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1807:12:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b7402d6223c086522fce3de3971e734bd3d8b20215833f9fd041a44709cb22fc",
                      "typeString": "literal_string \"PreSaleSTO\""
                    },
                    "value": "PreSaleSTO"
                  },
                  "functionReturnParameters": 15021,
                  "id": 15023,
                  "nodeType": "Return",
                  "src": "1800:19:43"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 15025,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15018,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1758:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15020,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15025,
                  "src": "1781:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 15019,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1781:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1780:9:43"
            },
            "scope": 15075,
            "src": "1742:84:43",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15032,
              "nodeType": "Block",
              "src": "1951:79:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "416c6c6f77732049737375657220746f20636f6e666967757265207072652d73616c6520746f6b656e20616c6c6f636174696f6e73",
                    "id": 15030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1968:55:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_55a454a0b8c6f1f4eaa6e5b8c0a8a3ccd01777394caed8ae37782e3c7ba74e49",
                      "typeString": "literal_string \"Allows Issuer to configure pre-sale token allocations\""
                    },
                    "value": "Allows Issuer to configure pre-sale token allocations"
                  },
                  "functionReturnParameters": 15029,
                  "id": 15031,
                  "nodeType": "Return",
                  "src": "1961:62:43"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 15033,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15026,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1920:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15029,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15028,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15033,
                  "src": "1943:6:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15027,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1943:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1942:8:43"
            },
            "scope": 15075,
            "src": "1897:133:43",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15040,
              "nodeType": "Block",
              "src": "2143:37:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "50726553616c652053544f",
                    "id": 15038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2160:13:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7facbc8f633bcff06ecb759a80fec674a3be8e32c46fef2f9d3ff1ef3d9150ae",
                      "typeString": "literal_string \"PreSale STO\""
                    },
                    "value": "PreSale STO"
                  },
                  "functionReturnParameters": 15037,
                  "id": 15039,
                  "nodeType": "Return",
                  "src": "2153:20:43"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 15041,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15034,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2112:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15037,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15036,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15041,
                  "src": "2135:6:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15035,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2135:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2134:8:43"
            },
            "scope": 15075,
            "src": "2095:85:43",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15048,
              "nodeType": "Block",
              "src": "2324:72:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "436f6e66696775726520616e6420747261636b207072652d73616c6520746f6b656e20616c6c6f636174696f6e73",
                    "id": 15046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2341:48:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7458291f2ea2e29da939e11334d7bf37d27d14e03532076172c260e3dcb8fb1c",
                      "typeString": "literal_string \"Configure and track pre-sale token allocations\""
                    },
                    "value": "Configure and track pre-sale token allocations"
                  },
                  "functionReturnParameters": 15045,
                  "id": 15047,
                  "nodeType": "Return",
                  "src": "2334:55:43"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 15049,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15042,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2293:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15045,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15044,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15049,
                  "src": "2316:6:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15043,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2316:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2315:8:43"
            },
            "scope": 15075,
            "src": "2269:127:43",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15073,
              "nodeType": "Block",
              "src": "2526:134:43",
              "statements": [
                {
                  "assignments": [
                    15058
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15058,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 15074,
                      "src": "2536:30:43",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 15056,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2536:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 15057,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2536:9:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15064,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 15062,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2583:1:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 15061,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2569:13:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 15059,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2573:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 15060,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2573:9:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 15063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2569:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2536:49:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 15069,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 15065,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15058,
                        "src": "2595:13:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 15067,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 15066,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2609:1:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2595:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "50726573616c65",
                      "id": 15068,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2614:9:43",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_cff8a2a4dc9d8050baca90b7a315a144de7e38fa773edf442d524939ffcce3fa",
                        "typeString": "literal_string \"Presale\""
                      },
                      "value": "Presale"
                    },
                    "src": "2595:28:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 15070,
                  "nodeType": "ExpressionStatement",
                  "src": "2595:28:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 15071,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15058,
                    "src": "2640:13:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 15054,
                  "id": 15072,
                  "nodeType": "Return",
                  "src": "2633:20:43"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 15074,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15050,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2492:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15053,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15074,
                  "src": "2515:9:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 15051,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2515:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 15052,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2515:9:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2514:11:43"
            },
            "scope": 15075,
            "src": "2476:184:43",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 15076,
        "src": "197:2466:43"
      }
    ],
    "src": "0:2664:43"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/PreSaleSTOFactory.sol",
    "exportedSymbols": {
      "PreSaleSTOFactory": [
        15075
      ]
    },
    "id": 15076,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 14912,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:43"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/PreSaleSTO.sol",
        "file": "./PreSaleSTO.sol",
        "id": 14913,
        "nodeType": "ImportDirective",
        "scope": 15076,
        "sourceUnit": 14911,
        "src": "26:26:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 14914,
        "nodeType": "ImportDirective",
        "scope": 15076,
        "sourceUnit": 9955,
        "src": "53:45:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModule.sol",
        "file": "../../interfaces/IModule.sol",
        "id": 14915,
        "nodeType": "ImportDirective",
        "scope": 15076,
        "sourceUnit": 9718,
        "src": "99:38:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14916,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "227:14:43",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 14917,
            "nodeType": "InheritanceSpecifier",
            "src": "227:14:43"
          }
        ],
        "contractDependencies": [
          9954,
          14910,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying PreSaleSTO module",
        "fullyImplemented": true,
        "id": 15075,
        "linearizedBaseContracts": [
          15075,
          9954,
          22664
        ],
        "name": "PreSaleSTOFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 14934,
              "nodeType": "Block",
              "src": "535:8:43",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 14935,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14928,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14919,
                    "src": "474:12:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 14929,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14921,
                    "src": "488:10:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 14930,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14923,
                    "src": "500:10:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 14931,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14925,
                    "src": "512:17:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 14932,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14927,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "459:14:43",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "459:71:43"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14919,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 14935,
                  "src": "357:20:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14918,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "357:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14921,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 14935,
                  "src": "379:18:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14920,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "379:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14923,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 14935,
                  "src": "399:18:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14922,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "399:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14925,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 14935,
                  "src": "419:25:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14924,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "419:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "356:89:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 14933,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "535:0:43"
            },
            "scope": 15075,
            "src": "344:199:43",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15008,
              "nodeType": "Block",
              "src": "824:719:43",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 14942,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "838:9:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 14943,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "850:1:43",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "838:13:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14957,
                  "nodeType": "IfStatement",
                  "src": "834:175:43",
                  "trueBody": {
                    "id": 14956,
                    "nodeType": "Block",
                    "src": "853:156:43",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 14948,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 23131,
                                    "src": "898:3:43",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 14949,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "898:10:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 14950,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22582,
                                  "src": "910:5:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 14951,
                                  "name": "setupCost",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9727,
                                  "src": "917:9:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 14946,
                                  "name": "polyToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9725,
                                  "src": "875:9:43",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$22837",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 14947,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transferFrom",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22819,
                                "src": "875:22:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,address,uint256) external returns (bool)"
                                }
                              },
                              "id": 14952,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "875:52:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                              "id": 14953,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "929:68:43",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                                "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                              },
                              "value": "Failed transferFrom because of sufficent Allowance is not provided"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                                "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                              }
                            ],
                            "id": 14945,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "867:7:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 14954,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "867:131:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14955,
                        "nodeType": "ExpressionStatement",
                        "src": "867:131:43"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    14959
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14959,
                      "name": "preSaleSTO",
                      "nodeType": "VariableDeclaration",
                      "scope": 15009,
                      "src": "1083:21:43",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                        "typeString": "contract PreSaleSTO"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14958,
                        "name": "PreSaleSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14910,
                        "src": "1083:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                          "typeString": "contract PreSaleSTO"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14968,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14962,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1122:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 14963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1122:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14965,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1142:9:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 14964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1134:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 14966,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1134:18:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1107:14:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_PreSaleSTO_$14910_$",
                        "typeString": "function (address,address) returns (contract PreSaleSTO)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14960,
                        "name": "PreSaleSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14910,
                        "src": "1111:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                          "typeString": "contract PreSaleSTO"
                        }
                      }
                    },
                    "id": 14967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1107:46:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                      "typeString": "contract PreSaleSTO"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1083:70:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 14976,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 14971,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14937,
                              "src": "1251:5:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 14970,
                            "name": "getSig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9893,
                            "src": "1244:6:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes memory) pure returns (bytes4)"
                            }
                          },
                          "id": 14972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1244:13:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 14973,
                              "name": "preSaleSTO",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14959,
                              "src": "1261:10:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                                "typeString": "contract PreSaleSTO"
                              }
                            },
                            "id": 14974,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getInitFunction",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14697,
                            "src": "1261:26:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_pure$__$returns$_t_bytes4_$",
                              "typeString": "function () pure external returns (bytes4)"
                            }
                          },
                          "id": 14975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1261:28:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "1244:45:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50726f76696465642064617461206973206e6f742076616c6964",
                        "id": 14977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1291:28:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        },
                        "value": "Provided data is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        }
                      ],
                      "id": 14969,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1236:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1236:84:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14979,
                  "nodeType": "ExpressionStatement",
                  "src": "1236:84:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14985,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14937,
                            "src": "1363:5:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 14982,
                                "name": "preSaleSTO",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14959,
                                "src": "1346:10:43",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                                  "typeString": "contract PreSaleSTO"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                                  "typeString": "contract PreSaleSTO"
                                }
                              ],
                              "id": 14981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1338:7:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 14983,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1338:19:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 14984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1338:24:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$__$returns$_t_bool_$",
                            "typeString": "function () payable returns (bool)"
                          }
                        },
                        "id": 14986,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1338:31:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e2d7375636365737366756c6c2063616c6c",
                        "id": 14987,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1371:21:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        },
                        "value": "Un-successfull call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        }
                      ],
                      "id": 14980,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1330:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1330:63:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14989,
                  "nodeType": "ExpressionStatement",
                  "src": "1330:63:43"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14992,
                            "name": "preSaleSTO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14959,
                            "src": "1445:10:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                              "typeString": "contract PreSaleSTO"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                              "typeString": "contract PreSaleSTO"
                            }
                          ],
                          "id": 14991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1437:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 14993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1437:19:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 14994,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            15025
                          ],
                          "referencedDeclaration": 15025,
                          "src": "1458:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 14995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1458:9:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14997,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23280,
                            "src": "1477:4:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PreSaleSTOFactory_$15075",
                              "typeString": "contract PreSaleSTOFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PreSaleSTOFactory_$15075",
                              "typeString": "contract PreSaleSTOFactory"
                            }
                          ],
                          "id": 14996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1469:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 14998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1469:13:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14999,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1484:3:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 15000,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1484:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15001,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1496:3:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14990,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1408:28:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,address,uint256)"
                      }
                    },
                    "id": 15002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1408:92:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15003,
                  "nodeType": "EmitStatement",
                  "src": "1403:97:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15005,
                        "name": "preSaleSTO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14959,
                        "src": "1525:10:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                          "typeString": "contract PreSaleSTO"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_PreSaleSTO_$14910",
                          "typeString": "contract PreSaleSTO"
                        }
                      ],
                      "id": 15004,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1517:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 15006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1517:19:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 14941,
                  "id": 15007,
                  "nodeType": "Return",
                  "src": "1510:26:43"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@param _data Data used for the intialization of the module factory variables\n@return address Contract address of the Module",
            "id": 15009,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14937,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 15009,
                  "src": "785:11:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14936,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "785:5:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "784:13:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 14941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14940,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15009,
                  "src": "815:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14939,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "815:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "814:9:43"
            },
            "scope": 15075,
            "src": "769:774:43",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 15016,
              "nodeType": "Block",
              "src": "1653:25:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 15014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1670:1:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3_by_1",
                      "typeString": "int_const 3"
                    },
                    "value": "3"
                  },
                  "functionReturnParameters": 15013,
                  "id": 15015,
                  "nodeType": "Return",
                  "src": "1663:8:43"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 15017,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15010,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1623:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15013,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15012,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15017,
                  "src": "1646:5:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 15011,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1646:5:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1645:7:43"
            },
            "scope": 15075,
            "src": "1607:71:43",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15024,
              "nodeType": "Block",
              "src": "1790:36:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "50726553616c6553544f",
                    "id": 15022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1807:12:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b7402d6223c086522fce3de3971e734bd3d8b20215833f9fd041a44709cb22fc",
                      "typeString": "literal_string \"PreSaleSTO\""
                    },
                    "value": "PreSaleSTO"
                  },
                  "functionReturnParameters": 15021,
                  "id": 15023,
                  "nodeType": "Return",
                  "src": "1800:19:43"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 15025,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15018,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1758:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15020,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15025,
                  "src": "1781:7:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 15019,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1781:7:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1780:9:43"
            },
            "scope": 15075,
            "src": "1742:84:43",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15032,
              "nodeType": "Block",
              "src": "1951:79:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "416c6c6f77732049737375657220746f20636f6e666967757265207072652d73616c6520746f6b656e20616c6c6f636174696f6e73",
                    "id": 15030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1968:55:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_55a454a0b8c6f1f4eaa6e5b8c0a8a3ccd01777394caed8ae37782e3c7ba74e49",
                      "typeString": "literal_string \"Allows Issuer to configure pre-sale token allocations\""
                    },
                    "value": "Allows Issuer to configure pre-sale token allocations"
                  },
                  "functionReturnParameters": 15029,
                  "id": 15031,
                  "nodeType": "Return",
                  "src": "1961:62:43"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 15033,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15026,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1920:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15029,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15028,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15033,
                  "src": "1943:6:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15027,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1943:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1942:8:43"
            },
            "scope": 15075,
            "src": "1897:133:43",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15040,
              "nodeType": "Block",
              "src": "2143:37:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "50726553616c652053544f",
                    "id": 15038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2160:13:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7facbc8f633bcff06ecb759a80fec674a3be8e32c46fef2f9d3ff1ef3d9150ae",
                      "typeString": "literal_string \"PreSale STO\""
                    },
                    "value": "PreSale STO"
                  },
                  "functionReturnParameters": 15037,
                  "id": 15039,
                  "nodeType": "Return",
                  "src": "2153:20:43"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 15041,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15034,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2112:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15037,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15036,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15041,
                  "src": "2135:6:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15035,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2135:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2134:8:43"
            },
            "scope": 15075,
            "src": "2095:85:43",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15048,
              "nodeType": "Block",
              "src": "2324:72:43",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "436f6e66696775726520616e6420747261636b207072652d73616c6520746f6b656e20616c6c6f636174696f6e73",
                    "id": 15046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2341:48:43",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_7458291f2ea2e29da939e11334d7bf37d27d14e03532076172c260e3dcb8fb1c",
                      "typeString": "literal_string \"Configure and track pre-sale token allocations\""
                    },
                    "value": "Configure and track pre-sale token allocations"
                  },
                  "functionReturnParameters": 15045,
                  "id": 15047,
                  "nodeType": "Return",
                  "src": "2334:55:43"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 15049,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15042,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2293:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15045,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15044,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15049,
                  "src": "2316:6:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15043,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2316:6:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2315:8:43"
            },
            "scope": 15075,
            "src": "2269:127:43",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 15073,
              "nodeType": "Block",
              "src": "2526:134:43",
              "statements": [
                {
                  "assignments": [
                    15058
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15058,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 15074,
                      "src": "2536:30:43",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 15056,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2536:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 15057,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2536:9:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15064,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 15062,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2583:1:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 15061,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2569:13:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 15059,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2573:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 15060,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2573:9:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 15063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2569:16:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2536:49:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 15069,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 15065,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15058,
                        "src": "2595:13:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 15067,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 15066,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2609:1:43",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2595:16:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "50726573616c65",
                      "id": 15068,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2614:9:43",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_cff8a2a4dc9d8050baca90b7a315a144de7e38fa773edf442d524939ffcce3fa",
                        "typeString": "literal_string \"Presale\""
                      },
                      "value": "Presale"
                    },
                    "src": "2595:28:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 15070,
                  "nodeType": "ExpressionStatement",
                  "src": "2595:28:43"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 15071,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15058,
                    "src": "2640:13:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 15054,
                  "id": 15072,
                  "nodeType": "Return",
                  "src": "2633:20:43"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 15074,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15050,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2492:2:43"
            },
            "payable": false,
            "returnParameters": {
              "id": 15054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15053,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15074,
                  "src": "2515:9:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 15051,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2515:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 15052,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2515:9:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2514:11:43"
            },
            "scope": 15075,
            "src": "2476:184:43",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 15076,
        "src": "197:2466:43"
      }
    ],
    "src": "0:2664:43"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:12.561Z"
}