{
  "contractName": "GeneralTransferManagerFactory",
  "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": "",
          "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": "0x608060405234801561001057600080fd5b5060405160808061345e833981016040908152815160208301519183015160609093015160008054600160a060020a0319908116331790915560018054600160a060020a0390941693909116929092179091556002919091556003919091556004556133dd806100816000396000f3006080604052600436106100ef5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166277436081146100f457806306184a251461013057806315dae03e1461015757806317d7de7c146101825780631a092541146101975780633ae192bd1461022157806358a191c31461023b5780636faa22a514610253578063715018a6146102685780637e363ffa1461027d5780638da5cb5b14610292578063995d9ab7146102a7578063aac67b051461030c578063d54c472614610324578063e0d5497014610339578063f2fde38b1461034e578063ff3c1a8f1461036f575b600080fd5b34801561010057600080fd5b506101146004803560248101910135610384565b60408051600160a060020a039092168252519081900360200190f35b34801561013c57600080fd5b50610145610599565b60408051918252519081900360200190f35b34801561016357600080fd5b5061016c61059f565b6040805160ff9092168252519081900360200190f35b34801561018e57600080fd5b506101456105a4565b3480156101a357600080fd5b506101ac6105c8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101e65781810151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022d57600080fd5b50610239600435610627565b005b34801561024757600080fd5b50610239600435610684565b34801561025f57600080fd5b506101146106e1565b34801561027457600080fd5b506102396106f0565b34801561028957600080fd5b5061014561075c565b34801561029e57600080fd5b50610114610762565b3480156102b357600080fd5b506102bc610771565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102f85781810151838201526020016102e0565b505050509050019250505060405180910390f35b34801561031857600080fd5b5061023960043561080f565b34801561033057600080fd5b5061014561086c565b34801561034557600080fd5b506101ac610872565b34801561035a57600080fd5b50610239600160a060020a0360043516610896565b34801561037b57600080fd5b506101ac6108b9565b600080600060025411156104f65760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b15801561041157600080fd5b505af1158015610425573d6000803e3d6000fd5b505050506040513d602081101561043b57600080fd5b505115156104f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a031661050c61096d565b600160a060020a03928316815291166020820152604080519182900301906000f08015801561053f573d6000803e3d6000fd5b5090503061054b6105a4565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600290565b7f47656e6572616c5472616e736665724d616e616765720000000000000000000090565b60408051606081018252602d81527f4d616e616765207472616e7366657273207573696e6720612074696d6520626160208201527f7365642077686974656c697374000000000000000000000000000000000000009181019190915290565b600054600160a060020a0316331461063e57600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461069b57600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a0316331461070757600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b6040805160028082526060808301845292839291906020830190803883390190505090507f47656e6572616c000000000000000000000000000000000000000000000000008160008151811015156107c557fe5b6020908102909101015280517f5472616e73666572205265737472696374696f6e000000000000000000000000908290600190811061080057fe5b60209081029091010152905090565b600054600160a060020a0316331461082657600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60606101e0604051908101604052806101bc81526020016131f66101bc9139905090565b600054600160a060020a031633146108ad57600080fd5b6108b6816108f0565b50565b60408051808201909152601881527f47656e6572616c205472616e73666572204d616e616765720000000000000000602082015290565b600160a060020a038116151561090557600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6040516128788061097e83390190560060806040526002805460a060020a60ff021916905560038054600160a060020a03199081169091556004805490911690556006805463ff0000001962ffffff19909116620100001716905534801561005657600080fd5b5060405160408061287883398101604052805160209091015160018054600160a060020a03938416600160a060020a03199182161790915560008054821633179055600280549390921692169190911790556127c1806100b76000396000f30060806040526004361061015b5763ffffffff60e060020a60003504166307592f6081146101605780630f28937c146101a5578063144b8afa146102de5780631613ec9d146103075780631bb7cc99146103515780632909a80e146103785780633f0547bb1461038d5780633f4ba83a146103a75780634caaf45f146103bc5780635c975abb146103dd5780635f7619a4146103f25780636faa22a51461040a5780637915c9e01461043b5780637ecc866f1461048e5780638456cb59146104a85780639332b62c146104bd5780639728538f146104d75780639b19251a146104ec578063b1dd811114610535578063b3e82dc91461054a578063b3fac8ce1461055f578063b84dfbd214610574578063c3a07df614610589578063c45a0155146105ee578063d70afa9614610603578063d7604a7814610618578063e0c6815814610647578063e55d0f8b14610668578063e8a28d521461067d575b600080fd5b34801561016c57600080fd5b506101a3600160a060020a0360043516602435604435606435608435151560a43560c43560ff60e435166101043561012435610697565b005b3480156101b157600080fd5b50604080516020600480358082013583810280860185019096528085526101a395369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506109689650505050505050565b3480156102ea57600080fd5b506102f3610cf8565b604080519115158252519081900360200190f35b34801561031357600080fd5b5061031c610d08565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561035d57600080fd5b50610366610d0d565b60408051918252519081900360200190f35b34801561038457600080fd5b506102f3610d1f565b34801561039957600080fd5b506101a36004351515610d2d565b3480156103b357600080fd5b506101a3610efa565b3480156103c857600080fd5b506101a3600160a060020a0360043516610fe2565b3480156103e957600080fd5b506102f36111c9565b3480156103fe57600080fd5b506102f36004356111d9565b34801561041657600080fd5b5061041f6114f0565b60408051600160a060020a039092168252519081900360200190f35b34801561044757600080fd5b5061046a600160a060020a036004358116906024351660443560643515156114ff565b6040518082600381111561047a57fe5b60ff16815260200191505060405180910390f35b34801561049a57600080fd5b506101a36004351515611678565b3480156104b457600080fd5b506101a361184f565b3480156104c957600080fd5b506101a36004351515611935565b3480156104e357600080fd5b50610366611b0a565b3480156104f857600080fd5b5061050d600160a060020a0360043516611b19565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b34801561054157600080fd5b506102f3611b43565b34801561055657600080fd5b5061041f611b4c565b34801561056b57600080fd5b5061041f611b5b565b34801561058057600080fd5b5061041f611b6a565b34801561059557600080fd5b5061059e611b79565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105da5781810151838201526020016105c2565b505050509050019250505060405180910390f35b3480156105fa57600080fd5b5061041f611bf3565b34801561060f57600080fd5b50610366611c02565b34801561062457600080fd5b506101a3600160a060020a03600435166024356044356064356084351515611c26565b34801561065357600080fd5b506101a3600160a060020a0360043516611ecf565b34801561067457600080fd5b506102f36120b6565b34801561068957600080fd5b506101a360043515156120c5565b6000428611156106f1576040805160e560020a62461bcd02815260206004820152601660248201527f56616c696446726f6d20697320746f6f206561726c7900000000000000000000604482015290519081900360640190fd5b42851015610749576040805160e560020a62461bcd02815260206004820152601360248201527f56616c6964546f20697320746f6f206c61746500000000000000000000000000604482015290519081900360640190fd5b604080516c01000000000000000000000000308102602080840191909152600160a060020a038f169091026034830152604882018d9052606882018c9052608882018b90527f01000000000000000000000000000000000000000000000000000000000000008a15150260a883015260a9820189905260c98083018990528351808403909101815260e990920192839052815191929182918401908083835b602083106108075780518252601f1990920191602091820191016107e8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090506108428185858561229e565b6080604051908101604052808b81526020018a8152602001898152602001881515815250600560008d600160a060020a0316600160a060020a0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055509050507f7a985b3a91e6a809b9457eb0e56c26c57186f124ae7e661ef14fa3518d49cdba8b42338d8d8d8d6040518088600160a060020a0316600160a060020a0316815260200187815260200186600160a060020a0316600160a060020a031681526020018581526020018481526020018381526020018215151515815260200197505050505050505060405180910390a15050505050505050505050565b6000600080516020612756833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156109cf57600080fd5b505af11580156109e3573d6000803e3d6000fd5b505050506040513d60208110156109f957600080fd5b505160005433600160a060020a039283168114945091161490508180610a1c5750805b80610aac57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610a7f57600080fd5b505af1158015610a93573d6000803e3d6000fd5b505050506040513d6020811015610aa957600080fd5b50515b1515610af0576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b8751895114610b49576040805160e560020a62461bcd02815260206004820152601860248201527f4d69736d61746368656420696e707574206c656e677468730000000000000000604482015290519081900360640190fd5b8651885114610ba2576040805160e560020a62461bcd02815260206004820152601860248201527f4d69736d61746368656420696e707574206c656e677468730000000000000000604482015290519081900360640190fd5b8551875114610bfb576040805160e560020a62461bcd02815260206004820152601860248201527f4d69736d61746368656420696e707574206c656e677468730000000000000000604482015290519081900360640190fd5b8651855114610c54576040805160e560020a62461bcd02815260206004820152601760248201527f4d69736d61746368656420696e707574206c656e677468000000000000000000604482015290519081900360640190fd5b600093505b8851841015610ced57610ce28985815181101515610c7357fe5b906020019060200201518986815181101515610c8b57fe5b906020019060200201518987815181101515610ca357fe5b906020019060200201518988815181101515610cbb57fe5b906020019060200201518989815181101515610cd357fe5b90602001906020020151611c26565b600190930192610c59565b505050505050505050565b6006546301000000900460ff1681565b600090565b60008051602061275683398151915281565b600654610100900460ff1681565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b505050506040513d6020811015610db957600080fd5b505160005433600160a060020a039283168114945091161490508180610ddc5750805b80610e6c57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610e3f57600080fd5b505af1158015610e53573d6000803e3d6000fd5b505050506040513d6020811015610e6957600080fd5b50515b1515610eb0576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b6006805485151560ff19909116811790915560408051918252517f185556241b5bd01bdb7ff63397b8990ec8d33116f15a7d7eb5f2b8f7072e1d499181900360200190a150505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f4d57600080fd5b505af1158015610f61573d6000803e3d6000fd5b505050506040513d6020811015610f7757600080fd5b5051600160a060020a03163314610fd8576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610fe06124b7565b565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050506040513d602081101561106e57600080fd5b505160005433600160a060020a0392831681149450911614905081806110915750805b8061112157506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b505050506040513d602081101561111e57600080fd5b50515b1515611165576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b60048054600160a060020a03861673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f5940b3e4196e0af34b25de54a6476219b7065395349f15fb84006511fd962d329181900360200190a150505050565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b505050506040513d602081101561127c57600080fd5b505160005433600160a060020a03928316811494509116149050818061129f5750805b8061132f57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561130257600080fd5b505af1158015611316573d6000803e3d6000fd5b505050506040513d602081101561132c57600080fd5b50515b1515611373576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b1580156113e257600080fd5b505af11580156113f6573d6000803e3d6000fd5b505050506040513d602081101561140c57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b15801561146357600080fd5b505af1158015611477573d6000803e3d6000fd5b505050506040513d602081101561148d57600080fd5b505115156114e5576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600254600160a060020a031681565b60025460009060a060020a900460ff1615156114e55760065460ff161561152857506002611670565b6006546301000000900460ff1680156115485750600160a060020a038416155b1561155557506002611670565b600654610100900460ff16156115935761156e8461256d565b801561157e575061157e8561256d565b61158957600161158c565b60025b9050611670565b60065462010000900460ff1680156115b85750600354600160a060020a038681169116145b1561160257600160a060020a03841660009081526005602052604090206003015460ff161580156115ec57506115ec6125da565b156115f957506001611670565b61157e8461256d565b61160b8561256d565b801561162f5750600160a060020a0385166000908152600560205260409020544210155b801561157e575061163f8461256d565b801561157e5750600160a060020a03841660009081526005602052604090206001015442101561158957600161158c565b949350505050565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156116da57600080fd5b505af11580156116ee573d6000803e3d6000fd5b505050506040513d602081101561170457600080fd5b505160005433600160a060020a0392831681149450911614905081806117275750805b806117b757506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561178a57600080fd5b505af115801561179e573d6000803e3d6000fd5b505050506040513d60208110156117b457600080fd5b50515b15156117fb576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b6006805485151562010000810262ff0000199092169190911790915560408051918252517f4b711350abee425bbbbd22b0a6615df775a36f2838168ca64da9177ad8fec1609181900360200190a150505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156118a257600080fd5b505af11580156118b6573d6000803e3d6000fd5b505050506040513d60208110156118cc57600080fd5b5051600160a060020a0316331461192d576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610fe061269a565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561199757600080fd5b505af11580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b505160005433600160a060020a0392831681149450911614905081806119e45750805b80611a7457506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015611a4757600080fd5b505af1158015611a5b573d6000803e3d6000fd5b505050506040513d6020811015611a7157600080fd5b50515b1515611ab8576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b60068054851515610100810261ff00199092169190911790915560408051918252517f7544dcc0388a2e2a001b92ece53af2e1e3135973ff37e5dcd80a12cf5ed2b4259181900360200190a150505050565b60d860020a64464c4147530281565b60056020526000908152604090208054600182015460028301546003909301549192909160ff1684565b60065460ff1681565b600454600160a060020a031681565b600354600160a060020a031681565b600154600160a060020a031681565b604080516002808252606080830184529283929190602083019080388339019050509050600080516020612756833981519152816000815181101515611bbb57fe5b60209081029091010152805160d860020a64464c414753029082906001908110611be157fe5b602090810290910101529050805b5090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b600080516020612756833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611c8b57600080fd5b505af1158015611c9f573d6000803e3d6000fd5b505050506040513d6020811015611cb557600080fd5b505160005433600160a060020a039283168114945091161490508180611cd85750805b80611d6857506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015611d3b57600080fd5b505af1158015611d4f573d6000803e3d6000fd5b505050506040513d6020811015611d6557600080fd5b50515b1515611dac576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b608060405190810160405280888152602001878152602001868152602001851515815250600560008a600160a060020a0316600160a060020a0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055509050507f7a985b3a91e6a809b9457eb0e56c26c57186f124ae7e661ef14fa3518d49cdba8842338a8a8a8a6040518088600160a060020a0316600160a060020a0316815260200187815260200186600160a060020a0316600160a060020a031681526020018581526020018481526020018381526020018215151515815260200197505050505050505060405180910390a15050505050505050565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611f3157600080fd5b505af1158015611f45573d6000803e3d6000fd5b505050506040513d6020811015611f5b57600080fd5b505160005433600160a060020a039283168114945091161490508180611f7e5750805b8061200e57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015611fe157600080fd5b505af1158015611ff5573d6000803e3d6000fd5b505050506040513d602081101561200b57600080fd5b50515b1515612052576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b60038054600160a060020a03861673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f0e2eb0247b22c29b3f02a9a2b65eae999b4117981e84dc701ce1fb6830a6ac5f9181900360200190a150505050565b60065462010000900460ff1681565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561212757600080fd5b505af115801561213b573d6000803e3d6000fd5b505050506040513d602081101561215157600080fd5b505160005433600160a060020a0392831681149450911614905081806121745750805b8061220457506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050506040513d602081101561220157600080fd5b50515b1515612248576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b600680548515156301000000810263ff000000199092169190911790915560408051918252517f1234a547e9a90612dd64cdca6ea7120623490ff57b5762b1e6f7bec9a81aaa409181900360200190a150505050565b600060018560405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106123215780518252601f199092019160209182019101612302565b51815160209384036101000a60001901801990921691161790526040805192909401829003822060008084528383018087529190915260ff8c1683860152606083018b9052608083018a9052935160a08084019750919550601f1981019492819003909101925090865af115801561239d573d6000803e3d6000fd5b505060408051601f198101516001547f8da5cb5b0000000000000000000000000000000000000000000000000000000083529251909450600160a060020a039092169250638da5cb5b9160048083019260209291908290030181600087803b15801561240857600080fd5b505af115801561241c573d6000803e3d6000fd5b505050506040513d602081101561243257600080fd5b5051600160a060020a038281169116148061245a5750600454600160a060020a038281169116145b15156124b0576040805160e560020a62461bcd02815260206004820152601060248201527f496e636f7272656374207369676e657200000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b60025460a060020a900460ff16151561251a576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b600160a060020a0381166000908152600560205260408120541515806125ad5750600160a060020a03821660009081526005602052604090206001015415155b80156125d45750600160a060020a0382166000908152600560205260409020600201544211155b92915050565b600154604080517f46b65ffd00000000000000000000000000000000000000000000000000000000815260036004820152600060248201819052825190938493600160a060020a03909116926346b65ffd926044808301939282900301818787803b15801561264857600080fd5b505af115801561265c573d6000803e3d6000fd5b505050506040513d604081101561267257600080fd5b50602001519050600160a060020a03811615156126925760009150611bef565b600191505090565b60025460a060020a900460ff16156126fc576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1560057484954454c49535400000000000000000000000000000000000000000000005065726d697373696f6e20636865636b206661696c6564000000000000000000a165627a7a72305820a1f92723bd8a4c700bc135f7e04f35fe9dec11d8d2916e12ffee583ef17684300029416c6c6f777320616e2069737375657220746f206d61696e7461696e20612074696d652062617365642077686974656c697374206f6620617574686f726973656420746f6b656e20686f6c646572732e4164647265737365732061726520616464656420766961206d6f6469667957686974656c6973742c20616e642074616b6520612066726f6d54696d6520287468652074696d652066726f6d20776869636820746865792063616e2073656e6420746f6b656e732920616e64206120746f54696d6520287468652074696d652066726f6d20776869636820746865792063616e207265636569766520746f6b656e73292e20546865726520617265206164646974696f6e616c20666c6167732c20616c6c6f77416c6c57686974656c69737449737375616e6365732c20616c6c6f77416c6c57686974656c6973745472616e7366657273202620616c6c6f77416c6c5472616e736665727320776869636820616c6c6f7720796f7520746f2073657420636f72726573706f6e64696e6720636f6e7472616374206c6576656c206265686176696f75722e20496e69742066756e6374696f6e2074616b6573206e6f20706172616d65746572732ea165627a7a723058205b011727b626cb1b4b6733932cee7851bbc2d1b76fd50c3e93883996e47287d60029",
  "deployedBytecode": "0x6080604052600436106100ef5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166277436081146100f457806306184a251461013057806315dae03e1461015757806317d7de7c146101825780631a092541146101975780633ae192bd1461022157806358a191c31461023b5780636faa22a514610253578063715018a6146102685780637e363ffa1461027d5780638da5cb5b14610292578063995d9ab7146102a7578063aac67b051461030c578063d54c472614610324578063e0d5497014610339578063f2fde38b1461034e578063ff3c1a8f1461036f575b600080fd5b34801561010057600080fd5b506101146004803560248101910135610384565b60408051600160a060020a039092168252519081900360200190f35b34801561013c57600080fd5b50610145610599565b60408051918252519081900360200190f35b34801561016357600080fd5b5061016c61059f565b6040805160ff9092168252519081900360200190f35b34801561018e57600080fd5b506101456105a4565b3480156101a357600080fd5b506101ac6105c8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101e65781810151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022d57600080fd5b50610239600435610627565b005b34801561024757600080fd5b50610239600435610684565b34801561025f57600080fd5b506101146106e1565b34801561027457600080fd5b506102396106f0565b34801561028957600080fd5b5061014561075c565b34801561029e57600080fd5b50610114610762565b3480156102b357600080fd5b506102bc610771565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102f85781810151838201526020016102e0565b505050509050019250505060405180910390f35b34801561031857600080fd5b5061023960043561080f565b34801561033057600080fd5b5061014561086c565b34801561034557600080fd5b506101ac610872565b34801561035a57600080fd5b50610239600160a060020a0360043516610896565b34801561037b57600080fd5b506101ac6108b9565b600080600060025411156104f65760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b15801561041157600080fd5b505af1158015610425573d6000803e3d6000fd5b505050506040513d602081101561043b57600080fd5b505115156104f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a031661050c61096d565b600160a060020a03928316815291166020820152604080519182900301906000f08015801561053f573d6000803e3d6000fd5b5090503061054b6105a4565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600290565b7f47656e6572616c5472616e736665724d616e616765720000000000000000000090565b60408051606081018252602d81527f4d616e616765207472616e7366657273207573696e6720612074696d6520626160208201527f7365642077686974656c697374000000000000000000000000000000000000009181019190915290565b600054600160a060020a0316331461063e57600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461069b57600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a0316331461070757600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b6040805160028082526060808301845292839291906020830190803883390190505090507f47656e6572616c000000000000000000000000000000000000000000000000008160008151811015156107c557fe5b6020908102909101015280517f5472616e73666572205265737472696374696f6e000000000000000000000000908290600190811061080057fe5b60209081029091010152905090565b600054600160a060020a0316331461082657600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60606101e0604051908101604052806101bc81526020016131f66101bc9139905090565b600054600160a060020a031633146108ad57600080fd5b6108b6816108f0565b50565b60408051808201909152601881527f47656e6572616c205472616e73666572204d616e616765720000000000000000602082015290565b600160a060020a038116151561090557600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6040516128788061097e83390190560060806040526002805460a060020a60ff021916905560038054600160a060020a03199081169091556004805490911690556006805463ff0000001962ffffff19909116620100001716905534801561005657600080fd5b5060405160408061287883398101604052805160209091015160018054600160a060020a03938416600160a060020a03199182161790915560008054821633179055600280549390921692169190911790556127c1806100b76000396000f30060806040526004361061015b5763ffffffff60e060020a60003504166307592f6081146101605780630f28937c146101a5578063144b8afa146102de5780631613ec9d146103075780631bb7cc99146103515780632909a80e146103785780633f0547bb1461038d5780633f4ba83a146103a75780634caaf45f146103bc5780635c975abb146103dd5780635f7619a4146103f25780636faa22a51461040a5780637915c9e01461043b5780637ecc866f1461048e5780638456cb59146104a85780639332b62c146104bd5780639728538f146104d75780639b19251a146104ec578063b1dd811114610535578063b3e82dc91461054a578063b3fac8ce1461055f578063b84dfbd214610574578063c3a07df614610589578063c45a0155146105ee578063d70afa9614610603578063d7604a7814610618578063e0c6815814610647578063e55d0f8b14610668578063e8a28d521461067d575b600080fd5b34801561016c57600080fd5b506101a3600160a060020a0360043516602435604435606435608435151560a43560c43560ff60e435166101043561012435610697565b005b3480156101b157600080fd5b50604080516020600480358082013583810280860185019096528085526101a395369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506109689650505050505050565b3480156102ea57600080fd5b506102f3610cf8565b604080519115158252519081900360200190f35b34801561031357600080fd5b5061031c610d08565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561035d57600080fd5b50610366610d0d565b60408051918252519081900360200190f35b34801561038457600080fd5b506102f3610d1f565b34801561039957600080fd5b506101a36004351515610d2d565b3480156103b357600080fd5b506101a3610efa565b3480156103c857600080fd5b506101a3600160a060020a0360043516610fe2565b3480156103e957600080fd5b506102f36111c9565b3480156103fe57600080fd5b506102f36004356111d9565b34801561041657600080fd5b5061041f6114f0565b60408051600160a060020a039092168252519081900360200190f35b34801561044757600080fd5b5061046a600160a060020a036004358116906024351660443560643515156114ff565b6040518082600381111561047a57fe5b60ff16815260200191505060405180910390f35b34801561049a57600080fd5b506101a36004351515611678565b3480156104b457600080fd5b506101a361184f565b3480156104c957600080fd5b506101a36004351515611935565b3480156104e357600080fd5b50610366611b0a565b3480156104f857600080fd5b5061050d600160a060020a0360043516611b19565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b34801561054157600080fd5b506102f3611b43565b34801561055657600080fd5b5061041f611b4c565b34801561056b57600080fd5b5061041f611b5b565b34801561058057600080fd5b5061041f611b6a565b34801561059557600080fd5b5061059e611b79565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105da5781810151838201526020016105c2565b505050509050019250505060405180910390f35b3480156105fa57600080fd5b5061041f611bf3565b34801561060f57600080fd5b50610366611c02565b34801561062457600080fd5b506101a3600160a060020a03600435166024356044356064356084351515611c26565b34801561065357600080fd5b506101a3600160a060020a0360043516611ecf565b34801561067457600080fd5b506102f36120b6565b34801561068957600080fd5b506101a360043515156120c5565b6000428611156106f1576040805160e560020a62461bcd02815260206004820152601660248201527f56616c696446726f6d20697320746f6f206561726c7900000000000000000000604482015290519081900360640190fd5b42851015610749576040805160e560020a62461bcd02815260206004820152601360248201527f56616c6964546f20697320746f6f206c61746500000000000000000000000000604482015290519081900360640190fd5b604080516c01000000000000000000000000308102602080840191909152600160a060020a038f169091026034830152604882018d9052606882018c9052608882018b90527f01000000000000000000000000000000000000000000000000000000000000008a15150260a883015260a9820189905260c98083018990528351808403909101815260e990920192839052815191929182918401908083835b602083106108075780518252601f1990920191602091820191016107e8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090506108428185858561229e565b6080604051908101604052808b81526020018a8152602001898152602001881515815250600560008d600160a060020a0316600160a060020a0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055509050507f7a985b3a91e6a809b9457eb0e56c26c57186f124ae7e661ef14fa3518d49cdba8b42338d8d8d8d6040518088600160a060020a0316600160a060020a0316815260200187815260200186600160a060020a0316600160a060020a031681526020018581526020018481526020018381526020018215151515815260200197505050505050505060405180910390a15050505050505050505050565b6000600080516020612756833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156109cf57600080fd5b505af11580156109e3573d6000803e3d6000fd5b505050506040513d60208110156109f957600080fd5b505160005433600160a060020a039283168114945091161490508180610a1c5750805b80610aac57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610a7f57600080fd5b505af1158015610a93573d6000803e3d6000fd5b505050506040513d6020811015610aa957600080fd5b50515b1515610af0576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b8751895114610b49576040805160e560020a62461bcd02815260206004820152601860248201527f4d69736d61746368656420696e707574206c656e677468730000000000000000604482015290519081900360640190fd5b8651885114610ba2576040805160e560020a62461bcd02815260206004820152601860248201527f4d69736d61746368656420696e707574206c656e677468730000000000000000604482015290519081900360640190fd5b8551875114610bfb576040805160e560020a62461bcd02815260206004820152601860248201527f4d69736d61746368656420696e707574206c656e677468730000000000000000604482015290519081900360640190fd5b8651855114610c54576040805160e560020a62461bcd02815260206004820152601760248201527f4d69736d61746368656420696e707574206c656e677468000000000000000000604482015290519081900360640190fd5b600093505b8851841015610ced57610ce28985815181101515610c7357fe5b906020019060200201518986815181101515610c8b57fe5b906020019060200201518987815181101515610ca357fe5b906020019060200201518988815181101515610cbb57fe5b906020019060200201518989815181101515610cd357fe5b90602001906020020151611c26565b600190930192610c59565b505050505050505050565b6006546301000000900460ff1681565b600090565b60008051602061275683398151915281565b600654610100900460ff1681565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b505050506040513d6020811015610db957600080fd5b505160005433600160a060020a039283168114945091161490508180610ddc5750805b80610e6c57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610e3f57600080fd5b505af1158015610e53573d6000803e3d6000fd5b505050506040513d6020811015610e6957600080fd5b50515b1515610eb0576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b6006805485151560ff19909116811790915560408051918252517f185556241b5bd01bdb7ff63397b8990ec8d33116f15a7d7eb5f2b8f7072e1d499181900360200190a150505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f4d57600080fd5b505af1158015610f61573d6000803e3d6000fd5b505050506040513d6020811015610f7757600080fd5b5051600160a060020a03163314610fd8576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610fe06124b7565b565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050506040513d602081101561106e57600080fd5b505160005433600160a060020a0392831681149450911614905081806110915750805b8061112157506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b505050506040513d602081101561111e57600080fd5b50515b1515611165576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b60048054600160a060020a03861673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f5940b3e4196e0af34b25de54a6476219b7065395349f15fb84006511fd962d329181900360200190a150505050565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b505050506040513d602081101561127c57600080fd5b505160005433600160a060020a03928316811494509116149050818061129f5750805b8061132f57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561130257600080fd5b505af1158015611316573d6000803e3d6000fd5b505050506040513d602081101561132c57600080fd5b50515b1515611373576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b1580156113e257600080fd5b505af11580156113f6573d6000803e3d6000fd5b505050506040513d602081101561140c57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b15801561146357600080fd5b505af1158015611477573d6000803e3d6000fd5b505050506040513d602081101561148d57600080fd5b505115156114e5576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600254600160a060020a031681565b60025460009060a060020a900460ff1615156114e55760065460ff161561152857506002611670565b6006546301000000900460ff1680156115485750600160a060020a038416155b1561155557506002611670565b600654610100900460ff16156115935761156e8461256d565b801561157e575061157e8561256d565b61158957600161158c565b60025b9050611670565b60065462010000900460ff1680156115b85750600354600160a060020a038681169116145b1561160257600160a060020a03841660009081526005602052604090206003015460ff161580156115ec57506115ec6125da565b156115f957506001611670565b61157e8461256d565b61160b8561256d565b801561162f5750600160a060020a0385166000908152600560205260409020544210155b801561157e575061163f8461256d565b801561157e5750600160a060020a03841660009081526005602052604090206001015442101561158957600161158c565b949350505050565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156116da57600080fd5b505af11580156116ee573d6000803e3d6000fd5b505050506040513d602081101561170457600080fd5b505160005433600160a060020a0392831681149450911614905081806117275750805b806117b757506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561178a57600080fd5b505af115801561179e573d6000803e3d6000fd5b505050506040513d60208110156117b457600080fd5b50515b15156117fb576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b6006805485151562010000810262ff0000199092169190911790915560408051918252517f4b711350abee425bbbbd22b0a6615df775a36f2838168ca64da9177ad8fec1609181900360200190a150505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156118a257600080fd5b505af11580156118b6573d6000803e3d6000fd5b505050506040513d60208110156118cc57600080fd5b5051600160a060020a0316331461192d576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610fe061269a565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561199757600080fd5b505af11580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b505160005433600160a060020a0392831681149450911614905081806119e45750805b80611a7457506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015611a4757600080fd5b505af1158015611a5b573d6000803e3d6000fd5b505050506040513d6020811015611a7157600080fd5b50515b1515611ab8576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b60068054851515610100810261ff00199092169190911790915560408051918252517f7544dcc0388a2e2a001b92ece53af2e1e3135973ff37e5dcd80a12cf5ed2b4259181900360200190a150505050565b60d860020a64464c4147530281565b60056020526000908152604090208054600182015460028301546003909301549192909160ff1684565b60065460ff1681565b600454600160a060020a031681565b600354600160a060020a031681565b600154600160a060020a031681565b604080516002808252606080830184529283929190602083019080388339019050509050600080516020612756833981519152816000815181101515611bbb57fe5b60209081029091010152805160d860020a64464c414753029082906001908110611be157fe5b602090810290910101529050805b5090565b600054600160a060020a031681565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b600080516020612756833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611c8b57600080fd5b505af1158015611c9f573d6000803e3d6000fd5b505050506040513d6020811015611cb557600080fd5b505160005433600160a060020a039283168114945091161490508180611cd85750805b80611d6857506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015611d3b57600080fd5b505af1158015611d4f573d6000803e3d6000fd5b505050506040513d6020811015611d6557600080fd5b50515b1515611dac576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b608060405190810160405280888152602001878152602001868152602001851515815250600560008a600160a060020a0316600160a060020a0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055509050507f7a985b3a91e6a809b9457eb0e56c26c57186f124ae7e661ef14fa3518d49cdba8842338a8a8a8a6040518088600160a060020a0316600160a060020a0316815260200187815260200186600160a060020a0316600160a060020a031681526020018581526020018481526020018381526020018215151515815260200197505050505050505060405180910390a15050505050505050565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611f3157600080fd5b505af1158015611f45573d6000803e3d6000fd5b505050506040513d6020811015611f5b57600080fd5b505160005433600160a060020a039283168114945091161490508180611f7e5750805b8061200e57506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015611fe157600080fd5b505af1158015611ff5573d6000803e3d6000fd5b505050506040513d602081101561200b57600080fd5b50515b1515612052576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b60038054600160a060020a03861673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f0e2eb0247b22c29b3f02a9a2b65eae999b4117981e84dc701ce1fb6830a6ac5f9181900360200190a150505050565b60065462010000900460ff1681565b60d860020a64464c41475302600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561212757600080fd5b505af115801561213b573d6000803e3d6000fd5b505050506040513d602081101561215157600080fd5b505160005433600160a060020a0392831681149450911614905081806121745750805b8061220457506001546040805160e060020a638658b8b9028152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050506040513d602081101561220157600080fd5b50515b1515612248576040805160e560020a62461bcd0281526020600482015260176024820152600080516020612776833981519152604482015290519081900360640190fd5b600680548515156301000000810263ff000000199092169190911790915560408051918252517f1234a547e9a90612dd64cdca6ea7120623490ff57b5762b1e6f7bec9a81aaa409181900360200190a150505050565b600060018560405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106123215780518252601f199092019160209182019101612302565b51815160209384036101000a60001901801990921691161790526040805192909401829003822060008084528383018087529190915260ff8c1683860152606083018b9052608083018a9052935160a08084019750919550601f1981019492819003909101925090865af115801561239d573d6000803e3d6000fd5b505060408051601f198101516001547f8da5cb5b0000000000000000000000000000000000000000000000000000000083529251909450600160a060020a039092169250638da5cb5b9160048083019260209291908290030181600087803b15801561240857600080fd5b505af115801561241c573d6000803e3d6000fd5b505050506040513d602081101561243257600080fd5b5051600160a060020a038281169116148061245a5750600454600160a060020a038281169116145b15156124b0576040805160e560020a62461bcd02815260206004820152601060248201527f496e636f7272656374207369676e657200000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b60025460a060020a900460ff16151561251a576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b600160a060020a0381166000908152600560205260408120541515806125ad5750600160a060020a03821660009081526005602052604090206001015415155b80156125d45750600160a060020a0382166000908152600560205260409020600201544211155b92915050565b600154604080517f46b65ffd00000000000000000000000000000000000000000000000000000000815260036004820152600060248201819052825190938493600160a060020a03909116926346b65ffd926044808301939282900301818787803b15801561264857600080fd5b505af115801561265c573d6000803e3d6000fd5b505050506040513d604081101561267257600080fd5b50602001519050600160a060020a03811615156126925760009150611bef565b600191505090565b60025460a060020a900460ff16156126fc576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1560057484954454c49535400000000000000000000000000000000000000000000005065726d697373696f6e20636865636b206661696c6564000000000000000000a165627a7a72305820a1f92723bd8a4c700bc135f7e04f35fe9dec11d8d2916e12ffee583ef17684300029416c6c6f777320616e2069737375657220746f206d61696e7461696e20612074696d652062617365642077686974656c697374206f6620617574686f726973656420746f6b656e20686f6c646572732e4164647265737365732061726520616464656420766961206d6f6469667957686974656c6973742c20616e642074616b6520612066726f6d54696d6520287468652074696d652066726f6d20776869636820746865792063616e2073656e6420746f6b656e732920616e64206120746f54696d6520287468652074696d652066726f6d20776869636820746865792063616e207265636569766520746f6b656e73292e20546865726520617265206164646974696f6e616c20666c6167732c20616c6c6f77416c6c57686974656c69737449737375616e6365732c20616c6c6f77416c6c57686974656c6973745472616e7366657273202620616c6c6f77416c6c5472616e736665727320776869636820616c6c6f7720796f7520746f2073657420636f72726573706f6e64696e6720636f6e7472616374206c6576656c206265686176696f75722e20496e69742066756e6374696f6e2074616b6573206e6f20706172616d65746572732ea165627a7a723058205b011727b626cb1b4b6733932cee7851bbc2d1b76fd50c3e93883996e47287d60029",
  "sourceMap": "182:2599:49:-;;;341:199;8:9:-1;5:2;;;30:1;27;20:12;5:2;341:199:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;182:2599:49;;;;;;",
  "deployedSourceMap": "182:2599:49:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;684:508;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;684:508:49;;;;;;;;;;;;;;;;-1:-1:-1;;;;;684:508:49;;;;;;;;;;;;;;363:38:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;363:38:14;;;;;;;;;;;;;;;;;;;;1257:71:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1257:71:49;;;;;;;;;;;;;;;;;;;;;;;1392:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1392:96:49;;;;1559:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1559:125:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1559:125:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;2541:236:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2541:236:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;2541:236:49;;;;;;;;;;;;;;;;;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;;;;1936:525:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1936:525:49;;;;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;;;;;1749:98:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1749:98:49;;;;684:508;736:7;927:30;771:1;759:9;;:13;755:162;;;794:9;;;829:5;;836:9;;794:52;;;;;;817:10;794:52;;;;-1:-1:-1;;;;;829:5:49;;;794:52;;;;;;;;;;;;:9;;;;;:22;;:52;;;;;;;;;;;;;;;;;;;:9;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;794:52:49;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;794:52:49;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;794:52:49;786:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1007:9;;987:10;;-1:-1:-1;;;;;1007:9:49;960:58;;:::i;:::-;-1:-1:-1;;;;;960:58:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;960:58:49;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;927:91:49;-1:-1:-1;1114:4:49;1095:9;:7;:9::i;:::-;1033:104;;;-1:-1:-1;;;;;1033:104:49;;;;1121:10;1033:104;;;;1133:3;1033:104;;;;;;;;;;;;;;;1162:22;684:508;-1:-1:-1;;;684:508:49:o;363:38:14:-;;;;:::o;1257:71:49:-;1320:1;1257:71;:::o;1392:96::-;1450:31;1392:96;:::o;1559:125::-;1623:54;;;1605:6;1623:54;;;;;;;;;;;;;;;;;;;;1559:125;:::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;2541:236:49:-;2635:16;;;2649:1;2635:16;;;2580:9;2635:16;;;;;2580:9;;;2635:16;2649:1;2635:16;;;;;105:10:-1;2635:16:49;88:34:-1;136:17;;-1:-1;2635:16:49;2602:49;;2661:28;:13;2675:1;2661:16;;;;;;;;;;;;;;;;;;:28;2699:16;;:41;;:13;;2713:1;;2699:16;;;;;;;;;;;;;;:41;2757:13;-1:-1:-1;2541:236:49;:::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;1936:525:49:-;1983:6;2001:453;;;;;;;;;;;;;;;;;;;;1936:525;:::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;1749:98:49:-;1807:33;;;;;;;;;;;;;;;;;1749:98;:::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;182:2599:49:-;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./GeneralTransferManager.sol\";\nimport \"../../interfaces/IModuleFactory.sol\";\n\n/**\n * @title Factory for deploying GeneralTransferManager module\n */\ncontract GeneralTransferManagerFactory 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     /**\n     * @notice used to launch the Module with the help of factory\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        address generalTransferManager = new GeneralTransferManager(msg.sender, address(polyToken));\n        emit LogGenerateModuleFromFactory(address(generalTransferManager), getName(), address(this), msg.sender, now);\n        return address(generalTransferManager);\n    }\n\n\n    /**\n     * @notice Type of the Module factory\n     */\n    function getType() public view returns(uint8) {\n        return 2;\n    }\n\n    /**\n     * @notice Get the name of the Module\n     */\n    function getName() public view returns(bytes32) {\n        return \"GeneralTransferManager\";\n    }\n\n    /**\n     * @notice Get the description of the Module\n     */\n    function getDescription() public view returns(string) {\n        return \"Manage transfers using a time based whitelist\";\n    }\n\n    /**\n     * @notice Get the title of the Module\n     */\n    function getTitle() public view returns(string) {\n        return \"General Transfer Manager\";\n    }\n\n    /**\n     * @notice Get the Instructions that helped to used the module\n     */\n    function getInstructions() public view returns(string) {\n        return \"Allows an issuer to maintain a time based whitelist of authorised token holders.Addresses are added via modifyWhitelist, and take a fromTime (the time from which they can send tokens) and a toTime (the time from which they can receive tokens). There are additional flags, allowAllWhitelistIssuances, allowAllWhitelistTransfers & allowAllTransfers which allow you to set corresponding contract level behaviour. Init function takes no parameters.\";\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[](2);\n        availableTags[0] = \"General\";\n        availableTags[1] = \"Transfer Restriction\";\n        return availableTags;\n    }\n\n\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/GeneralTransferManagerFactory.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/GeneralTransferManagerFactory.sol",
    "exportedSymbols": {
      "GeneralTransferManagerFactory": [
        18345
      ]
    },
    "id": 18346,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 18199,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:49"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/GeneralTransferManager.sol",
        "file": "./GeneralTransferManager.sol",
        "id": 18200,
        "nodeType": "ImportDirective",
        "scope": 18346,
        "sourceUnit": 18198,
        "src": "26:38:49",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 18201,
        "nodeType": "ImportDirective",
        "scope": 18346,
        "sourceUnit": 9955,
        "src": "65:45:49",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18202,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "224:14:49",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 18203,
            "nodeType": "InheritanceSpecifier",
            "src": "224:14:49"
          }
        ],
        "contractDependencies": [
          9954,
          18197,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying GeneralTransferManager module",
        "fullyImplemented": true,
        "id": 18345,
        "linearizedBaseContracts": [
          18345,
          9954,
          22664
        ],
        "name": "GeneralTransferManagerFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 18220,
              "nodeType": "Block",
              "src": "532:8:49",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 18221,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 18214,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18205,
                    "src": "471:12:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18215,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18207,
                    "src": "485:10:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18216,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18209,
                    "src": "497:10:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18217,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18211,
                    "src": "509:17:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 18218,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 18213,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "456:14:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "456:71:49"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18205,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 18221,
                  "src": "354:20:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18204,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "354:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18207,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18221,
                  "src": "376:18:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18206,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "376:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18209,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18221,
                  "src": "396:18:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18208,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "396:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18211,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18221,
                  "src": "416:25:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18210,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "416:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "353:89:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18219,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "532:0:49"
            },
            "scope": 18345,
            "src": "341:199:49",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18272,
              "nodeType": "Block",
              "src": "745:447:49",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 18230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 18228,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "759:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18229,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "771:1:49",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "759:13:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18242,
                  "nodeType": "IfStatement",
                  "src": "755:162:49",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18234,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "817:3:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 18235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "817:10:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18236,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "829:5:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18237,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "836:9:49",
                              "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": 18232,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "794:9:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 18233,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "794:22:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 18238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "794:52:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 18239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "848:68:49",
                          "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": 18231,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "786:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 18240,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "786:131:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 18241,
                    "nodeType": "ExpressionStatement",
                    "src": "786:131:49"
                  }
                },
                {
                  "assignments": [
                    18244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18244,
                      "name": "generalTransferManager",
                      "nodeType": "VariableDeclaration",
                      "scope": 18273,
                      "src": "927:30:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18243,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "927:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18253,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18247,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "987:3:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "987:10:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18250,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1007:9:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 18249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "999:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18251,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "999:18:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18246,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "960:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_GeneralTransferManager_$18197_$",
                        "typeString": "function (address,address) returns (contract GeneralTransferManager)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 18245,
                        "name": "GeneralTransferManager",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 18197,
                        "src": "964:22:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GeneralTransferManager_$18197",
                          "typeString": "contract GeneralTransferManager"
                        }
                      }
                    },
                    "id": 18252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "960:58:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GeneralTransferManager_$18197",
                      "typeString": "contract GeneralTransferManager"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "927:91:49"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18256,
                            "name": "generalTransferManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18244,
                            "src": "1070:22:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1062:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18257,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1062:31:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 18258,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            18289
                          ],
                          "referencedDeclaration": 18289,
                          "src": "1095:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 18259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1095:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18261,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23292,
                            "src": "1114:4:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GeneralTransferManagerFactory_$18345",
                              "typeString": "contract GeneralTransferManagerFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GeneralTransferManagerFactory_$18345",
                              "typeString": "contract GeneralTransferManagerFactory"
                            }
                          ],
                          "id": 18260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1106:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1106:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18263,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1121:3:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1121:10:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18265,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1133:3:49",
                        "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": 18254,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1033:28:49",
                      "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": 18266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1033:104:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18267,
                  "nodeType": "EmitStatement",
                  "src": "1028:109:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18269,
                        "name": "generalTransferManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18244,
                        "src": "1162:22:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18268,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1154:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 18270,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1154:31:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 18227,
                  "id": 18271,
                  "nodeType": "Return",
                  "src": "1147:38:49"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 18273,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18224,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18223,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18273,
                  "src": "700:5:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 18222,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "700:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "699:19:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18226,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18273,
                  "src": "736:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "736:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "735:9:49"
            },
            "scope": 18345,
            "src": "684:508:49",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18280,
              "nodeType": "Block",
              "src": "1303:25:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "32",
                    "id": 18278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1320:1:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "functionReturnParameters": 18277,
                  "id": 18279,
                  "nodeType": "Return",
                  "src": "1313:8:49"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 18281,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18274,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1273:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18276,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18281,
                  "src": "1296:5:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 18275,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1296:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1295:7:49"
            },
            "scope": 18345,
            "src": "1257:71:49",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18288,
              "nodeType": "Block",
              "src": "1440:48:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "47656e6572616c5472616e736665724d616e61676572",
                    "id": 18286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1457:24:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_597a8569aa87b3ef82c683b359a94f6a4b9def7139f0a772fac6aed0983c0ab1",
                      "typeString": "literal_string \"GeneralTransferManager\""
                    },
                    "value": "GeneralTransferManager"
                  },
                  "functionReturnParameters": 18285,
                  "id": 18287,
                  "nodeType": "Return",
                  "src": "1450:31:49"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 18289,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18282,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1408:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18284,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18289,
                  "src": "1431:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18283,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1431:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1430:9:49"
            },
            "scope": 18345,
            "src": "1392:96:49",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18296,
              "nodeType": "Block",
              "src": "1613:71:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4d616e616765207472616e7366657273207573696e6720612074696d652062617365642077686974656c697374",
                    "id": 18294,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1630:47:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b86f751b760b7fafd321f0f102b2c8674668beee1b7e4a1544ea4a6a40a5f822",
                      "typeString": "literal_string \"Manage transfers using a time based whitelist\""
                    },
                    "value": "Manage transfers using a time based whitelist"
                  },
                  "functionReturnParameters": 18293,
                  "id": 18295,
                  "nodeType": "Return",
                  "src": "1623:54:49"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 18297,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18290,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1582:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18293,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18292,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18297,
                  "src": "1605:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18291,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1605:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1604:8:49"
            },
            "scope": 18345,
            "src": "1559:125:49",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18304,
              "nodeType": "Block",
              "src": "1797:50:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "47656e6572616c205472616e73666572204d616e61676572",
                    "id": 18302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1814:26:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b1ab8c7221f04b46af85954fa087c99f57f2fd812b46907525a74644d6109064",
                      "typeString": "literal_string \"General Transfer Manager\""
                    },
                    "value": "General Transfer Manager"
                  },
                  "functionReturnParameters": 18301,
                  "id": 18303,
                  "nodeType": "Return",
                  "src": "1807:33:49"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 18305,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18298,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1766:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18300,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18305,
                  "src": "1789:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18299,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1789:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1788:8:49"
            },
            "scope": 18345,
            "src": "1749:98:49",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18312,
              "nodeType": "Block",
              "src": "1991:470:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "416c6c6f777320616e2069737375657220746f206d61696e7461696e20612074696d652062617365642077686974656c697374206f6620617574686f726973656420746f6b656e20686f6c646572732e4164647265737365732061726520616464656420766961206d6f6469667957686974656c6973742c20616e642074616b6520612066726f6d54696d6520287468652074696d652066726f6d20776869636820746865792063616e2073656e6420746f6b656e732920616e64206120746f54696d6520287468652074696d652066726f6d20776869636820746865792063616e207265636569766520746f6b656e73292e20546865726520617265206164646974696f6e616c20666c6167732c20616c6c6f77416c6c57686974656c69737449737375616e6365732c20616c6c6f77416c6c57686974656c6973745472616e7366657273202620616c6c6f77416c6c5472616e736665727320776869636820616c6c6f7720796f7520746f2073657420636f72726573706f6e64696e6720636f6e7472616374206c6576656c206265686176696f75722e20496e69742066756e6374696f6e2074616b6573206e6f20706172616d65746572732e",
                    "id": 18310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2008:446:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_34ff8cc254443ee1c1f7c8f7cae956822da71021d3f6029cb026c36d5a08ecad",
                      "typeString": "literal_string \"Allows an issuer to maintain a time based whitelist of authorised token holders.Addresses are added via modifyWhitelist, and take a fromTime (the time from which they can send tokens) and a toTime (the time from which they can receive tokens). There are additional flags, allowAllWhitelistIssuances, allowAllWhitelistTransfers & allowAllTransfers which allow you to set corresponding contract level behaviour. Init function takes no parameters.\""
                    },
                    "value": "Allows an issuer to maintain a time based whitelist of authorised token holders.Addresses are added via modifyWhitelist, and take a fromTime (the time from which they can send tokens) and a toTime (the time from which they can receive tokens). There are additional flags, allowAllWhitelistIssuances, allowAllWhitelistTransfers & allowAllTransfers which allow you to set corresponding contract level behaviour. Init function takes no parameters."
                  },
                  "functionReturnParameters": 18309,
                  "id": 18311,
                  "nodeType": "Return",
                  "src": "2001:453:49"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 18313,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1960:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18308,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18313,
                  "src": "1983:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18307,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1983:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1982:8:49"
            },
            "scope": 18345,
            "src": "1936:525:49",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18343,
              "nodeType": "Block",
              "src": "2591:186:49",
              "statements": [
                {
                  "assignments": [
                    18322
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18322,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 18344,
                      "src": "2602:30:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 18320,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2602:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18321,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2602:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18328,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 18326,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2649:1:49",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 18325,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2635:13:49",
                      "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": 18323,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2639:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18324,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2639:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 18327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2635:16:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2602:49:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 18329,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18322,
                        "src": "2661:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 18331,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 18330,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2675:1:49",
                        "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": "2661:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "47656e6572616c",
                      "id": 18332,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2680:9:49",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_5a238724f4923a504a7bc7b1da49b8ad37187664eb292980fef19a3441928b2c",
                        "typeString": "literal_string \"General\""
                      },
                      "value": "General"
                    },
                    "src": "2661:28:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18334,
                  "nodeType": "ExpressionStatement",
                  "src": "2661:28:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 18335,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18322,
                        "src": "2699:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 18337,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 18336,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2713:1:49",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2699:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "5472616e73666572205265737472696374696f6e",
                      "id": 18338,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2718:22:49",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_1f1107ce03efdc6815f0e4c8942c399d895b30a78a8c319011b2bf9d6503adb7",
                        "typeString": "literal_string \"Transfer Restriction\""
                      },
                      "value": "Transfer Restriction"
                    },
                    "src": "2699:41:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18340,
                  "nodeType": "ExpressionStatement",
                  "src": "2699:41:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18341,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18322,
                    "src": "2757:13:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 18318,
                  "id": 18342,
                  "nodeType": "Return",
                  "src": "2750:20:49"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 18344,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18314,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2557:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18318,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18317,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18344,
                  "src": "2580:9:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 18315,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2580:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 18316,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2580:9:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2579:11:49"
            },
            "scope": 18345,
            "src": "2541:236:49",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 18346,
        "src": "182:2599:49"
      }
    ],
    "src": "0:2782:49"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/GeneralTransferManagerFactory.sol",
    "exportedSymbols": {
      "GeneralTransferManagerFactory": [
        18345
      ]
    },
    "id": 18346,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 18199,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:49"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/GeneralTransferManager.sol",
        "file": "./GeneralTransferManager.sol",
        "id": 18200,
        "nodeType": "ImportDirective",
        "scope": 18346,
        "sourceUnit": 18198,
        "src": "26:38:49",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 18201,
        "nodeType": "ImportDirective",
        "scope": 18346,
        "sourceUnit": 9955,
        "src": "65:45:49",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18202,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "224:14:49",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 18203,
            "nodeType": "InheritanceSpecifier",
            "src": "224:14:49"
          }
        ],
        "contractDependencies": [
          9954,
          18197,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying GeneralTransferManager module",
        "fullyImplemented": true,
        "id": 18345,
        "linearizedBaseContracts": [
          18345,
          9954,
          22664
        ],
        "name": "GeneralTransferManagerFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 18220,
              "nodeType": "Block",
              "src": "532:8:49",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 18221,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 18214,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18205,
                    "src": "471:12:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18215,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18207,
                    "src": "485:10:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18216,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18209,
                    "src": "497:10:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 18217,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18211,
                    "src": "509:17:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 18218,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 18213,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "456:14:49",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "456:71:49"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18205,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 18221,
                  "src": "354:20:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18204,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "354:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18207,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18221,
                  "src": "376:18:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18206,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "376:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18209,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18221,
                  "src": "396:18:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18208,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "396:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18211,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 18221,
                  "src": "416:25:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18210,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "416:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "353:89:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18219,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "532:0:49"
            },
            "scope": 18345,
            "src": "341:199:49",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18272,
              "nodeType": "Block",
              "src": "745:447:49",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 18230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 18228,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "759:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18229,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "771:1:49",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "759:13:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18242,
                  "nodeType": "IfStatement",
                  "src": "755:162:49",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18234,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "817:3:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 18235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "817:10:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18236,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "829:5:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18237,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "836:9:49",
                              "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": 18232,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "794:9:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 18233,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "794:22:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 18238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "794:52:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 18239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "848:68:49",
                          "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": 18231,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "786:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 18240,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "786:131:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 18241,
                    "nodeType": "ExpressionStatement",
                    "src": "786:131:49"
                  }
                },
                {
                  "assignments": [
                    18244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18244,
                      "name": "generalTransferManager",
                      "nodeType": "VariableDeclaration",
                      "scope": 18273,
                      "src": "927:30:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18243,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "927:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18253,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18247,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "987:3:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "987:10:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18250,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1007:9:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 18249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "999:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18251,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "999:18:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18246,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "960:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_GeneralTransferManager_$18197_$",
                        "typeString": "function (address,address) returns (contract GeneralTransferManager)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 18245,
                        "name": "GeneralTransferManager",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 18197,
                        "src": "964:22:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GeneralTransferManager_$18197",
                          "typeString": "contract GeneralTransferManager"
                        }
                      }
                    },
                    "id": 18252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "960:58:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GeneralTransferManager_$18197",
                      "typeString": "contract GeneralTransferManager"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "927:91:49"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18256,
                            "name": "generalTransferManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18244,
                            "src": "1070:22:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1062:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18257,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1062:31:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 18258,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            18289
                          ],
                          "referencedDeclaration": 18289,
                          "src": "1095:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 18259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1095:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18261,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23292,
                            "src": "1114:4:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GeneralTransferManagerFactory_$18345",
                              "typeString": "contract GeneralTransferManagerFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GeneralTransferManagerFactory_$18345",
                              "typeString": "contract GeneralTransferManagerFactory"
                            }
                          ],
                          "id": 18260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1106:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 18262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1106:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18263,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1121:3:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1121:10:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18265,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1133:3:49",
                        "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": 18254,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1033:28:49",
                      "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": 18266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1033:104:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18267,
                  "nodeType": "EmitStatement",
                  "src": "1028:109:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18269,
                        "name": "generalTransferManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18244,
                        "src": "1162:22:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18268,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1154:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 18270,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1154:31:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 18227,
                  "id": 18271,
                  "nodeType": "Return",
                  "src": "1147:38:49"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 18273,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18224,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18223,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18273,
                  "src": "700:5:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 18222,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "700:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "699:19:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18226,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18273,
                  "src": "736:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "736:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "735:9:49"
            },
            "scope": 18345,
            "src": "684:508:49",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18280,
              "nodeType": "Block",
              "src": "1303:25:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "32",
                    "id": 18278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1320:1:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "functionReturnParameters": 18277,
                  "id": 18279,
                  "nodeType": "Return",
                  "src": "1313:8:49"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 18281,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18274,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1273:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18276,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18281,
                  "src": "1296:5:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 18275,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1296:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1295:7:49"
            },
            "scope": 18345,
            "src": "1257:71:49",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18288,
              "nodeType": "Block",
              "src": "1440:48:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "47656e6572616c5472616e736665724d616e61676572",
                    "id": 18286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1457:24:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_597a8569aa87b3ef82c683b359a94f6a4b9def7139f0a772fac6aed0983c0ab1",
                      "typeString": "literal_string \"GeneralTransferManager\""
                    },
                    "value": "GeneralTransferManager"
                  },
                  "functionReturnParameters": 18285,
                  "id": 18287,
                  "nodeType": "Return",
                  "src": "1450:31:49"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 18289,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18282,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1408:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18284,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18289,
                  "src": "1431:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18283,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1431:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1430:9:49"
            },
            "scope": 18345,
            "src": "1392:96:49",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18296,
              "nodeType": "Block",
              "src": "1613:71:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4d616e616765207472616e7366657273207573696e6720612074696d652062617365642077686974656c697374",
                    "id": 18294,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1630:47:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b86f751b760b7fafd321f0f102b2c8674668beee1b7e4a1544ea4a6a40a5f822",
                      "typeString": "literal_string \"Manage transfers using a time based whitelist\""
                    },
                    "value": "Manage transfers using a time based whitelist"
                  },
                  "functionReturnParameters": 18293,
                  "id": 18295,
                  "nodeType": "Return",
                  "src": "1623:54:49"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 18297,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18290,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1582:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18293,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18292,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18297,
                  "src": "1605:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18291,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1605:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1604:8:49"
            },
            "scope": 18345,
            "src": "1559:125:49",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18304,
              "nodeType": "Block",
              "src": "1797:50:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "47656e6572616c205472616e73666572204d616e61676572",
                    "id": 18302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1814:26:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b1ab8c7221f04b46af85954fa087c99f57f2fd812b46907525a74644d6109064",
                      "typeString": "literal_string \"General Transfer Manager\""
                    },
                    "value": "General Transfer Manager"
                  },
                  "functionReturnParameters": 18301,
                  "id": 18303,
                  "nodeType": "Return",
                  "src": "1807:33:49"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 18305,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18298,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1766:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18300,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18305,
                  "src": "1789:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18299,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1789:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1788:8:49"
            },
            "scope": 18345,
            "src": "1749:98:49",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18312,
              "nodeType": "Block",
              "src": "1991:470:49",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "416c6c6f777320616e2069737375657220746f206d61696e7461696e20612074696d652062617365642077686974656c697374206f6620617574686f726973656420746f6b656e20686f6c646572732e4164647265737365732061726520616464656420766961206d6f6469667957686974656c6973742c20616e642074616b6520612066726f6d54696d6520287468652074696d652066726f6d20776869636820746865792063616e2073656e6420746f6b656e732920616e64206120746f54696d6520287468652074696d652066726f6d20776869636820746865792063616e207265636569766520746f6b656e73292e20546865726520617265206164646974696f6e616c20666c6167732c20616c6c6f77416c6c57686974656c69737449737375616e6365732c20616c6c6f77416c6c57686974656c6973745472616e7366657273202620616c6c6f77416c6c5472616e736665727320776869636820616c6c6f7720796f7520746f2073657420636f72726573706f6e64696e6720636f6e7472616374206c6576656c206265686176696f75722e20496e69742066756e6374696f6e2074616b6573206e6f20706172616d65746572732e",
                    "id": 18310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2008:446:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_34ff8cc254443ee1c1f7c8f7cae956822da71021d3f6029cb026c36d5a08ecad",
                      "typeString": "literal_string \"Allows an issuer to maintain a time based whitelist of authorised token holders.Addresses are added via modifyWhitelist, and take a fromTime (the time from which they can send tokens) and a toTime (the time from which they can receive tokens). There are additional flags, allowAllWhitelistIssuances, allowAllWhitelistTransfers & allowAllTransfers which allow you to set corresponding contract level behaviour. Init function takes no parameters.\""
                    },
                    "value": "Allows an issuer to maintain a time based whitelist of authorised token holders.Addresses are added via modifyWhitelist, and take a fromTime (the time from which they can send tokens) and a toTime (the time from which they can receive tokens). There are additional flags, allowAllWhitelistIssuances, allowAllWhitelistTransfers & allowAllTransfers which allow you to set corresponding contract level behaviour. Init function takes no parameters."
                  },
                  "functionReturnParameters": 18309,
                  "id": 18311,
                  "nodeType": "Return",
                  "src": "2001:453:49"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 18313,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1960:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18308,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18313,
                  "src": "1983:6:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18307,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1983:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1982:8:49"
            },
            "scope": 18345,
            "src": "1936:525:49",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18343,
              "nodeType": "Block",
              "src": "2591:186:49",
              "statements": [
                {
                  "assignments": [
                    18322
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18322,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 18344,
                      "src": "2602:30:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 18320,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2602:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18321,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2602:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18328,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 18326,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2649:1:49",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 18325,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2635:13:49",
                      "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": 18323,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2639:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18324,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2639:9:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 18327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2635:16:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2602:49:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 18329,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18322,
                        "src": "2661:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 18331,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 18330,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2675:1:49",
                        "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": "2661:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "47656e6572616c",
                      "id": 18332,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2680:9:49",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_5a238724f4923a504a7bc7b1da49b8ad37187664eb292980fef19a3441928b2c",
                        "typeString": "literal_string \"General\""
                      },
                      "value": "General"
                    },
                    "src": "2661:28:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18334,
                  "nodeType": "ExpressionStatement",
                  "src": "2661:28:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 18335,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18322,
                        "src": "2699:13:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 18337,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 18336,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2713:1:49",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2699:16:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "5472616e73666572205265737472696374696f6e",
                      "id": 18338,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2718:22:49",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_1f1107ce03efdc6815f0e4c8942c399d895b30a78a8c319011b2bf9d6503adb7",
                        "typeString": "literal_string \"Transfer Restriction\""
                      },
                      "value": "Transfer Restriction"
                    },
                    "src": "2699:41:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18340,
                  "nodeType": "ExpressionStatement",
                  "src": "2699:41:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18341,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18322,
                    "src": "2757:13:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 18318,
                  "id": 18342,
                  "nodeType": "Return",
                  "src": "2750:20:49"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 18344,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18314,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2557:2:49"
            },
            "payable": false,
            "returnParameters": {
              "id": 18318,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18317,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 18344,
                  "src": "2580:9:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 18315,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2580:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 18316,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2580:9:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2579:11:49"
            },
            "scope": 18345,
            "src": "2541:236:49",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 18346,
        "src": "182:2599:49"
      }
    ],
    "src": "0:2782:49"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {
    "15": {
      "events": {},
      "links": {},
      "address": "0x70b8a9a849bc07a9bc7129eab4b68cf76b149cad",
      "transactionHash": "0x6d6b8f344c6ac87be7d9f04f0b58e4b0d8213cbd8102bc55d91df74c29740c3a"
    }
  },
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:28.912Z"
}