{
  "contractName": "USDTieredSTOFactory",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "monthlySubscriptionCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSubscriptionCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySubscriptionFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSetupCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySetupFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polyToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "setupCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newUsageCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactoryUsageFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "usageCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_polyAddress",
          "type": "address"
        },
        {
          "name": "_setupCost",
          "type": "uint256"
        },
        {
          "name": "_usageCost",
          "type": "uint256"
        },
        {
          "name": "_subscriptionCost",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSetupcost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newSetupCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySetupFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactoryUsageFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newMonthlySubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySubscriptionFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_module",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_moduleName",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_moduleFactory",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_creator",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogGenerateModuleFromFactory",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getType",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getName",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getDescription",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTitle",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInstructions",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTags",
      "outputs": [
        {
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051608080615424833981016040908152815160208301519183015160609093015160008054600160a060020a0319908116331790915560018054600160a060020a0390941693909116929092179091556002919091556003919091556004556153a3806100816000396000f3006080604052600436106100d65763ffffffff60e060020a60003504166277436081146100db57806306184a251461011757806315dae03e1461013e57806317d7de7c146101695780631a0925411461017e5780633ae192bd1461020857806358a191c3146102225780636faa22a51461023a578063715018a61461024f5780637e363ffa146102645780638da5cb5b14610279578063995d9ab71461028e578063aac67b05146102f3578063d54c47261461030b578063e0d5497014610320578063f2fde38b14610335578063ff3c1a8f1461017e575b600080fd5b3480156100e757600080fd5b506100fb6004803560248101910135610356565b60408051600160a060020a039092168252519081900360200190f35b34801561012357600080fd5b5061012c610756565b60408051918252519081900360200190f35b34801561014a57600080fd5b5061015361075c565b6040805160ff9092168252519081900360200190f35b34801561017557600080fd5b5061012c610761565b34801561018a57600080fd5b50610193610785565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101cd5781810151838201526020016101b5565b50505050905090810190601f1680156101fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021457600080fd5b506102206004356107bc565b005b34801561022e57600080fd5b50610220600435610819565b34801561024657600080fd5b506100fb610876565b34801561025b57600080fd5b50610220610885565b34801561027057600080fd5b5061012c6108f1565b34801561028557600080fd5b506100fb6108f7565b34801561029a57600080fd5b506102a3610906565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102df5781810151838201526020016102c7565b505050509050019250505060405180910390f35b3480156102ff57600080fd5b50610220600435610a1c565b34801561031757600080fd5b5061012c610a79565b34801561032c57600080fd5b50610193610a7f565b34801561034157600080fd5b50610220600160a060020a0360043516610ab6565b600080600060025411156104c85760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b1580156103e357600080fd5b505af11580156103f7573d6000803e3d6000fd5b505050506040513d602081101561040d57600080fd5b505115156104c857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a03166104de610bd7565b600160a060020a03928316815291166020820152604080519182900301906000f080158015610511573d6000803e3d6000fd5b50905080600160a060020a0316631613ec9d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561055257600080fd5b505af1158015610566573d6000803e3d6000fd5b505050506040513d602081101561057c57600080fd5b5051604080516020601f87018190048102820181019092528581527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909216916105d791879087908190840183828082843750610ad9945050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461066257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642064617461206973206e6f742076616c6964000000000000604482015290519081900360640190fd5b80600160a060020a03168484604051808383808284378201915050925050506000604051808303816000865af191505015156106ff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e2d7375636365737366756c6c2063616c6c00000000000000000000000000604482015290519081900360640190fd5b30610708610761565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600390565b7f55534454696572656453544f000000000000000000000000000000000000000090565b60408051808201909152600e81527f555344205469657265642053544f000000000000000000000000000000000000602082015290565b600054600160a060020a031633146107d357600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461083057600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a0316331461089c57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b60408051600480825260a08201909252606091829190602082016080803883390190505090507f555344000000000000000000000000000000000000000000000000000000000081600081518110151561095c57fe5b6020908102909101015280517f5469657265640000000000000000000000000000000000000000000000000000908290600190811061099757fe5b6020908102909101015280517f504f4c590000000000000000000000000000000000000000000000000000000090829060029081106109d257fe5b6020908102909101015280517f45544800000000000000000000000000000000000000000000000000000000009082906003908110610a0d57fe5b60209081029091010152905090565b600054600160a060020a03163314610a3357600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60408051808201909152601d81527f496e697469616c69736573206120555344207469657265642053544f2e000000602082015290565b600054600160a060020a03163314610acd57600080fd5b610ad681610b5a565b50565b60008060006004845110610aee576004610af1565b83515b9150600090505b81811015610b535780600183030360080260020a8482815181101515610b1a57fe5b90602001015160f860020a900460f860020a0260f860020a9004028360e060020a90040160e060020a0292508080600101915050610af8565b5050919050565b600160a060020a0381161515610b6f57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60405161479080610be883390190560060806040526002805460a060020a60ff02191690556007805460ff1916905534801561002a57600080fd5b5060405160408061479083398101604052805160209091015160018054600160a060020a03938416600160a060020a03199182161790915560008054821633179055600280549390921692169190911790556147058061008b6000396000f3006080604052600436106102d15763ffffffff60e060020a600035041663033258ea81146102dc5780630f452aaa146103065780631613ec9d1461031b57806318c5ab3c14610365578063234c685e1461037a5780632de2d279146103925780633197cbb6146103b957806331f1968a146103ce57806335ff3a51146103e657806338c59de9146103fb5780633a3adf87146104105780633a4fd45c1461042b5780633f4ba83a14610440578063444aa92f1461045557806347535d7b146104695780634b385a42146104925780634bb278f3146104a75780634f935945146104bc578063521ced30146104d1578063521eb273146104e95780635b66629d1461051a5780635c975abb1461053e5780635f7619a4146105535780636c41027f1461056b5780636faa22a514610580578063704651551461059557806370dc8752146105ad578063741fd8db146106ad57806378912d41146106c257806378e97925146106d75780637b06bc7c146106ec5780638012522b1461070d5780638320fc4e146107225780638456cb59146107b05780638905fd4f146107c55780638be11260146107e65780638d4e4083146107fe578063987272391461081357806399066ee01461082e578063a3fb8f1514610846578063a412f87c1461085b578063b2cca39d1461087f578063b307366014610894578063b39f8ae4146108af578063b84dfbd2146108ca578063bf116648146108df578063bf8ac4a114610934578063c3a07df614610955578063c45a0155146109ba578063c5139338146109cf578063d31d4f2d146109f0578063d679677a14610b57578063d69f6bae14610b82578063d70afa9614610b97578063d72b11bd14610bac578063d7e64c0014610bc1578063e0d5070514610bd6578063ec47740f14610beb578063eda524bc14610c00578063ee7c0db014610c1b578063fbf69f9514610c30578063fd19780e14610c48578063ff18ead314610c69575b6102da33610c7e565b005b3480156102e857600080fd5b506102f460043561112a565b60408051918252519081900360200190f35b34801561031257600080fd5b506102f4611149565b34801561032757600080fd5b50610330611150565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561037157600080fd5b506102f46111f6565b34801561038657600080fd5b506102f46004356111fc565b34801561039e57600080fd5b506102da600160a060020a036004358116906024351661120a565b3480156103c557600080fd5b506102f46112f2565b3480156103da57600080fd5b506102f46004356112f8565b3480156103f257600080fd5b506102f4611306565b34801561040757600080fd5b506102f461130c565b34801561041c57600080fd5b506102da600435602435611312565b34801561043757600080fd5b506102f46113f6565b34801561044c57600080fd5b506102da6113fc565b6102da600160a060020a0360043516610c7e565b34801561047557600080fd5b5061047e6114d2565b604080519115158252519081900360200190f35b34801561049e57600080fd5b506102f4611526565b3480156104b357600080fd5b506102da61152c565b3480156104c857600080fd5b5061047e611857565b3480156104dd57600080fd5b506102f46004356118b0565b3480156104f557600080fd5b506104fe6118be565b60408051600160a060020a039092168252519081900360200190f35b34801561052657600080fd5b506102da600160a060020a03600435166024356118d2565b34801561054a57600080fd5b5061047e611db9565b34801561055f57600080fd5b5061047e600435611dc9565b34801561057757600080fd5b506102f4612108565b34801561058c57600080fd5b506104fe61210e565b3480156105a157600080fd5b506102f460043561211d565b3480156105b957600080fd5b50604080516020600480358082013583810280860185019096528085526102da95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375094975061212b9650505050505050565b3480156106b957600080fd5b506102f4612217565b3480156106ce57600080fd5b506102f461221d565b3480156106e357600080fd5b506102f4612223565b3480156106f857600080fd5b5061047e600160a060020a0360043516612229565b34801561071957600080fd5b506102f461223e565b34801561072e57600080fd5b50604080516020600480358082013583810280860185019096528085526102da95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506122bb9650505050505050565b3480156107bc57600080fd5b506102da612417565b3480156107d157600080fd5b506102da600160a060020a03600435166124f9565b3480156107f257600080fd5b506102f4600435612710565b34801561080a57600080fd5b5061047e61271e565b34801561081f57600080fd5b506102f4600435602435612727565b34801561083a57600080fd5b506102f46004356128b9565b34801561085257600080fd5b506102f46128c7565b34801561086757600080fd5b5061047e600160a060020a03600435166024356128cd565b34801561088b57600080fd5b506102f4612973565b3480156108a057600080fd5b506102f4600435602435612979565b3480156108bb57600080fd5b506102da600435602435612b03565b3480156108d657600080fd5b506104fe612be7565b3480156108eb57600080fd5b50604080516020600480358082013583810280860185019096528085526102da95369593946024949385019291829185019084908082843750949750612bf69650505050505050565b34801561094057600080fd5b506102f4600160a060020a0360043516612cdc565b34801561096157600080fd5b5061096a612cee565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109a657818101518382015260200161098e565b505050509050019250505060405180910390f35b3480156109c657600080fd5b506104fe612d03565b3480156109db57600080fd5b506102f4600160a060020a0360043516612d12565b3480156109fc57600080fd5b5060408051602060046044358181013583810280860185019096528085526102da958335956024803596369695606495939492019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437505060408051818801358901803560208181028481018201909552818452989b8a359b8a8c01359b919a9099506060909101975092955090820193509182918501908490808284375094975050600160a060020a038535811696506020909501359094169350612d2492505050565b348015610b6357600080fd5b50610b6c612dc6565b6040805160ff9092168252519081900360200190f35b348015610b8e57600080fd5b506102f4612dcf565b348015610ba357600080fd5b506102f4612e1a565b348015610bb857600080fd5b506104fe612e3e565b348015610bcd57600080fd5b506102f4612e4d565b348015610be257600080fd5b506102f4612e53565b348015610bf757600080fd5b506102f4612e84565b348015610c0c57600080fd5b5061047e60ff60043516612e8a565b348015610c2757600080fd5b506102f4612e9f565b348015610c3c57600080fd5b506102f4600435612ec5565b348015610c5457600080fd5b506102f4600160a060020a0360043516612ed3565b348015610c7557600080fd5b506102f4612ee5565b600154604080517fce4dbdff0000000000000000000000000000000000000000000000000000000081529051600092839283928392600160a060020a03169163ce4dbdff91600480830192602092919082900301818787803b158015610ce357600080fd5b505af1158015610cf7573d6000803e3d6000fd5b505050506040513d6020811015610d0d57600080fd5b50516040805160e260020a6339fa78730281527f4554480000000000000000000000000000000000000000000000000000000000600482015260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b158015610d8b57600080fd5b505af1158015610d9f573d6000803e3d6000fd5b505050506040513d6020811015610db557600080fd5b5051600160a060020a03161415610e16576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c696420455448555344204f7261636c650000000000000000000000604482015290519081900360640190fd5b6000805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5460ff161515610e4f57600080fd5b600160009054906101000a9004600160a060020a0316600160a060020a031663ce4dbdff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610ea257600080fd5b505af1158015610eb6573d6000803e3d6000fd5b505050506040513d6020811015610ecc57600080fd5b50516040805160e260020a6339fa78730281527f4554480000000000000000000000000000000000000000000000000000000000600482015260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b158015610f4a57600080fd5b505af1158015610f5e573d6000803e3d6000fd5b505050506040513d6020811015610f7457600080fd5b50516040805160e160020a634c6afee50281529051600160a060020a03909216916398d5fdca916004808201926020929091908290030181600087803b158015610fbd57600080fd5b505af1158015610fd1573d6000803e3d6000fd5b505050506040513d6020811015610fe757600080fd5b50519250610ff88434856000612eeb565b600160a060020a0386166000908152601760205260409020549193509150611026908263ffffffff6133ae16565b600160a060020a038516600090815260176020526040902055601354611052908263ffffffff6133ae16565b601355600754604051610100909104600160a060020a0316906108fc8315029083906000818181858888f19350505050158015611093573d6000803e3d6000fd5b50336108fc6110a8348463ffffffff6133bb16565b6040518115909202916000818181858888f193505050501580156110d0573d6000803e3d6000fd5b5060408051838152346020820152808201839052606081018590529051600160a060020a0386169133917f5f372621e8d889047836045b485ab1ff1bb016bfb5a974b676386c803ed2711f9181900360800190a350505050565b600980548290811061113857fe5b600091825260209091200154905081565b6012545b90565b604080517f636f6e6669677572652875696e743235362c75696e743235362c75696e74323581527f365b5d2c75696e743235365b5d2c75696e743235365b5d2c75696e743235365b60208201527f5d2c75696e743235362c75696e743235362c75696e74385b5d2c616464726573818301527f732c6164647265737329000000000000000000000000000000000000000000006060820152905190819003606a01902090565b60145481565b601080548290811061113857fe5b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561125d57600080fd5b505af1158015611271573d6000803e3d6000fd5b505050506040513d602081101561128757600080fd5b5051600160a060020a031633146112d6576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b60045442106112e457600080fd5b6112ee82826133cd565b5050565b60055481565b600e80548290811061113857fe5b60135490565b60155490565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561136557600080fd5b505af1158015611379573d6000803e3d6000fd5b505050506040513d602081101561138f57600080fd5b5051600160a060020a031633146113de576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b60045442106113ec57600080fd5b6112ee828261355f565b600b5490565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561144f57600080fd5b505af1158015611463573d6000803e3d6000fd5b505050506040513d602081101561147957600080fd5b5051600160a060020a031633146114c8576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b6114d06135a8565b565b601c5460009060ff16156114e85750600061114d565b6004544210156114fa5750600061114d565b600554421061150b5750600061114d565b611513611857565b156115205750600061114d565b50600190565b601a5481565b600080600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561158557600080fd5b505af1158015611599573d6000803e3d6000fd5b505050506040513d60208110156115af57600080fd5b5051600160a060020a031633146115fe576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b601c5460ff161561160e57600080fd5b50601c805460ff1916600117905560005b600b5460ff8216101561184a57611677600d8260ff1681548110151561164157fe5b9060005260206000200154600b8360ff1681548110151561165e57fe5b90600052602060002001546133bb90919063ffffffff16565b9150611689848363ffffffff6133ae16565b93506116ba600d8260ff168154811015156116a057fe5b9060005260206000200154846133ae90919063ffffffff16565b9250600082111561184257600b805460ff83169081106116d657fe5b9060005260206000200154600d8260ff168154811015156116f357fe5b6000918252602080832090910192909255600154600854604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101889052905191909216936340c10f19936044808501949293928390030190829087803b15801561177457600080fd5b505af1158015611788573d6000803e3d6000fd5b505050506040513d602081101561179e57600080fd5b505115156117f6576040805160e560020a62461bcd02815260206004820152601b60248201527f4572726f7220696e206d696e74696e672074686520746f6b656e730000000000604482015290519081900360640190fd5b6008546040805184815260ff841660208201528151600160a060020a039093169233927f3fe90b9084dca94f68309b6502066809bd1bc300808660a97214823388af5e4b928290030190a35b60010161161f565b5050601e91909155601d55565b601c5460009060ff161561186f5750601e541561114d565b600b8054600019810190811061188157fe5b600091825260209091200154600d8054600019810190811061189f57fe5b906000526020600020015414905090565b600c80548290811061113857fe5b6007546101009004600160a060020a031681565b600154604080517fce4dbdff0000000000000000000000000000000000000000000000000000000081529051600092839283928392600160a060020a03169163ce4dbdff91600480830192602092919082900301818787803b15801561193757600080fd5b505af115801561194b573d6000803e3d6000fd5b505050506040513d602081101561196157600080fd5b50516040805160e260020a6339fa78730281527f504f4c5900000000000000000000000000000000000000000000000000000000600482015260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b505050506040513d6020811015611a0957600080fd5b5051600160a060020a03161415611a6a576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c696420455448555344204f7261636c650000000000000000000000604482015290519081900360640190fd5b600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c5460ff161515611aa457600080fd5b600160009054906101000a9004600160a060020a0316600160a060020a031663ce4dbdff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611af757600080fd5b505af1158015611b0b573d6000803e3d6000fd5b505050506040513d6020811015611b2157600080fd5b50516040805160e260020a6339fa78730281527f504f4c5900000000000000000000000000000000000000000000000000000000600482015260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b158015611b9f57600080fd5b505af1158015611bb3573d6000803e3d6000fd5b505050506040513d6020811015611bc957600080fd5b50516040805160e160020a634c6afee50281529051600160a060020a03909216916398d5fdca916004808201926020929091908290030181600087803b158015611c1257600080fd5b505af1158015611c26573d6000803e3d6000fd5b505050506040513d6020811015611c3c57600080fd5b50519250611c4d8585856001612eeb565b600160a060020a0387166000908152601860205260409020549193509150611c7b908263ffffffff6133ae16565b600160a060020a038616600090815260186020526040902055601454611ca7908263ffffffff6133ae16565b601455600254600754604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152610100909204600160a060020a0390811660248401526044830185905290519216916323b872dd916064808201926020929091908290030181600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b505050506040513d6020811015611d5157600080fd5b50511515611d5e57600080fd5b6040805183815260208101869052808201839052606081018590529051600160a060020a0387169133917f77a8bcb3b2d99f11dd00b2028e33c38a54659130ca030d57088beb8d5ed6f5699181900360800190a35050505050565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611e4257600080fd5b505af1158015611e56573d6000803e3d6000fd5b505050506040513d6020811015611e6c57600080fd5b505160005433600160a060020a039283168114945091161490508180611e8f5750805b80611f355750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015611f0857600080fd5b505af1158015611f1c573d6000803e3d6000fd5b505050506040513d6020811015611f3257600080fd5b50515b1515611f8b576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015611ffa57600080fd5b505af115801561200e573d6000803e3d6000fd5b505050506040513d602081101561202457600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b15801561207b57600080fd5b505af115801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b505115156120fd576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b601e5481565b600254600160a060020a031681565b600a80548290811061113857fe5b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561217e57600080fd5b505af1158015612192573d6000803e3d6000fd5b505050506040513d60208110156121a857600080fd5b5051600160a060020a031633146121f7576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b600454421061220557600080fd5b6122118484848461365e565b50505050565b601d5481565b60135481565b60045481565b60196020526000908152604090205460ff1681565b600080805b600f5460ff821610156122b5576122ab60108260ff1681548110151561226557fe5b906000526020600020015461229f600f8460ff1681548110151561228557fe5b9060005260206000200154856133ae90919063ffffffff16565b9063ffffffff6133ae16565b9150600101612243565b50919050565b600154604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691638da5cb5b91600480830192602092919082900301818787803b15801561231a57600080fd5b505af115801561232e573d6000803e3d6000fd5b505050506040513d602081101561234457600080fd5b5051600160a060020a03163314612393576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b81518351146123a157600080fd5b5060005b82518110156124125781818151811015156123bc57fe5b906020019060200201516019600085848151811015156123d857fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff19169115159190911790556001016123a5565b505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561246a57600080fd5b505af115801561247e573d6000803e3d6000fd5b505050506040513d602081101561249457600080fd5b5051600160a060020a031633146124e3576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b60055442106124f157600080fd5b6114d0613d86565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561254f57600080fd5b505af1158015612563573d6000803e3d6000fd5b505050506040513d602081101561257957600080fd5b5051600160a060020a031633146125c8576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b600160a060020a03831615156125dd57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561264157600080fd5b505af1158015612655573d6000803e3d6000fd5b505050506040513d602081101561266b57600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b1580156126d957600080fd5b505af11580156126ed573d6000803e3d6000fd5b505050506040513d602081101561270357600080fd5b5051151561241257600080fd5b600d80548290811061113857fe5b601c5460ff1681565b600080600160009054906101000a9004600160a060020a0316600160a060020a031663ce4dbdff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561277d57600080fd5b505af1158015612791573d6000803e3d6000fd5b505050506040513d60208110156127a757600080fd5b50516040805160e260020a6339fa78730281526004810187905260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b15801561280657600080fd5b505af115801561281a573d6000803e3d6000fd5b505050506040513d602081101561283057600080fd5b50516040805160e160020a634c6afee50281529051600160a060020a03909216916398d5fdca916004808201926020929091908290030181600087803b15801561287957600080fd5b505af115801561288d573d6000803e3d6000fd5b505050506040513d60208110156128a357600080fd5b505190506128b18382613e41565b949350505050565b600f80548290811061113857fe5b60145490565b600254604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015291516000938593169163dd62ed3e91604480830192602092919082900301818887803b15801561293c57600080fd5b505af1158015612950573d6000803e3d6000fd5b505050506040513d602081101561296657600080fd5b5051101590505b92915050565b60065481565b600080600160009054906101000a9004600160a060020a0316600160a060020a031663ce4dbdff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156129cf57600080fd5b505af11580156129e3573d6000803e3d6000fd5b505050506040513d60208110156129f957600080fd5b50516040805160e260020a6339fa78730281526004810187905260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b158015612a5857600080fd5b505af1158015612a6c573d6000803e3d6000fd5b505050506040513d6020811015612a8257600080fd5b50516040805160e160020a634c6afee50281529051600160a060020a03909216916398d5fdca916004808201926020929091908290030181600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505050506040513d6020811015612af557600080fd5b505190506128b18382613e7c565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612b5657600080fd5b505af1158015612b6a573d6000803e3d6000fd5b505050506040513d6020811015612b8057600080fd5b5051600160a060020a03163314612bcf576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b6004544210612bdd57600080fd5b6112ee8282613e9c565b600154600160a060020a031681565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612c4957600080fd5b505af1158015612c5d573d6000803e3d6000fd5b505050506040513d6020811015612c7357600080fd5b5051600160a060020a03163314612cc2576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b6004544210612cd057600080fd5b612cd981613f93565b50565b60186020526000908152604090205481565b604080516000815260208101909152805b5090565b600054600160a060020a031681565b60166020526000908152604090205481565b600054600160a060020a03163314612d86576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b612d8f83613f93565b612d9982826133cd565b612da58989898961365e565b612daf8b8b613e9c565b612db9858561355f565b5050505050505050505050565b60115460ff1681565b600080805b600d5460ff821610156122b557612e10600d8260ff16815481101515612df657fe5b9060005260206000200154836133ae90919063ffffffff16565b9150600101612dd4565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b600854600160a060020a031681565b60155481565b600080805b600e5460ff821610156122b557612e7a600e8260ff16815481101515612df657fe5b9150600101612e58565b601b5481565b60036020526000908152604090205460ff1681565b601c5460009060ff1615612eb65750601d5461114d565b612ebe612dcf565b905061114d565b600b80548290811061113857fe5b60176020526000908152604090205481565b60125481565b60075460009081908190819081908190819060ff1615612f0a57600080fd5b6007805460ff1916600117905560025460a060020a900460ff1615612f79576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b612f816114d2565b1515612fd7576040805160e560020a62461bcd02815260206004820152600f60248201527f53544f206973206e6f74206f70656e0000000000000000000000000000000000604482015290519081900360640190fd5b60008a1161302f576040805160e560020a62461bcd02815260206004820181905260248201527f4e6f2066756e647320776572652073656e7420746f2062757920746f6b656e73604482015290519081900360640190fd5b613039898b613e41565b601b54600160a060020a038d166000908152601660205260409020549196508695509061306d90869063ffffffff6133ae16565b10156130e9576040805160e560020a62461bcd02815260206004820152602f60248201527f546f74616c20696e766573746d656e74206c657373207468616e206d696e696d60448201527f756d496e766573746d656e745553440000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038b1660009081526019602052604090205460ff16151561322957601a54600160a060020a038c16600090815260166020526040902054106131c8576040805160e560020a62461bcd02815260206004820152604160248201527f4e6f6e2d6163637265646974656420696e766573746f722068617320616c726560448201527f6164792072656163686564206e6f6e416363726564697465644c696d6974555360648201527f4400000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b601a54600160a060020a038c166000908152601660205260409020546131f590879063ffffffff6133ae16565b111561322957600160a060020a038b16600090815260166020526040902054601a546132269163ffffffff6133bb16565b94505b60115460ff1691505b60095460ff831610156132e35760115460ff83811691161461325e576011805460ff191660ff84161790555b600b805460ff841690811061326f57fe5b9060005260206000200154600d8360ff1681548110151561328c57fe5b906000526020600020015410156132cb576132c86132bb8c846132b5898863ffffffff6133bb16565b8c61417c565b849063ffffffff6133ae16565b92505b828514156132d8576132e3565b600190910190613232565b600083111561336e57600160a060020a038b166000908152601660205260409020541515613315576015805460010190555b600160a060020a038b1660009081526016602052604090205461333e908463ffffffff6133ae16565b600160a060020a038c1660009081526016602052604090205560125461336a908463ffffffff6133ae16565b6012555b82151561337d57506000613393565b61339061338a8486613e7c565b8b613e41565b90505b6007805460ff19169055919a91995090975050505050505050565b8181018281101561296d57fe5b6000828211156133c757fe5b50900390565b600160a060020a0382161515613453576040805160e560020a62461bcd02815260206004820152602860248201527f5a65726f2061646472657373206973206e6f74207065726d697474656420666f60448201527f722077616c6c6574000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03811615156134d9576040805160e560020a62461bcd02815260206004820152602860248201527f5a65726f2061646472657373206973206e6f74207065726d697474656420666f60448201527f722077616c6c6574000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60078054600160a060020a03808516610100810274ffffffffffffffffffffffffffffffffffffffff0019909316929092179092556008805492841673ffffffffffffffffffffffffffffffffffffffff19909316831790556040517f1cbc7a9637cabbc21164f4e6f293a9e760d1f651ad2b0f5614dec80dd807d0bd90600090a35050565b601b819055601a829055604080518281526020810184905281517f6edefa108617056bef120162b4dc9ced4920b9a10f2dcc512c4c60fee6e7e693929181900390910190a15050565b60025460a060020a900460ff16151561360b576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b600080835111151561366f57600080fd5b82518551146136ee576040805160e560020a62461bcd02815260206004820152602a60248201527f4d69736d61746368206265747765656e20726174657320616e6420746f6b656e60448201527f7320706572207469657200000000000000000000000000000000000000000000606482015290519081900360840190fd5b825184511461376d576040805160e560020a62461bcd02815260206004820152603360248201527f4d69736d61746368206265747765656e20646973636f756e742072617465732060448201527f616e6420746f6b656e7320706572207469657200000000000000000000000000606482015290519081900360840190fd5b82518251146137ec576040805160e560020a62461bcd02815260206004820152603d60248201527f4d69736d61746368206265747765656e20646973636f756e7420746f6b656e7360448201527f20706572207469657220616e6420746f6b656e73207065722074696572000000606482015290519081900360840190fd5b5060005b84518160ff161015613ae4576000858260ff1681518110151561380f57fe5b6020908102909101015111613894576040805160e560020a62461bcd02815260206004820152602660248201527f52617465206f6620746f6b656e2073686f756c6420626520677265617465722060448201527f7468616e20300000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000838260ff168151811015156138a757fe5b602090810290910101511161392c576040805160e560020a62461bcd02815260206004820152602860248201527f546f6b656e732070657220746965722073686f756c642062652067726561746560448201527f72207468616e2030000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b828160ff1681518110151561393d57fe5b90602001906020020151828260ff1681518110151561395857fe5b602090810290910101511115613a04576040805160e560020a62461bcd02815260206004820152604a60248201527f446973636f756e74656420746f6b656e732070657220746965722073686f756c60448201527f64206265206c657373207468616e206f7220657175616c20746f20746f6b656e60648201527f7320706572207469657200000000000000000000000000000000000000000000608482015290519081900360a40190fd5b848160ff16815181101515613a1557fe5b90602001906020020151848260ff16815181101515613a3057fe5b602090810290910101511115613adc576040805160e560020a62461bcd02815260206004820152604660248201527f446973636f756e74656420726174652070657220746965722073686f756c642060448201527f6265206c657373207468616e206f7220657175616c20746f207261746520706560648201527f7220746965720000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001016137f0565b8451604051908082528060200260200182016040528015613b0f578160200160208202803883390190505b508051613b2491600d9160209091019061465e565b508451604051908082528060200260200182016040528015613b50578160200160208202803883390190505b508051613b6591600e9160209091019061465e565b508451604051908082528060200260200182016040528015613b91578160200160208202803883390190505b508051613ba691600f9160209091019061465e565b508451604051908082528060200260200182016040528015613bd2578160200160208202803883390190505b508051613be79160109160209091019061465e565b508451613bfb90600990602088019061465e565b508351613c0f90600a90602087019061465e565b508251613c2390600b90602086019061465e565b508151613c3790600c90602085019061465e565b507fbdbb624542b4a708b5fed87894a55c10945f2676a45a28f9da59597118247496858585856040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b83811015613ca9578181015183820152602001613c91565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015613ce8578181015183820152602001613cd0565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015613d27578181015183820152602001613d0f565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015613d66578181015183820152602001613d4e565b505050509050019850505050505050505060405180910390a15050505050565b60025460a060020a900460ff1615613de8576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1565b6000670de0b6b3a7640000613e6b613e59858561449e565b6002670de0b6b3a76400005b046133ae565b811515613e7457fe5b049392505050565b600081613e6b613e9485670de0b6b3a764000061449e565b600285613e65565b818111613ef3576040805160e560020a62461bcd02815260206004820152601d60248201527f4461746520706172616d657465727320617265206e6f742076616c6964000000604482015290519081900360640190fd5b428211613f4a576040805160e560020a62461bcd02815260206004820181905260248201527f53746172742054696d65206d75737420626520696e2074686520667574757265604482015290519081900360640190fd5b60048290556005819055604080518381526020810183905281517f2eae0d0a99cbf5ab05babf7ee1f4bdf6e9bb99ffdca04682fa54f6682d5d80fe929181900390910190a15050565b6000808251118015613fa6575060038251105b1515614021576040805160e560020a62461bcd028152602060048201526024808201527f4e6f2066756e642072616973696e672063757272656e6369657320737065636960448201527f6669656400000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5060036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c805460ff1990811690915560008080527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff80549092169091555b81518160ff161015614103576002828260ff168151811015156140a157fe5b6020908102909101015160ff16106140b857600080fd5b600160036000848460ff168151811015156140cf57fe5b60209081029190910181015160ff168252810191909152604001600020805460ff1916911515919091179055600101614082565b7fd7e8f0636144d99ce6bc808676ae1afc565e1864aed7fe1c394437c8eb8f6f14826040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561416557818101518382015260200161414d565b505050509050019250505060405180910390a15050565b6000806000806000808680156141c857506010805460ff8b1690811061419e57fe5b9060005260206000200154600c8a60ff168154811015156141bb57fe5b9060005260206000200154115b15614333576141ff60108a60ff168154811015156141e257fe5b9060005260206000200154600c8b60ff1681548110151561165e57fe5b9150614233600d8a60ff1681548110151561421657fe5b9060005260206000200154600b8b60ff1681548110151561165e57fe5b905081811015614270576142668a600a8b60ff1681548110151561425357fe5b9060005260206000200154838b8d6144c7565b909550925061429f565b6142998a600a8b60ff1681548110151561428657fe5b9060005260206000200154848b8d6144c7565b90955092505b6142af888663ffffffff6133bb16565b97506142e08360108b60ff168154811015156142c757fe5b90600052602060002001546133ae90919063ffffffff16565b6010805460ff8c169081106142f157fe5b906000526020600020018190555061431583600d8b60ff168154811015156142c757fe5b600d805460ff8c1690811061432657fe5b6000918252602090912001555b60008811801561437457506000614372600d8b60ff1681548110151561435557fe5b9060005260206000200154600b8c60ff1681548110151561165e57fe5b115b15614490576143d38a60098b60ff1681548110151561438f57fe5b90600052602060002001546143cc600d8d60ff168154811015156143af57fe5b9060005260206000200154600b8e60ff1681548110151561165e57fe5b8b8d6144c7565b90945092506143e8858563ffffffff6133ae16565b945086156144285761440683600f8b60ff168154811015156142c757fe5b600f805460ff8c1690811061441757fe5b60009182526020909120015561445c565b61443e83600e8b60ff168154811015156142c757fe5b600e805460ff8c1690811061444f57fe5b6000918252602090912001555b61447283600d8b60ff168154811015156142c757fe5b600d805460ff8c1690811061448357fe5b6000918252602090912001555b509298975050505050505050565b60008215156144af5750600061296d565b508181028183828115156144bf57fe5b041461296d57fe5b60008060008060006144d9878a613e7c565b925087831115614502576144ed888a613e41565b9150868211156144fb578691505b5086614508565b50859050815b600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038d8116600483015260248201859052915191909216916340c10f199160448083019260209291908290030181600087803b15801561457757600080fd5b505af115801561458b573d6000803e3d6000fd5b505050506040513d60208110156145a157600080fd5b505115156145f9576040805160e560020a62461bcd02815260206004820152601b60248201527f4572726f7220696e206d696e74696e672074686520746f6b656e730000000000604482015290519081900360640190fd5b60408051828152602081018490528082018b905260ff881660608201529051600160a060020a038c169133917f4ca2c8a2cd727df794a09c03500fc3eabcb8a8d7c481e70bdccf06bb7975a5bc9181900360800190a390999098509650505050505050565b828054828255906000526020600020908101928215614699579160200282015b8281111561469957825182559160200191906001019061467e565b50612cff9261114d9250905b80821115612cff57600081556001016146a5560053656e646572206973206e6f74206f776e657200000000000000000000000000a165627a7a7230582059ee0b3c74d0e8da259efa12711d311a43e3875daafbeef0acff507dc4b744830029a165627a7a72305820bd130930fac8ed3558da9b5fed0d0264b8d0a5738e995d3ab0be1753a86212d70029",
  "deployedBytecode": "0x6080604052600436106100d65763ffffffff60e060020a60003504166277436081146100db57806306184a251461011757806315dae03e1461013e57806317d7de7c146101695780631a0925411461017e5780633ae192bd1461020857806358a191c3146102225780636faa22a51461023a578063715018a61461024f5780637e363ffa146102645780638da5cb5b14610279578063995d9ab71461028e578063aac67b05146102f3578063d54c47261461030b578063e0d5497014610320578063f2fde38b14610335578063ff3c1a8f1461017e575b600080fd5b3480156100e757600080fd5b506100fb6004803560248101910135610356565b60408051600160a060020a039092168252519081900360200190f35b34801561012357600080fd5b5061012c610756565b60408051918252519081900360200190f35b34801561014a57600080fd5b5061015361075c565b6040805160ff9092168252519081900360200190f35b34801561017557600080fd5b5061012c610761565b34801561018a57600080fd5b50610193610785565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101cd5781810151838201526020016101b5565b50505050905090810190601f1680156101fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021457600080fd5b506102206004356107bc565b005b34801561022e57600080fd5b50610220600435610819565b34801561024657600080fd5b506100fb610876565b34801561025b57600080fd5b50610220610885565b34801561027057600080fd5b5061012c6108f1565b34801561028557600080fd5b506100fb6108f7565b34801561029a57600080fd5b506102a3610906565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102df5781810151838201526020016102c7565b505050509050019250505060405180910390f35b3480156102ff57600080fd5b50610220600435610a1c565b34801561031757600080fd5b5061012c610a79565b34801561032c57600080fd5b50610193610a7f565b34801561034157600080fd5b50610220600160a060020a0360043516610ab6565b600080600060025411156104c85760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b1580156103e357600080fd5b505af11580156103f7573d6000803e3d6000fd5b505050506040513d602081101561040d57600080fd5b505115156104c857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a03166104de610bd7565b600160a060020a03928316815291166020820152604080519182900301906000f080158015610511573d6000803e3d6000fd5b50905080600160a060020a0316631613ec9d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561055257600080fd5b505af1158015610566573d6000803e3d6000fd5b505050506040513d602081101561057c57600080fd5b5051604080516020601f87018190048102820181019092528581527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909216916105d791879087908190840183828082843750610ad9945050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461066257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642064617461206973206e6f742076616c6964000000000000604482015290519081900360640190fd5b80600160a060020a03168484604051808383808284378201915050925050506000604051808303816000865af191505015156106ff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e2d7375636365737366756c6c2063616c6c00000000000000000000000000604482015290519081900360640190fd5b30610708610761565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600390565b7f55534454696572656453544f000000000000000000000000000000000000000090565b60408051808201909152600e81527f555344205469657265642053544f000000000000000000000000000000000000602082015290565b600054600160a060020a031633146107d357600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461083057600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a0316331461089c57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b60408051600480825260a08201909252606091829190602082016080803883390190505090507f555344000000000000000000000000000000000000000000000000000000000081600081518110151561095c57fe5b6020908102909101015280517f5469657265640000000000000000000000000000000000000000000000000000908290600190811061099757fe5b6020908102909101015280517f504f4c590000000000000000000000000000000000000000000000000000000090829060029081106109d257fe5b6020908102909101015280517f45544800000000000000000000000000000000000000000000000000000000009082906003908110610a0d57fe5b60209081029091010152905090565b600054600160a060020a03163314610a3357600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60408051808201909152601d81527f496e697469616c69736573206120555344207469657265642053544f2e000000602082015290565b600054600160a060020a03163314610acd57600080fd5b610ad681610b5a565b50565b60008060006004845110610aee576004610af1565b83515b9150600090505b81811015610b535780600183030360080260020a8482815181101515610b1a57fe5b90602001015160f860020a900460f860020a0260f860020a9004028360e060020a90040160e060020a0292508080600101915050610af8565b5050919050565b600160a060020a0381161515610b6f57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60405161479080610be883390190560060806040526002805460a060020a60ff02191690556007805460ff1916905534801561002a57600080fd5b5060405160408061479083398101604052805160209091015160018054600160a060020a03938416600160a060020a03199182161790915560008054821633179055600280549390921692169190911790556147058061008b6000396000f3006080604052600436106102d15763ffffffff60e060020a600035041663033258ea81146102dc5780630f452aaa146103065780631613ec9d1461031b57806318c5ab3c14610365578063234c685e1461037a5780632de2d279146103925780633197cbb6146103b957806331f1968a146103ce57806335ff3a51146103e657806338c59de9146103fb5780633a3adf87146104105780633a4fd45c1461042b5780633f4ba83a14610440578063444aa92f1461045557806347535d7b146104695780634b385a42146104925780634bb278f3146104a75780634f935945146104bc578063521ced30146104d1578063521eb273146104e95780635b66629d1461051a5780635c975abb1461053e5780635f7619a4146105535780636c41027f1461056b5780636faa22a514610580578063704651551461059557806370dc8752146105ad578063741fd8db146106ad57806378912d41146106c257806378e97925146106d75780637b06bc7c146106ec5780638012522b1461070d5780638320fc4e146107225780638456cb59146107b05780638905fd4f146107c55780638be11260146107e65780638d4e4083146107fe578063987272391461081357806399066ee01461082e578063a3fb8f1514610846578063a412f87c1461085b578063b2cca39d1461087f578063b307366014610894578063b39f8ae4146108af578063b84dfbd2146108ca578063bf116648146108df578063bf8ac4a114610934578063c3a07df614610955578063c45a0155146109ba578063c5139338146109cf578063d31d4f2d146109f0578063d679677a14610b57578063d69f6bae14610b82578063d70afa9614610b97578063d72b11bd14610bac578063d7e64c0014610bc1578063e0d5070514610bd6578063ec47740f14610beb578063eda524bc14610c00578063ee7c0db014610c1b578063fbf69f9514610c30578063fd19780e14610c48578063ff18ead314610c69575b6102da33610c7e565b005b3480156102e857600080fd5b506102f460043561112a565b60408051918252519081900360200190f35b34801561031257600080fd5b506102f4611149565b34801561032757600080fd5b50610330611150565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561037157600080fd5b506102f46111f6565b34801561038657600080fd5b506102f46004356111fc565b34801561039e57600080fd5b506102da600160a060020a036004358116906024351661120a565b3480156103c557600080fd5b506102f46112f2565b3480156103da57600080fd5b506102f46004356112f8565b3480156103f257600080fd5b506102f4611306565b34801561040757600080fd5b506102f461130c565b34801561041c57600080fd5b506102da600435602435611312565b34801561043757600080fd5b506102f46113f6565b34801561044c57600080fd5b506102da6113fc565b6102da600160a060020a0360043516610c7e565b34801561047557600080fd5b5061047e6114d2565b604080519115158252519081900360200190f35b34801561049e57600080fd5b506102f4611526565b3480156104b357600080fd5b506102da61152c565b3480156104c857600080fd5b5061047e611857565b3480156104dd57600080fd5b506102f46004356118b0565b3480156104f557600080fd5b506104fe6118be565b60408051600160a060020a039092168252519081900360200190f35b34801561052657600080fd5b506102da600160a060020a03600435166024356118d2565b34801561054a57600080fd5b5061047e611db9565b34801561055f57600080fd5b5061047e600435611dc9565b34801561057757600080fd5b506102f4612108565b34801561058c57600080fd5b506104fe61210e565b3480156105a157600080fd5b506102f460043561211d565b3480156105b957600080fd5b50604080516020600480358082013583810280860185019096528085526102da95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375094975061212b9650505050505050565b3480156106b957600080fd5b506102f4612217565b3480156106ce57600080fd5b506102f461221d565b3480156106e357600080fd5b506102f4612223565b3480156106f857600080fd5b5061047e600160a060020a0360043516612229565b34801561071957600080fd5b506102f461223e565b34801561072e57600080fd5b50604080516020600480358082013583810280860185019096528085526102da95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506122bb9650505050505050565b3480156107bc57600080fd5b506102da612417565b3480156107d157600080fd5b506102da600160a060020a03600435166124f9565b3480156107f257600080fd5b506102f4600435612710565b34801561080a57600080fd5b5061047e61271e565b34801561081f57600080fd5b506102f4600435602435612727565b34801561083a57600080fd5b506102f46004356128b9565b34801561085257600080fd5b506102f46128c7565b34801561086757600080fd5b5061047e600160a060020a03600435166024356128cd565b34801561088b57600080fd5b506102f4612973565b3480156108a057600080fd5b506102f4600435602435612979565b3480156108bb57600080fd5b506102da600435602435612b03565b3480156108d657600080fd5b506104fe612be7565b3480156108eb57600080fd5b50604080516020600480358082013583810280860185019096528085526102da95369593946024949385019291829185019084908082843750949750612bf69650505050505050565b34801561094057600080fd5b506102f4600160a060020a0360043516612cdc565b34801561096157600080fd5b5061096a612cee565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109a657818101518382015260200161098e565b505050509050019250505060405180910390f35b3480156109c657600080fd5b506104fe612d03565b3480156109db57600080fd5b506102f4600160a060020a0360043516612d12565b3480156109fc57600080fd5b5060408051602060046044358181013583810280860185019096528085526102da958335956024803596369695606495939492019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437505060408051818801358901803560208181028481018201909552818452989b8a359b8a8c01359b919a9099506060909101975092955090820193509182918501908490808284375094975050600160a060020a038535811696506020909501359094169350612d2492505050565b348015610b6357600080fd5b50610b6c612dc6565b6040805160ff9092168252519081900360200190f35b348015610b8e57600080fd5b506102f4612dcf565b348015610ba357600080fd5b506102f4612e1a565b348015610bb857600080fd5b506104fe612e3e565b348015610bcd57600080fd5b506102f4612e4d565b348015610be257600080fd5b506102f4612e53565b348015610bf757600080fd5b506102f4612e84565b348015610c0c57600080fd5b5061047e60ff60043516612e8a565b348015610c2757600080fd5b506102f4612e9f565b348015610c3c57600080fd5b506102f4600435612ec5565b348015610c5457600080fd5b506102f4600160a060020a0360043516612ed3565b348015610c7557600080fd5b506102f4612ee5565b600154604080517fce4dbdff0000000000000000000000000000000000000000000000000000000081529051600092839283928392600160a060020a03169163ce4dbdff91600480830192602092919082900301818787803b158015610ce357600080fd5b505af1158015610cf7573d6000803e3d6000fd5b505050506040513d6020811015610d0d57600080fd5b50516040805160e260020a6339fa78730281527f4554480000000000000000000000000000000000000000000000000000000000600482015260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b158015610d8b57600080fd5b505af1158015610d9f573d6000803e3d6000fd5b505050506040513d6020811015610db557600080fd5b5051600160a060020a03161415610e16576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c696420455448555344204f7261636c650000000000000000000000604482015290519081900360640190fd5b6000805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5460ff161515610e4f57600080fd5b600160009054906101000a9004600160a060020a0316600160a060020a031663ce4dbdff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610ea257600080fd5b505af1158015610eb6573d6000803e3d6000fd5b505050506040513d6020811015610ecc57600080fd5b50516040805160e260020a6339fa78730281527f4554480000000000000000000000000000000000000000000000000000000000600482015260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b158015610f4a57600080fd5b505af1158015610f5e573d6000803e3d6000fd5b505050506040513d6020811015610f7457600080fd5b50516040805160e160020a634c6afee50281529051600160a060020a03909216916398d5fdca916004808201926020929091908290030181600087803b158015610fbd57600080fd5b505af1158015610fd1573d6000803e3d6000fd5b505050506040513d6020811015610fe757600080fd5b50519250610ff88434856000612eeb565b600160a060020a0386166000908152601760205260409020549193509150611026908263ffffffff6133ae16565b600160a060020a038516600090815260176020526040902055601354611052908263ffffffff6133ae16565b601355600754604051610100909104600160a060020a0316906108fc8315029083906000818181858888f19350505050158015611093573d6000803e3d6000fd5b50336108fc6110a8348463ffffffff6133bb16565b6040518115909202916000818181858888f193505050501580156110d0573d6000803e3d6000fd5b5060408051838152346020820152808201839052606081018590529051600160a060020a0386169133917f5f372621e8d889047836045b485ab1ff1bb016bfb5a974b676386c803ed2711f9181900360800190a350505050565b600980548290811061113857fe5b600091825260209091200154905081565b6012545b90565b604080517f636f6e6669677572652875696e743235362c75696e743235362c75696e74323581527f365b5d2c75696e743235365b5d2c75696e743235365b5d2c75696e743235365b60208201527f5d2c75696e743235362c75696e743235362c75696e74385b5d2c616464726573818301527f732c6164647265737329000000000000000000000000000000000000000000006060820152905190819003606a01902090565b60145481565b601080548290811061113857fe5b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561125d57600080fd5b505af1158015611271573d6000803e3d6000fd5b505050506040513d602081101561128757600080fd5b5051600160a060020a031633146112d6576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b60045442106112e457600080fd5b6112ee82826133cd565b5050565b60055481565b600e80548290811061113857fe5b60135490565b60155490565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561136557600080fd5b505af1158015611379573d6000803e3d6000fd5b505050506040513d602081101561138f57600080fd5b5051600160a060020a031633146113de576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b60045442106113ec57600080fd5b6112ee828261355f565b600b5490565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561144f57600080fd5b505af1158015611463573d6000803e3d6000fd5b505050506040513d602081101561147957600080fd5b5051600160a060020a031633146114c8576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b6114d06135a8565b565b601c5460009060ff16156114e85750600061114d565b6004544210156114fa5750600061114d565b600554421061150b5750600061114d565b611513611857565b156115205750600061114d565b50600190565b601a5481565b600080600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561158557600080fd5b505af1158015611599573d6000803e3d6000fd5b505050506040513d60208110156115af57600080fd5b5051600160a060020a031633146115fe576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b601c5460ff161561160e57600080fd5b50601c805460ff1916600117905560005b600b5460ff8216101561184a57611677600d8260ff1681548110151561164157fe5b9060005260206000200154600b8360ff1681548110151561165e57fe5b90600052602060002001546133bb90919063ffffffff16565b9150611689848363ffffffff6133ae16565b93506116ba600d8260ff168154811015156116a057fe5b9060005260206000200154846133ae90919063ffffffff16565b9250600082111561184257600b805460ff83169081106116d657fe5b9060005260206000200154600d8260ff168154811015156116f357fe5b6000918252602080832090910192909255600154600854604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101889052905191909216936340c10f19936044808501949293928390030190829087803b15801561177457600080fd5b505af1158015611788573d6000803e3d6000fd5b505050506040513d602081101561179e57600080fd5b505115156117f6576040805160e560020a62461bcd02815260206004820152601b60248201527f4572726f7220696e206d696e74696e672074686520746f6b656e730000000000604482015290519081900360640190fd5b6008546040805184815260ff841660208201528151600160a060020a039093169233927f3fe90b9084dca94f68309b6502066809bd1bc300808660a97214823388af5e4b928290030190a35b60010161161f565b5050601e91909155601d55565b601c5460009060ff161561186f5750601e541561114d565b600b8054600019810190811061188157fe5b600091825260209091200154600d8054600019810190811061189f57fe5b906000526020600020015414905090565b600c80548290811061113857fe5b6007546101009004600160a060020a031681565b600154604080517fce4dbdff0000000000000000000000000000000000000000000000000000000081529051600092839283928392600160a060020a03169163ce4dbdff91600480830192602092919082900301818787803b15801561193757600080fd5b505af115801561194b573d6000803e3d6000fd5b505050506040513d602081101561196157600080fd5b50516040805160e260020a6339fa78730281527f504f4c5900000000000000000000000000000000000000000000000000000000600482015260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b505050506040513d6020811015611a0957600080fd5b5051600160a060020a03161415611a6a576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c696420455448555344204f7261636c650000000000000000000000604482015290519081900360640190fd5b600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c5460ff161515611aa457600080fd5b600160009054906101000a9004600160a060020a0316600160a060020a031663ce4dbdff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611af757600080fd5b505af1158015611b0b573d6000803e3d6000fd5b505050506040513d6020811015611b2157600080fd5b50516040805160e260020a6339fa78730281527f504f4c5900000000000000000000000000000000000000000000000000000000600482015260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b158015611b9f57600080fd5b505af1158015611bb3573d6000803e3d6000fd5b505050506040513d6020811015611bc957600080fd5b50516040805160e160020a634c6afee50281529051600160a060020a03909216916398d5fdca916004808201926020929091908290030181600087803b158015611c1257600080fd5b505af1158015611c26573d6000803e3d6000fd5b505050506040513d6020811015611c3c57600080fd5b50519250611c4d8585856001612eeb565b600160a060020a0387166000908152601860205260409020549193509150611c7b908263ffffffff6133ae16565b600160a060020a038616600090815260186020526040902055601454611ca7908263ffffffff6133ae16565b601455600254600754604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152610100909204600160a060020a0390811660248401526044830185905290519216916323b872dd916064808201926020929091908290030181600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b505050506040513d6020811015611d5157600080fd5b50511515611d5e57600080fd5b6040805183815260208101869052808201839052606081018590529051600160a060020a0387169133917f77a8bcb3b2d99f11dd00b2028e33c38a54659130ca030d57088beb8d5ed6f5699181900360800190a35050505050565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611e4257600080fd5b505af1158015611e56573d6000803e3d6000fd5b505050506040513d6020811015611e6c57600080fd5b505160005433600160a060020a039283168114945091161490508180611e8f5750805b80611f355750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015611f0857600080fd5b505af1158015611f1c573d6000803e3d6000fd5b505050506040513d6020811015611f3257600080fd5b50515b1515611f8b576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015611ffa57600080fd5b505af115801561200e573d6000803e3d6000fd5b505050506040513d602081101561202457600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b15801561207b57600080fd5b505af115801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b505115156120fd576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b601e5481565b600254600160a060020a031681565b600a80548290811061113857fe5b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561217e57600080fd5b505af1158015612192573d6000803e3d6000fd5b505050506040513d60208110156121a857600080fd5b5051600160a060020a031633146121f7576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b600454421061220557600080fd5b6122118484848461365e565b50505050565b601d5481565b60135481565b60045481565b60196020526000908152604090205460ff1681565b600080805b600f5460ff821610156122b5576122ab60108260ff1681548110151561226557fe5b906000526020600020015461229f600f8460ff1681548110151561228557fe5b9060005260206000200154856133ae90919063ffffffff16565b9063ffffffff6133ae16565b9150600101612243565b50919050565b600154604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691638da5cb5b91600480830192602092919082900301818787803b15801561231a57600080fd5b505af115801561232e573d6000803e3d6000fd5b505050506040513d602081101561234457600080fd5b5051600160a060020a03163314612393576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b81518351146123a157600080fd5b5060005b82518110156124125781818151811015156123bc57fe5b906020019060200201516019600085848151811015156123d857fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff19169115159190911790556001016123a5565b505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561246a57600080fd5b505af115801561247e573d6000803e3d6000fd5b505050506040513d602081101561249457600080fd5b5051600160a060020a031633146124e3576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b60055442106124f157600080fd5b6114d0613d86565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561254f57600080fd5b505af1158015612563573d6000803e3d6000fd5b505050506040513d602081101561257957600080fd5b5051600160a060020a031633146125c8576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b600160a060020a03831615156125dd57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561264157600080fd5b505af1158015612655573d6000803e3d6000fd5b505050506040513d602081101561266b57600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b1580156126d957600080fd5b505af11580156126ed573d6000803e3d6000fd5b505050506040513d602081101561270357600080fd5b5051151561241257600080fd5b600d80548290811061113857fe5b601c5460ff1681565b600080600160009054906101000a9004600160a060020a0316600160a060020a031663ce4dbdff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561277d57600080fd5b505af1158015612791573d6000803e3d6000fd5b505050506040513d60208110156127a757600080fd5b50516040805160e260020a6339fa78730281526004810187905260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b15801561280657600080fd5b505af115801561281a573d6000803e3d6000fd5b505050506040513d602081101561283057600080fd5b50516040805160e160020a634c6afee50281529051600160a060020a03909216916398d5fdca916004808201926020929091908290030181600087803b15801561287957600080fd5b505af115801561288d573d6000803e3d6000fd5b505050506040513d60208110156128a357600080fd5b505190506128b18382613e41565b949350505050565b600f80548290811061113857fe5b60145490565b600254604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015291516000938593169163dd62ed3e91604480830192602092919082900301818887803b15801561293c57600080fd5b505af1158015612950573d6000803e3d6000fd5b505050506040513d602081101561296657600080fd5b5051101590505b92915050565b60065481565b600080600160009054906101000a9004600160a060020a0316600160a060020a031663ce4dbdff6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156129cf57600080fd5b505af11580156129e3573d6000803e3d6000fd5b505050506040513d60208110156129f957600080fd5b50516040805160e260020a6339fa78730281526004810187905260ea60020a621554d10260248201529051600160a060020a039092169163e7e9e1cc916044808201926020929091908290030181600087803b158015612a5857600080fd5b505af1158015612a6c573d6000803e3d6000fd5b505050506040513d6020811015612a8257600080fd5b50516040805160e160020a634c6afee50281529051600160a060020a03909216916398d5fdca916004808201926020929091908290030181600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505050506040513d6020811015612af557600080fd5b505190506128b18382613e7c565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612b5657600080fd5b505af1158015612b6a573d6000803e3d6000fd5b505050506040513d6020811015612b8057600080fd5b5051600160a060020a03163314612bcf576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b6004544210612bdd57600080fd5b6112ee8282613e9c565b600154600160a060020a031681565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612c4957600080fd5b505af1158015612c5d573d6000803e3d6000fd5b505050506040513d6020811015612c7357600080fd5b5051600160a060020a03163314612cc2576040805160e560020a62461bcd02815260206004820152601360248201526000805160206146ba833981519152604482015290519081900360640190fd5b6004544210612cd057600080fd5b612cd981613f93565b50565b60186020526000908152604090205481565b604080516000815260208101909152805b5090565b600054600160a060020a031681565b60166020526000908152604090205481565b600054600160a060020a03163314612d86576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b612d8f83613f93565b612d9982826133cd565b612da58989898961365e565b612daf8b8b613e9c565b612db9858561355f565b5050505050505050505050565b60115460ff1681565b600080805b600d5460ff821610156122b557612e10600d8260ff16815481101515612df657fe5b9060005260206000200154836133ae90919063ffffffff16565b9150600101612dd4565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b600854600160a060020a031681565b60155481565b600080805b600e5460ff821610156122b557612e7a600e8260ff16815481101515612df657fe5b9150600101612e58565b601b5481565b60036020526000908152604090205460ff1681565b601c5460009060ff1615612eb65750601d5461114d565b612ebe612dcf565b905061114d565b600b80548290811061113857fe5b60176020526000908152604090205481565b60125481565b60075460009081908190819081908190819060ff1615612f0a57600080fd5b6007805460ff1916600117905560025460a060020a900460ff1615612f79576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b612f816114d2565b1515612fd7576040805160e560020a62461bcd02815260206004820152600f60248201527f53544f206973206e6f74206f70656e0000000000000000000000000000000000604482015290519081900360640190fd5b60008a1161302f576040805160e560020a62461bcd02815260206004820181905260248201527f4e6f2066756e647320776572652073656e7420746f2062757920746f6b656e73604482015290519081900360640190fd5b613039898b613e41565b601b54600160a060020a038d166000908152601660205260409020549196508695509061306d90869063ffffffff6133ae16565b10156130e9576040805160e560020a62461bcd02815260206004820152602f60248201527f546f74616c20696e766573746d656e74206c657373207468616e206d696e696d60448201527f756d496e766573746d656e745553440000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038b1660009081526019602052604090205460ff16151561322957601a54600160a060020a038c16600090815260166020526040902054106131c8576040805160e560020a62461bcd02815260206004820152604160248201527f4e6f6e2d6163637265646974656420696e766573746f722068617320616c726560448201527f6164792072656163686564206e6f6e416363726564697465644c696d6974555360648201527f4400000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b601a54600160a060020a038c166000908152601660205260409020546131f590879063ffffffff6133ae16565b111561322957600160a060020a038b16600090815260166020526040902054601a546132269163ffffffff6133bb16565b94505b60115460ff1691505b60095460ff831610156132e35760115460ff83811691161461325e576011805460ff191660ff84161790555b600b805460ff841690811061326f57fe5b9060005260206000200154600d8360ff1681548110151561328c57fe5b906000526020600020015410156132cb576132c86132bb8c846132b5898863ffffffff6133bb16565b8c61417c565b849063ffffffff6133ae16565b92505b828514156132d8576132e3565b600190910190613232565b600083111561336e57600160a060020a038b166000908152601660205260409020541515613315576015805460010190555b600160a060020a038b1660009081526016602052604090205461333e908463ffffffff6133ae16565b600160a060020a038c1660009081526016602052604090205560125461336a908463ffffffff6133ae16565b6012555b82151561337d57506000613393565b61339061338a8486613e7c565b8b613e41565b90505b6007805460ff19169055919a91995090975050505050505050565b8181018281101561296d57fe5b6000828211156133c757fe5b50900390565b600160a060020a0382161515613453576040805160e560020a62461bcd02815260206004820152602860248201527f5a65726f2061646472657373206973206e6f74207065726d697474656420666f60448201527f722077616c6c6574000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03811615156134d9576040805160e560020a62461bcd02815260206004820152602860248201527f5a65726f2061646472657373206973206e6f74207065726d697474656420666f60448201527f722077616c6c6574000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60078054600160a060020a03808516610100810274ffffffffffffffffffffffffffffffffffffffff0019909316929092179092556008805492841673ffffffffffffffffffffffffffffffffffffffff19909316831790556040517f1cbc7a9637cabbc21164f4e6f293a9e760d1f651ad2b0f5614dec80dd807d0bd90600090a35050565b601b819055601a829055604080518281526020810184905281517f6edefa108617056bef120162b4dc9ced4920b9a10f2dcc512c4c60fee6e7e693929181900390910190a15050565b60025460a060020a900460ff16151561360b576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b600080835111151561366f57600080fd5b82518551146136ee576040805160e560020a62461bcd02815260206004820152602a60248201527f4d69736d61746368206265747765656e20726174657320616e6420746f6b656e60448201527f7320706572207469657200000000000000000000000000000000000000000000606482015290519081900360840190fd5b825184511461376d576040805160e560020a62461bcd02815260206004820152603360248201527f4d69736d61746368206265747765656e20646973636f756e742072617465732060448201527f616e6420746f6b656e7320706572207469657200000000000000000000000000606482015290519081900360840190fd5b82518251146137ec576040805160e560020a62461bcd02815260206004820152603d60248201527f4d69736d61746368206265747765656e20646973636f756e7420746f6b656e7360448201527f20706572207469657220616e6420746f6b656e73207065722074696572000000606482015290519081900360840190fd5b5060005b84518160ff161015613ae4576000858260ff1681518110151561380f57fe5b6020908102909101015111613894576040805160e560020a62461bcd02815260206004820152602660248201527f52617465206f6620746f6b656e2073686f756c6420626520677265617465722060448201527f7468616e20300000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000838260ff168151811015156138a757fe5b602090810290910101511161392c576040805160e560020a62461bcd02815260206004820152602860248201527f546f6b656e732070657220746965722073686f756c642062652067726561746560448201527f72207468616e2030000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b828160ff1681518110151561393d57fe5b90602001906020020151828260ff1681518110151561395857fe5b602090810290910101511115613a04576040805160e560020a62461bcd02815260206004820152604a60248201527f446973636f756e74656420746f6b656e732070657220746965722073686f756c60448201527f64206265206c657373207468616e206f7220657175616c20746f20746f6b656e60648201527f7320706572207469657200000000000000000000000000000000000000000000608482015290519081900360a40190fd5b848160ff16815181101515613a1557fe5b90602001906020020151848260ff16815181101515613a3057fe5b602090810290910101511115613adc576040805160e560020a62461bcd02815260206004820152604660248201527f446973636f756e74656420726174652070657220746965722073686f756c642060448201527f6265206c657373207468616e206f7220657175616c20746f207261746520706560648201527f7220746965720000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001016137f0565b8451604051908082528060200260200182016040528015613b0f578160200160208202803883390190505b508051613b2491600d9160209091019061465e565b508451604051908082528060200260200182016040528015613b50578160200160208202803883390190505b508051613b6591600e9160209091019061465e565b508451604051908082528060200260200182016040528015613b91578160200160208202803883390190505b508051613ba691600f9160209091019061465e565b508451604051908082528060200260200182016040528015613bd2578160200160208202803883390190505b508051613be79160109160209091019061465e565b508451613bfb90600990602088019061465e565b508351613c0f90600a90602087019061465e565b508251613c2390600b90602086019061465e565b508151613c3790600c90602085019061465e565b507fbdbb624542b4a708b5fed87894a55c10945f2676a45a28f9da59597118247496858585856040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b83811015613ca9578181015183820152602001613c91565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015613ce8578181015183820152602001613cd0565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015613d27578181015183820152602001613d0f565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015613d66578181015183820152602001613d4e565b505050509050019850505050505050505060405180910390a15050505050565b60025460a060020a900460ff1615613de8576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1565b6000670de0b6b3a7640000613e6b613e59858561449e565b6002670de0b6b3a76400005b046133ae565b811515613e7457fe5b049392505050565b600081613e6b613e9485670de0b6b3a764000061449e565b600285613e65565b818111613ef3576040805160e560020a62461bcd02815260206004820152601d60248201527f4461746520706172616d657465727320617265206e6f742076616c6964000000604482015290519081900360640190fd5b428211613f4a576040805160e560020a62461bcd02815260206004820181905260248201527f53746172742054696d65206d75737420626520696e2074686520667574757265604482015290519081900360640190fd5b60048290556005819055604080518381526020810183905281517f2eae0d0a99cbf5ab05babf7ee1f4bdf6e9bb99ffdca04682fa54f6682d5d80fe929181900390910190a15050565b6000808251118015613fa6575060038251105b1515614021576040805160e560020a62461bcd028152602060048201526024808201527f4e6f2066756e642072616973696e672063757272656e6369657320737065636960448201527f6669656400000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5060036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c805460ff1990811690915560008080527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff80549092169091555b81518160ff161015614103576002828260ff168151811015156140a157fe5b6020908102909101015160ff16106140b857600080fd5b600160036000848460ff168151811015156140cf57fe5b60209081029190910181015160ff168252810191909152604001600020805460ff1916911515919091179055600101614082565b7fd7e8f0636144d99ce6bc808676ae1afc565e1864aed7fe1c394437c8eb8f6f14826040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561416557818101518382015260200161414d565b505050509050019250505060405180910390a15050565b6000806000806000808680156141c857506010805460ff8b1690811061419e57fe5b9060005260206000200154600c8a60ff168154811015156141bb57fe5b9060005260206000200154115b15614333576141ff60108a60ff168154811015156141e257fe5b9060005260206000200154600c8b60ff1681548110151561165e57fe5b9150614233600d8a60ff1681548110151561421657fe5b9060005260206000200154600b8b60ff1681548110151561165e57fe5b905081811015614270576142668a600a8b60ff1681548110151561425357fe5b9060005260206000200154838b8d6144c7565b909550925061429f565b6142998a600a8b60ff1681548110151561428657fe5b9060005260206000200154848b8d6144c7565b90955092505b6142af888663ffffffff6133bb16565b97506142e08360108b60ff168154811015156142c757fe5b90600052602060002001546133ae90919063ffffffff16565b6010805460ff8c169081106142f157fe5b906000526020600020018190555061431583600d8b60ff168154811015156142c757fe5b600d805460ff8c1690811061432657fe5b6000918252602090912001555b60008811801561437457506000614372600d8b60ff1681548110151561435557fe5b9060005260206000200154600b8c60ff1681548110151561165e57fe5b115b15614490576143d38a60098b60ff1681548110151561438f57fe5b90600052602060002001546143cc600d8d60ff168154811015156143af57fe5b9060005260206000200154600b8e60ff1681548110151561165e57fe5b8b8d6144c7565b90945092506143e8858563ffffffff6133ae16565b945086156144285761440683600f8b60ff168154811015156142c757fe5b600f805460ff8c1690811061441757fe5b60009182526020909120015561445c565b61443e83600e8b60ff168154811015156142c757fe5b600e805460ff8c1690811061444f57fe5b6000918252602090912001555b61447283600d8b60ff168154811015156142c757fe5b600d805460ff8c1690811061448357fe5b6000918252602090912001555b509298975050505050505050565b60008215156144af5750600061296d565b508181028183828115156144bf57fe5b041461296d57fe5b60008060008060006144d9878a613e7c565b925087831115614502576144ed888a613e41565b9150868211156144fb578691505b5086614508565b50859050815b600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038d8116600483015260248201859052915191909216916340c10f199160448083019260209291908290030181600087803b15801561457757600080fd5b505af115801561458b573d6000803e3d6000fd5b505050506040513d60208110156145a157600080fd5b505115156145f9576040805160e560020a62461bcd02815260206004820152601b60248201527f4572726f7220696e206d696e74696e672074686520746f6b656e730000000000604482015290519081900360640190fd5b60408051828152602081018490528082018b905260ff881660608201529051600160a060020a038c169133917f4ca2c8a2cd727df794a09c03500fc3eabcb8a8d7c481e70bdccf06bb7975a5bc9181900360800190a390999098509650505050505050565b828054828255906000526020600020908101928215614699579160200282015b8281111561469957825182559160200191906001019061467e565b50612cff9261114d9250905b80821115612cff57600081556001016146a5560053656e646572206973206e6f74206f776e657200000000000000000000000000a165627a7a7230582059ee0b3c74d0e8da259efa12711d311a43e3875daafbeef0acff507dc4b744830029a165627a7a72305820bd130930fac8ed3558da9b5fed0d0264b8d0a5738e995d3ab0be1753a86212d70029",
  "sourceMap": "198:2437:45:-;;;347:199;8:9:-1;5:2;;;30:1;27;20:12;5:2;347:199:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;198:2437:45;;;;;;",
  "deployedSourceMap": "198:2437:45:-;;;;;;;;;-1:-1:-1;;;198:2437:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;689:775;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;689:775:45;;;;;;;;;;;;;;;;-1:-1:-1;;;;;689:775:45;;;;;;;;;;;;;;363:38:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;363:38:14;;;;;;;;;;;;;;;;;;;;1528:71:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1528:71:45;;;;;;;;;;;;;;;;;;;;;;;1663:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1663:86:45;;;;1820:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1820:94:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1820:94:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;2346:286:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2346:286:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;2346:286:45;;;;;;;;;;;;;;;;;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;;;;2156:110:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2156:110:45;;;;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;;;;;689:775:45;735:7;990:25;769:1;757:9;;:13;754:161;;;792:9;;;827:5;;834:9;;792:52;;;;;;815:10;792:52;;;;-1:-1:-1;;;;;827:5:45;;;792:52;;;;;;;;;;;;:9;;;;;:22;;:52;;;;;;;;;;;;;;;;;;;:9;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;792:52:45;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;792:52:45;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;792:52:45;784:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1055:9;;1035:10;;-1:-1:-1;;;;;1055:9:45;1018:48;;:::i;:::-;-1:-1:-1;;;;;1018:48:45;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1018:48:45;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1018:48:45;990:76;;1174:12;-1:-1:-1;;;;;1174:28:45;;:30;;;;;-1:-1:-1;;;1174:30:45;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1174:30:45;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1174:30:45;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1174:30:45;1157:13;;;1174:30;1157:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;1157:47:45;;;;:13;;1164:5;;;;;;1157:13;;1164:5;;;;1157:13;;-1:-1:-1;1157:6:45;;-1:-1:-1;;;;;1157:13:45:i;:::-;-1:-1:-1;;1157:47:45;;1149:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1261:12;-1:-1:-1;;;;;1253:26:45;1280:5;;1253:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1245:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1396:4;1377:9;:7;:9::i;:::-;1325:94;;;-1:-1:-1;;;;;1325:94:45;;;;1403:10;1325:94;;;;1415:3;1325:94;;;;;;;;;;;;;;;1444:12;689:775;-1:-1:-1;;;689:775:45:o;363:38:14:-;;;;:::o;1528:71:45:-;1591:1;1528:71;:::o;1663:86::-;1721:21;1663:86;:::o;1820:94::-;1884:23;;;;;;;;;;;;;;;;;1820:94;:::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;2346:286:45:-;2439:16;;;2453:1;2439:16;;;;;;;;;2385:9;;;;2439:16;;;;17:15:-1;;105:10;2439:16:45;88:34:-1;136:17;;-1:-1;2439:16:45;2406:49;;2465:24;:13;2479:1;2465:16;;;;;;;;;;;;;;;;;;:24;2499:16;;:27;;:13;;2513:1;;2499:16;;;;;;;;;;;;;;:27;2536:16;;:25;;:13;;2550:1;;2536:16;;;;;;;;;;;;;;:25;2571:16;;:24;;:13;;2585:1;;2571:16;;;;;;;;;;;;;;:24;2612:13;-1:-1:-1;2346:286:45;:::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;2156:110:45:-;2221:38;;;;;;;;;;;;;;;;;2156:110;:::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;2166:261:14:-;2218:10;2240:8;2301:6;2266:1;2251:5;:12;:16;:35;;2285:1;2251:35;;;2270:5;:12;2251:35;2240:46;;2310:1;2301:10;;2296:125;2317:3;2313:1;:7;2296:125;;;2405:1;2401;2395:3;:7;:11;2390:1;:17;2384:1;:24;2371:5;2377:1;2371:8;;;;;;;;;;;;;;;-1:-1:-1;;;2371:8:14;;-1:-1:-1;;;2371:8:14;-1:-1:-1;;;2366:14:14;;:43;2359:3;-1:-1:-1;;;2354:9:14;;:55;-1:-1:-1;;;2347:63:14;2341:69;;2322:3;;;;;;;2296:125;;;2166:261;;;;;:::o;1338:171:64:-;-1:-1:-1;;;;;1408:23:64;;;;1400:32;;;;;;1464:5;;;1443:38;;-1:-1:-1;;;;;1443:38:64;;;;1464:5;;;1443:38;;;1487:5;:17;;-1:-1:-1;;1487:17:64;-1:-1:-1;;;;;1487:17:64;;;;;;;;;;1338:171::o;198:2437:45:-;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./USDTieredSTO.sol\";\nimport \"../../interfaces/IModuleFactory.sol\";\nimport \"../../interfaces/IModule.sol\";\n\n/**\n * @title Factory for deploying CappedSTO module\n */\ncontract USDTieredSTOFactory is IModuleFactory {\n\n    /**\n     * @notice Constructor\n     * @param _polyAddress Address of the polytoken\n     */\n    constructor (address _polyAddress, uint256 _setupCost, uint256 _usageCost, uint256 _subscriptionCost) public\n      IModuleFactory(_polyAddress, _setupCost, _usageCost, _subscriptionCost)\n    {\n\n    }\n\n     /**\n     * @notice used to launch the Module with the help of factory\n     * @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        //Check valid bytes - can only call module init function\n        USDTieredSTO usdTieredSTO = new USDTieredSTO(msg.sender, address(polyToken));\n        //Checks that _data is valid (not calling anything it shouldn't)\n        require(getSig(_data) == usdTieredSTO.getInitFunction(), \"Provided data is not valid\");\n        require(address(usdTieredSTO).call(_data), \"Un-successfull call\");\n        emit LogGenerateModuleFromFactory(address(usdTieredSTO), getName(), address(this), msg.sender, now);\n        return address(usdTieredSTO);\n    }\n\n    /**\n     * @notice Type of the Module factory\n     */\n    function getType() public view returns(uint8) {\n        return 3;\n    }\n\n    /**\n     * @notice Get the name of the Module\n     */\n    function getName() public view returns(bytes32) {\n        return \"USDTieredSTO\";\n    }\n\n    /**\n     * @notice Get the description of the Module\n     */\n    function getDescription() public view returns(string) {\n        return \"USD Tiered STO\";\n    }\n\n    /**\n     * @notice Get the title of the Module\n     */\n    function getTitle() public view returns(string) {\n        return \"USD Tiered STO\";\n    }\n\n    /**\n     * @notice Get the Instructions that helped to used the module\n     */\n    function getInstructions() public view returns(string) {\n        return \"Initialises a USD tiered STO.\";\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[](4);\n        availableTags[0] = \"USD\";\n        availableTags[1] = \"Tiered\";\n        availableTags[2] = \"POLY\";\n        availableTags[3] = \"ETH\";\n        return availableTags;\n    }\n\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/USDTieredSTOFactory.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/USDTieredSTOFactory.sol",
    "exportedSymbols": {
      "USDTieredSTOFactory": [
        17204
      ]
    },
    "id": 17205,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 17024,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:45"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/USDTieredSTO.sol",
        "file": "./USDTieredSTO.sol",
        "id": 17025,
        "nodeType": "ImportDirective",
        "scope": 17205,
        "sourceUnit": 17023,
        "src": "26:28:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 17026,
        "nodeType": "ImportDirective",
        "scope": 17205,
        "sourceUnit": 9955,
        "src": "55:45:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModule.sol",
        "file": "../../interfaces/IModule.sol",
        "id": 17027,
        "nodeType": "ImportDirective",
        "scope": 17205,
        "sourceUnit": 9718,
        "src": "101:38:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 17028,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "230:14:45",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 17029,
            "nodeType": "InheritanceSpecifier",
            "src": "230:14:45"
          }
        ],
        "contractDependencies": [
          9954,
          17022,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying CappedSTO module",
        "fullyImplemented": true,
        "id": 17204,
        "linearizedBaseContracts": [
          17204,
          9954,
          22664
        ],
        "name": "USDTieredSTOFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 17046,
              "nodeType": "Block",
              "src": "538:8:45",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 17047,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17040,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17031,
                    "src": "477:12:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 17041,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17033,
                    "src": "491:10:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 17042,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17035,
                    "src": "503:10:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 17043,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17037,
                    "src": "515:17:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 17044,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17039,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "462:14:45",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "462:71:45"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17031,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 17047,
                  "src": "360:20:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17030,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "360:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17033,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 17047,
                  "src": "382:18:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17032,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "382:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17035,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 17047,
                  "src": "402:18:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17034,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "402:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17037,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 17047,
                  "src": "422:25:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17036,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "422:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "359:89:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17045,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "538:0:45"
            },
            "scope": 17204,
            "src": "347:199:45",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17119,
              "nodeType": "Block",
              "src": "744:720:45",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 17056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17054,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "757:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 17055,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "769:1:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "757:13:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17068,
                  "nodeType": "IfStatement",
                  "src": "754:161:45",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 17060,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "815:3:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 17061,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "815:10:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 17062,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "827:5:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 17063,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "834:9:45",
                              "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": 17058,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "792:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 17059,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "792:22:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 17064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "792:52:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 17065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "846:68:45",
                          "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": 17057,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "784:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 17066,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "784:131:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17067,
                    "nodeType": "ExpressionStatement",
                    "src": "784:131:45"
                  }
                },
                {
                  "assignments": [
                    17070
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17070,
                      "name": "usdTieredSTO",
                      "nodeType": "VariableDeclaration",
                      "scope": 17120,
                      "src": "990:25:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                        "typeString": "contract USDTieredSTO"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17069,
                        "name": "USDTieredSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 17022,
                        "src": "990:12:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                          "typeString": "contract USDTieredSTO"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17079,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17073,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1035:3:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17074,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1035:10:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17076,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1055:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 17075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1047:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 17077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1047:18:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 17072,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1018:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_USDTieredSTO_$17022_$",
                        "typeString": "function (address,address) returns (contract USDTieredSTO)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17071,
                        "name": "USDTieredSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 17022,
                        "src": "1022:12:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                          "typeString": "contract USDTieredSTO"
                        }
                      }
                    },
                    "id": 17078,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1018:48:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                      "typeString": "contract USDTieredSTO"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "990:76:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 17087,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17082,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17049,
                              "src": "1164:5:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 17081,
                            "name": "getSig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9893,
                            "src": "1157:6:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes memory) pure returns (bytes4)"
                            }
                          },
                          "id": 17083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1157:13:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 17084,
                              "name": "usdTieredSTO",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17070,
                              "src": "1174:12:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                                "typeString": "contract USDTieredSTO"
                              }
                            },
                            "id": 17085,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getInitFunction",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16964,
                            "src": "1174:28:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_pure$__$returns$_t_bytes4_$",
                              "typeString": "function () pure external returns (bytes4)"
                            }
                          },
                          "id": 17086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1174:30:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "1157:47:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50726f76696465642064617461206973206e6f742076616c6964",
                        "id": 17088,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1206:28:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        },
                        "value": "Provided data is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        }
                      ],
                      "id": 17080,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1149:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1149:86:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17090,
                  "nodeType": "ExpressionStatement",
                  "src": "1149:86:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17096,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17049,
                            "src": "1280:5:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 17093,
                                "name": "usdTieredSTO",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17070,
                                "src": "1261:12:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                                  "typeString": "contract USDTieredSTO"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                                  "typeString": "contract USDTieredSTO"
                                }
                              ],
                              "id": 17092,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1253:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 17094,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1253:21:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 17095,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1253:26:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$__$returns$_t_bool_$",
                            "typeString": "function () payable returns (bool)"
                          }
                        },
                        "id": 17097,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1253:33:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e2d7375636365737366756c6c2063616c6c",
                        "id": 17098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1288:21:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        },
                        "value": "Un-successfull call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        }
                      ],
                      "id": 17091,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1245:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1245:65:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17100,
                  "nodeType": "ExpressionStatement",
                  "src": "1245:65:45"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17103,
                            "name": "usdTieredSTO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17070,
                            "src": "1362:12:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                              "typeString": "contract USDTieredSTO"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                              "typeString": "contract USDTieredSTO"
                            }
                          ],
                          "id": 17102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1354:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 17104,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1354:21:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 17105,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            17136
                          ],
                          "referencedDeclaration": 17136,
                          "src": "1377:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 17106,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1377:9:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17108,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23284,
                            "src": "1396:4:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_USDTieredSTOFactory_$17204",
                              "typeString": "contract USDTieredSTOFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_USDTieredSTOFactory_$17204",
                              "typeString": "contract USDTieredSTOFactory"
                            }
                          ],
                          "id": 17107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1388:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 17109,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1388:13:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17110,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1403:3:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1403:10:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17112,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1415:3:45",
                        "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": 17101,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1325:28:45",
                      "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": 17113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1325:94:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17114,
                  "nodeType": "EmitStatement",
                  "src": "1320:99:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17116,
                        "name": "usdTieredSTO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17070,
                        "src": "1444:12:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                          "typeString": "contract USDTieredSTO"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                          "typeString": "contract USDTieredSTO"
                        }
                      ],
                      "id": 17115,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1436:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 17117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1436:21:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 17053,
                  "id": 17118,
                  "nodeType": "Return",
                  "src": "1429:28:45"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 17120,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17049,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 17120,
                  "src": "705:11:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 17048,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "705:5:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "704:13:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17052,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17120,
                  "src": "735:7:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17051,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "735:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "734:9:45"
            },
            "scope": 17204,
            "src": "689:775:45",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17127,
              "nodeType": "Block",
              "src": "1574:25:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 17125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1591:1:45",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3_by_1",
                      "typeString": "int_const 3"
                    },
                    "value": "3"
                  },
                  "functionReturnParameters": 17124,
                  "id": 17126,
                  "nodeType": "Return",
                  "src": "1584:8:45"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 17128,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17121,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1544:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17124,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17123,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17128,
                  "src": "1567:5:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 17122,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1567:5:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1566:7:45"
            },
            "scope": 17204,
            "src": "1528:71:45",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17135,
              "nodeType": "Block",
              "src": "1711:38:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "55534454696572656453544f",
                    "id": 17133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1728:14:45",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_27d40a6e1cfca8f98d1650c752b7ea7ad74152ea1b686a46a76710a4b32a4b26",
                      "typeString": "literal_string \"USDTieredSTO\""
                    },
                    "value": "USDTieredSTO"
                  },
                  "functionReturnParameters": 17132,
                  "id": 17134,
                  "nodeType": "Return",
                  "src": "1721:21:45"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 17136,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17129,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1679:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17132,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17131,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17136,
                  "src": "1702:7:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17130,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1702:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1701:9:45"
            },
            "scope": 17204,
            "src": "1663:86:45",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17143,
              "nodeType": "Block",
              "src": "1874:40:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "555344205469657265642053544f",
                    "id": 17141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1891:16:45",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_bb70a06939063c54e2b2ca1e74bf81ca9298adf1d985f13cd248a1cc7cace104",
                      "typeString": "literal_string \"USD Tiered STO\""
                    },
                    "value": "USD Tiered STO"
                  },
                  "functionReturnParameters": 17140,
                  "id": 17142,
                  "nodeType": "Return",
                  "src": "1884:23:45"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 17144,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17137,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1843:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17139,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17144,
                  "src": "1866:6:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17138,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1866:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1865:8:45"
            },
            "scope": 17204,
            "src": "1820:94:45",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17151,
              "nodeType": "Block",
              "src": "2027:40:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "555344205469657265642053544f",
                    "id": 17149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2044:16:45",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_bb70a06939063c54e2b2ca1e74bf81ca9298adf1d985f13cd248a1cc7cace104",
                      "typeString": "literal_string \"USD Tiered STO\""
                    },
                    "value": "USD Tiered STO"
                  },
                  "functionReturnParameters": 17148,
                  "id": 17150,
                  "nodeType": "Return",
                  "src": "2037:23:45"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 17152,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17145,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1996:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17148,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17147,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17152,
                  "src": "2019:6:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17146,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2019:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2018:8:45"
            },
            "scope": 17204,
            "src": "1979:88:45",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17159,
              "nodeType": "Block",
              "src": "2211:55:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "496e697469616c69736573206120555344207469657265642053544f2e",
                    "id": 17157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2228:31:45",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_5d1e120bd0479f12677aef23235504370f8c940c2956e1e96cdf80d727b30a46",
                      "typeString": "literal_string \"Initialises a USD tiered STO.\""
                    },
                    "value": "Initialises a USD tiered STO."
                  },
                  "functionReturnParameters": 17156,
                  "id": 17158,
                  "nodeType": "Return",
                  "src": "2221:38:45"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 17160,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17153,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2180:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17156,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17155,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17160,
                  "src": "2203:6:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17154,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2203:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2202:8:45"
            },
            "scope": 17204,
            "src": "2156:110:45",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17202,
              "nodeType": "Block",
              "src": "2396:236:45",
              "statements": [
                {
                  "assignments": [
                    17169
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17169,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 17203,
                      "src": "2406:30:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 17167,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2406:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 17168,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2406:9:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17175,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "34",
                        "id": 17173,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2453:1:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        },
                        "value": "4"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        }
                      ],
                      "id": 17172,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2439:13:45",
                      "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": 17170,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2443:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 17171,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2443:9:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 17174,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2439:16:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2406:49:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17176,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17169,
                        "src": "2465:13:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 17178,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2479:1:45",
                        "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": "2465:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "555344",
                      "id": 17179,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2484:5:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c4ae21aac0c6549d71dd96035b7e0bdb6c79ebdba8891b666115bc976d16a29e",
                        "typeString": "literal_string \"USD\""
                      },
                      "value": "USD"
                    },
                    "src": "2465:24:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 17181,
                  "nodeType": "ExpressionStatement",
                  "src": "2465:24:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17182,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17169,
                        "src": "2499:13:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 17184,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 17183,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2513:1:45",
                        "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": "2499:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "546965726564",
                      "id": 17185,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2518:8:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_74d91be540a70818c88b5b790ab6f942858a55942888191152a0282e544729e0",
                        "typeString": "literal_string \"Tiered\""
                      },
                      "value": "Tiered"
                    },
                    "src": "2499:27:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 17187,
                  "nodeType": "ExpressionStatement",
                  "src": "2499:27:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17188,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17169,
                        "src": "2536:13:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 17190,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 17189,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2550:1:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2536:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "504f4c59",
                      "id": 17191,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2555:6:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_42e9b9ff2964f66d264e07a2cd4c5234a8c8c5adbfc54101bd50b0744fcd261f",
                        "typeString": "literal_string \"POLY\""
                      },
                      "value": "POLY"
                    },
                    "src": "2536:25:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 17193,
                  "nodeType": "ExpressionStatement",
                  "src": "2536:25:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17194,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17169,
                        "src": "2571:13:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 17196,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "33",
                        "id": 17195,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2585:1:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2571:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "455448",
                      "id": 17197,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2590:5:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4",
                        "typeString": "literal_string \"ETH\""
                      },
                      "value": "ETH"
                    },
                    "src": "2571:24:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 17199,
                  "nodeType": "ExpressionStatement",
                  "src": "2571:24:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17200,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17169,
                    "src": "2612:13:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 17165,
                  "id": 17201,
                  "nodeType": "Return",
                  "src": "2605:20:45"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 17203,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17161,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2362:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17165,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17164,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17203,
                  "src": "2385:9:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 17162,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2385:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 17163,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2385:9:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2384:11:45"
            },
            "scope": 17204,
            "src": "2346:286:45",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 17205,
        "src": "198:2437:45"
      }
    ],
    "src": "0:2636:45"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/USDTieredSTOFactory.sol",
    "exportedSymbols": {
      "USDTieredSTOFactory": [
        17204
      ]
    },
    "id": 17205,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 17024,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:45"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/USDTieredSTO.sol",
        "file": "./USDTieredSTO.sol",
        "id": 17025,
        "nodeType": "ImportDirective",
        "scope": 17205,
        "sourceUnit": 17023,
        "src": "26:28:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 17026,
        "nodeType": "ImportDirective",
        "scope": 17205,
        "sourceUnit": 9955,
        "src": "55:45:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModule.sol",
        "file": "../../interfaces/IModule.sol",
        "id": 17027,
        "nodeType": "ImportDirective",
        "scope": 17205,
        "sourceUnit": 9718,
        "src": "101:38:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 17028,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "230:14:45",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 17029,
            "nodeType": "InheritanceSpecifier",
            "src": "230:14:45"
          }
        ],
        "contractDependencies": [
          9954,
          17022,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying CappedSTO module",
        "fullyImplemented": true,
        "id": 17204,
        "linearizedBaseContracts": [
          17204,
          9954,
          22664
        ],
        "name": "USDTieredSTOFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 17046,
              "nodeType": "Block",
              "src": "538:8:45",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 17047,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17040,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17031,
                    "src": "477:12:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 17041,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17033,
                    "src": "491:10:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 17042,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17035,
                    "src": "503:10:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 17043,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17037,
                    "src": "515:17:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 17044,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17039,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "462:14:45",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "462:71:45"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17031,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 17047,
                  "src": "360:20:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17030,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "360:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17033,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 17047,
                  "src": "382:18:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17032,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "382:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17035,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 17047,
                  "src": "402:18:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17034,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "402:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17037,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 17047,
                  "src": "422:25:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17036,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "422:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "359:89:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17045,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "538:0:45"
            },
            "scope": 17204,
            "src": "347:199:45",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17119,
              "nodeType": "Block",
              "src": "744:720:45",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 17056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17054,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "757:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 17055,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "769:1:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "757:13:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17068,
                  "nodeType": "IfStatement",
                  "src": "754:161:45",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 17060,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "815:3:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 17061,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "815:10:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 17062,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "827:5:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 17063,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "834:9:45",
                              "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": 17058,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "792:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 17059,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "792:22:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 17064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "792:52:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 17065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "846:68:45",
                          "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": 17057,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "784:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 17066,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "784:131:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17067,
                    "nodeType": "ExpressionStatement",
                    "src": "784:131:45"
                  }
                },
                {
                  "assignments": [
                    17070
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17070,
                      "name": "usdTieredSTO",
                      "nodeType": "VariableDeclaration",
                      "scope": 17120,
                      "src": "990:25:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                        "typeString": "contract USDTieredSTO"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17069,
                        "name": "USDTieredSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 17022,
                        "src": "990:12:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                          "typeString": "contract USDTieredSTO"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17079,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17073,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1035:3:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17074,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1035:10:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17076,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1055:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 17075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1047:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 17077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1047:18:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 17072,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1018:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_USDTieredSTO_$17022_$",
                        "typeString": "function (address,address) returns (contract USDTieredSTO)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17071,
                        "name": "USDTieredSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 17022,
                        "src": "1022:12:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                          "typeString": "contract USDTieredSTO"
                        }
                      }
                    },
                    "id": 17078,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1018:48:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                      "typeString": "contract USDTieredSTO"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "990:76:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 17087,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17082,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17049,
                              "src": "1164:5:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 17081,
                            "name": "getSig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9893,
                            "src": "1157:6:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes memory) pure returns (bytes4)"
                            }
                          },
                          "id": 17083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1157:13:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 17084,
                              "name": "usdTieredSTO",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17070,
                              "src": "1174:12:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                                "typeString": "contract USDTieredSTO"
                              }
                            },
                            "id": 17085,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getInitFunction",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16964,
                            "src": "1174:28:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_pure$__$returns$_t_bytes4_$",
                              "typeString": "function () pure external returns (bytes4)"
                            }
                          },
                          "id": 17086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1174:30:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "1157:47:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50726f76696465642064617461206973206e6f742076616c6964",
                        "id": 17088,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1206:28:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        },
                        "value": "Provided data is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        }
                      ],
                      "id": 17080,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1149:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1149:86:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17090,
                  "nodeType": "ExpressionStatement",
                  "src": "1149:86:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17096,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17049,
                            "src": "1280:5:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 17093,
                                "name": "usdTieredSTO",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17070,
                                "src": "1261:12:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                                  "typeString": "contract USDTieredSTO"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                                  "typeString": "contract USDTieredSTO"
                                }
                              ],
                              "id": 17092,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1253:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 17094,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1253:21:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 17095,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1253:26:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$__$returns$_t_bool_$",
                            "typeString": "function () payable returns (bool)"
                          }
                        },
                        "id": 17097,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1253:33:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e2d7375636365737366756c6c2063616c6c",
                        "id": 17098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1288:21:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        },
                        "value": "Un-successfull call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        }
                      ],
                      "id": 17091,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1245:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1245:65:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17100,
                  "nodeType": "ExpressionStatement",
                  "src": "1245:65:45"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17103,
                            "name": "usdTieredSTO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17070,
                            "src": "1362:12:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                              "typeString": "contract USDTieredSTO"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                              "typeString": "contract USDTieredSTO"
                            }
                          ],
                          "id": 17102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1354:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 17104,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1354:21:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 17105,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            17136
                          ],
                          "referencedDeclaration": 17136,
                          "src": "1377:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 17106,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1377:9:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17108,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23284,
                            "src": "1396:4:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_USDTieredSTOFactory_$17204",
                              "typeString": "contract USDTieredSTOFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_USDTieredSTOFactory_$17204",
                              "typeString": "contract USDTieredSTOFactory"
                            }
                          ],
                          "id": 17107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1388:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 17109,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1388:13:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17110,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1403:3:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1403:10:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17112,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1415:3:45",
                        "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": 17101,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1325:28:45",
                      "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": 17113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1325:94:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17114,
                  "nodeType": "EmitStatement",
                  "src": "1320:99:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17116,
                        "name": "usdTieredSTO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17070,
                        "src": "1444:12:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                          "typeString": "contract USDTieredSTO"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_USDTieredSTO_$17022",
                          "typeString": "contract USDTieredSTO"
                        }
                      ],
                      "id": 17115,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1436:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 17117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1436:21:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 17053,
                  "id": 17118,
                  "nodeType": "Return",
                  "src": "1429:28:45"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 17120,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17049,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 17120,
                  "src": "705:11:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 17048,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "705:5:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "704:13:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17052,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17120,
                  "src": "735:7:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17051,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "735:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "734:9:45"
            },
            "scope": 17204,
            "src": "689:775:45",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17127,
              "nodeType": "Block",
              "src": "1574:25:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 17125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1591:1:45",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3_by_1",
                      "typeString": "int_const 3"
                    },
                    "value": "3"
                  },
                  "functionReturnParameters": 17124,
                  "id": 17126,
                  "nodeType": "Return",
                  "src": "1584:8:45"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 17128,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17121,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1544:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17124,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17123,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17128,
                  "src": "1567:5:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 17122,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1567:5:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1566:7:45"
            },
            "scope": 17204,
            "src": "1528:71:45",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17135,
              "nodeType": "Block",
              "src": "1711:38:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "55534454696572656453544f",
                    "id": 17133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1728:14:45",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_27d40a6e1cfca8f98d1650c752b7ea7ad74152ea1b686a46a76710a4b32a4b26",
                      "typeString": "literal_string \"USDTieredSTO\""
                    },
                    "value": "USDTieredSTO"
                  },
                  "functionReturnParameters": 17132,
                  "id": 17134,
                  "nodeType": "Return",
                  "src": "1721:21:45"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 17136,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17129,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1679:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17132,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17131,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17136,
                  "src": "1702:7:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17130,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1702:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1701:9:45"
            },
            "scope": 17204,
            "src": "1663:86:45",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17143,
              "nodeType": "Block",
              "src": "1874:40:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "555344205469657265642053544f",
                    "id": 17141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1891:16:45",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_bb70a06939063c54e2b2ca1e74bf81ca9298adf1d985f13cd248a1cc7cace104",
                      "typeString": "literal_string \"USD Tiered STO\""
                    },
                    "value": "USD Tiered STO"
                  },
                  "functionReturnParameters": 17140,
                  "id": 17142,
                  "nodeType": "Return",
                  "src": "1884:23:45"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 17144,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17137,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1843:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17139,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17144,
                  "src": "1866:6:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17138,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1866:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1865:8:45"
            },
            "scope": 17204,
            "src": "1820:94:45",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17151,
              "nodeType": "Block",
              "src": "2027:40:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "555344205469657265642053544f",
                    "id": 17149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2044:16:45",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_bb70a06939063c54e2b2ca1e74bf81ca9298adf1d985f13cd248a1cc7cace104",
                      "typeString": "literal_string \"USD Tiered STO\""
                    },
                    "value": "USD Tiered STO"
                  },
                  "functionReturnParameters": 17148,
                  "id": 17150,
                  "nodeType": "Return",
                  "src": "2037:23:45"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 17152,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17145,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1996:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17148,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17147,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17152,
                  "src": "2019:6:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17146,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2019:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2018:8:45"
            },
            "scope": 17204,
            "src": "1979:88:45",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17159,
              "nodeType": "Block",
              "src": "2211:55:45",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "496e697469616c69736573206120555344207469657265642053544f2e",
                    "id": 17157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2228:31:45",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_5d1e120bd0479f12677aef23235504370f8c940c2956e1e96cdf80d727b30a46",
                      "typeString": "literal_string \"Initialises a USD tiered STO.\""
                    },
                    "value": "Initialises a USD tiered STO."
                  },
                  "functionReturnParameters": 17156,
                  "id": 17158,
                  "nodeType": "Return",
                  "src": "2221:38:45"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 17160,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17153,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2180:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17156,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17155,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17160,
                  "src": "2203:6:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17154,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2203:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2202:8:45"
            },
            "scope": 17204,
            "src": "2156:110:45",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17202,
              "nodeType": "Block",
              "src": "2396:236:45",
              "statements": [
                {
                  "assignments": [
                    17169
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17169,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 17203,
                      "src": "2406:30:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 17167,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2406:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 17168,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2406:9:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17175,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "34",
                        "id": 17173,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2453:1:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        },
                        "value": "4"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        }
                      ],
                      "id": 17172,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2439:13:45",
                      "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": 17170,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2443:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 17171,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2443:9:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 17174,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2439:16:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2406:49:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17176,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17169,
                        "src": "2465:13:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 17178,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2479:1:45",
                        "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": "2465:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "555344",
                      "id": 17179,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2484:5:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c4ae21aac0c6549d71dd96035b7e0bdb6c79ebdba8891b666115bc976d16a29e",
                        "typeString": "literal_string \"USD\""
                      },
                      "value": "USD"
                    },
                    "src": "2465:24:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 17181,
                  "nodeType": "ExpressionStatement",
                  "src": "2465:24:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17182,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17169,
                        "src": "2499:13:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 17184,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 17183,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2513:1:45",
                        "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": "2499:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "546965726564",
                      "id": 17185,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2518:8:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_74d91be540a70818c88b5b790ab6f942858a55942888191152a0282e544729e0",
                        "typeString": "literal_string \"Tiered\""
                      },
                      "value": "Tiered"
                    },
                    "src": "2499:27:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 17187,
                  "nodeType": "ExpressionStatement",
                  "src": "2499:27:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17188,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17169,
                        "src": "2536:13:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 17190,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 17189,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2550:1:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2536:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "504f4c59",
                      "id": 17191,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2555:6:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_42e9b9ff2964f66d264e07a2cd4c5234a8c8c5adbfc54101bd50b0744fcd261f",
                        "typeString": "literal_string \"POLY\""
                      },
                      "value": "POLY"
                    },
                    "src": "2536:25:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 17193,
                  "nodeType": "ExpressionStatement",
                  "src": "2536:25:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17194,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17169,
                        "src": "2571:13:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 17196,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "33",
                        "id": 17195,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2585:1:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2571:16:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "455448",
                      "id": 17197,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2590:5:45",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4",
                        "typeString": "literal_string \"ETH\""
                      },
                      "value": "ETH"
                    },
                    "src": "2571:24:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 17199,
                  "nodeType": "ExpressionStatement",
                  "src": "2571:24:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17200,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17169,
                    "src": "2612:13:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 17165,
                  "id": 17201,
                  "nodeType": "Return",
                  "src": "2605:20:45"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 17203,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17161,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2362:2:45"
            },
            "payable": false,
            "returnParameters": {
              "id": 17165,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17164,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17203,
                  "src": "2385:9:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 17162,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2385:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 17163,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2385:9:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2384:11:45"
            },
            "scope": 17204,
            "src": "2346:286:45",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 17205,
        "src": "198:2437:45"
      }
    ],
    "src": "0:2636:45"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {
    "15": {
      "events": {},
      "links": {},
      "address": "0x434b0fe7e07b557de9cdd9ada6fbbb6dd5e1bd3a",
      "transactionHash": "0xa4ccfd6535c227ffb73fe6a53d0eff78ef0a7bec7ed8408d2357b85017a71ddf"
    }
  },
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:28.927Z"
}