{
  "contractName": "PurchasersWidgetRenderer",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "PURCHASERS",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ETHS_INVESTED",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SHORT_DESC",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "LONG_DESC",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PURCHASER",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "TOKENS_PURCHASED",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "locale",
          "type": "string"
        },
        {
          "name": "key",
          "type": "string"
        },
        {
          "name": "value",
          "type": "string"
        }
      ],
      "name": "setResource",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "locale",
          "type": "string"
        },
        {
          "name": "key",
          "type": "string"
        }
      ],
      "name": "resource",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "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": true,
      "inputs": [
        {
          "name": "_locale",
          "type": "string"
        },
        {
          "name": "_sale",
          "type": "address"
        }
      ],
      "name": "render",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405260008054600160a060020a03191633179055612b81806100256000396000f3006080604052600436106100a05763ffffffff60e060020a6000350416635bd9426a81146100a5578063604fb92b1461012f578063715018a6146101445780638b5827121461015b5780638da5cb5b14610170578063ac5c6e12146101a1578063c398b602146101b6578063ca1a70be146101cb578063e2dade281461022f578063ed3487fe14610244578063f2fde38b14610319578063f65a5c1b1461033a575b600080fd5b3480156100b157600080fd5b506100ba6103d1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f45781810151838201526020016100dc565b50505050905090810190601f1680156101215780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013b57600080fd5b506100ba6103f6565b34801561015057600080fd5b5061015961042d565b005b34801561016757600080fd5b506100ba610499565b34801561017c57600080fd5b506101856104d0565b60408051600160a060020a039092168252519081900360200190f35b3480156101ad57600080fd5b506100ba6104df565b3480156101c257600080fd5b506100ba610516565b3480156101d757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100ba94369492936024939284019190819084018382808284375094975050509235600160a060020a0316935061054d92505050565b34801561023b57600080fd5b506100ba610c8c565b34801561025057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261015994369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610cc39650505050505050565b34801561032557600080fd5b50610159600160a060020a0360043516610db0565b34801561034657600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100ba94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610dd39650505050505050565b60408051808201909152600a8152600080516020612b36833981519152602082015281565b60408051808201909152600d81527f657468735f696e76657374656400000000000000000000000000000000000000602082015281565b600054600160a060020a0316331461044457600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60408051808201909152600a81527f73686f72745f6465736300000000000000000000000000000000000000000000602082015281565b600054600160a060020a031681565b60408051808201909152600981527f6c6f6e675f646573630000000000000000000000000000000000000000000000602082015281565b60408051808201909152600981527f7075726368617365720000000000000000000000000000000000000000000000602082015281565b606080610558612986565b60408051600180825281830190925290816020015b6105756129b6565b81526020019060019003908161056d57905050915060e0604051908101604052806001151581526020016040805190810160405280600a8152602001600080516020612b3683398151915281525081526020016040805190810160405280600581526020017f7461626c6500000000000000000000000000000000000000000000000000000081525081526020016001876040518082805190602001908083835b602083106106355780518252601f199092019160209182019101610616565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600a808752600080516020612b3683398151915293870193845291519095945092508291908083835b602083106106ae5780518252601f19909201916020918201910161068f565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f60026001831615909802909501169590950492830182900482028801820190528187529294509250508301828280156107625780601f1061073757610100808354040283529160200191610762565b820191906000526020600020905b81548152906001019060200180831161074557829003601f168201915b505050505081526020016040805190810160405280600481526020017f6e756c6c0000000000000000000000000000000000000000000000000000000081525081526020016107af610f24565b81526020016060604051908101604052806001151581526020016107d38989610f77565b81526020016107e2898961173a565b905290528251839060009081106107f557fe5b9060200190602002018190525060a0604051908101604052806001876040518082805190602001908083835b602083106108405780518252601f199092019160209182019101610821565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600a808752600080516020612b3683398151915293870193845291519095945092508291908083835b602083106108b95780518252601f19909201916020918201910161089a565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f600260018316159098029095011695909504928301829004820288018201905281875292945092505083018282801561096d5780601f106109425761010080835404028352916020019161096d565b820191906000526020600020905b81548152906001019060200180831161095057829003601f168201915b505050505081526020016001876040518082805190602001908083835b602083106109a95780518252601f19909201916020918201910161098a565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600a8087527f73686f72745f646573630000000000000000000000000000000000000000000093870193845291519095945092508291908083835b60208310610a345780518252601f199092019160209182019101610a15565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f6002600183161590980290950116959095049283018290048202880182019052818752929450925050830182828015610ae85780601f10610abd57610100808354040283529160200191610ae8565b820191906000526020600020905b815481529060010190602001808311610acb57829003601f168201915b505050505081526020016001876040518082805190602001908083835b60208310610b245780518252601f199092019160209182019101610b05565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520858201825260098087527f6c6f6e675f64657363000000000000000000000000000000000000000000000093870193845291519095945092508291908083835b60208310610baf5780518252601f199092019160209182019101610b90565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f6002600183161590980290950116959095049283018290048202880182019052818752929450925050830182828015610c635780601f10610c3857610100808354040283529160200191610c63565b820191906000526020600020905b815481529060010190602001808311610c4657829003601f168201915b5050505050815260200160088152602001838152509050610c8381611ab6565b95945050505050565b60408051808201909152601081527f746f6b656e735f70757263686173656400000000000000000000000000000000602082015281565b600054600160a060020a03163314610cda57600080fd5b806001846040518082805190602001908083835b60208310610d0d5780518252601f199092019160209182019101610cee565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842087519094889450925082918401908083835b60208310610d695780518252601f199092019160209182019101610d4a565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381019093208451610daa9591949190910192509050612a02565b50505050565b600054600160a060020a03163314610dc757600080fd5b610dd081611d13565b50565b60606001836040518082805190602001908083835b60208310610e075780518252601f199092019160209182019101610de8565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b60208310610e635780518252601f199092019160209182019101610e44565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f6002600183161590980290950116959095049283018290048202880182019052818752929450925050830182828015610f175780601f10610eec57610100808354040283529160200191610f17565b820191906000526020600020905b815481529060010190602001808311610efa57829003601f168201915b5050505050905092915050565b610f2c612a80565b506040805160a0810182526000808252602080830182905283518082018552828152838501528351808201855282815260608401528351908101909352825260808101919091525b90565b60606000606083600160a060020a031663fc0c546a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b505050506040513d6020811015610fe557600080fd5b505160408051600380825260808201909252919350816020015b611007612aad565b815260200190600190039081610fff57905050905060a0604051908101604052806001151581526020016040805190810160405280600981526020017f707572636861736572000000000000000000000000000000000000000000000081525081526020016040805190810160405280600781526020017f616464726573730000000000000000000000000000000000000000000000000081525081526020016001876040518082805190602001908083835b602083106110d95780518252601f1990920191602091820191016110ba565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520858201825260098087527f707572636861736572000000000000000000000000000000000000000000000093870193845291519095945092508291908083835b602083106111645780518252601f199092019160209182019101611145565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f60026001831615909802909501169590950492830182900482028801820190528187529294509250508301828280156112185780601f106111ed57610100808354040283529160200191611218565b820191906000526020600020905b8154815290600101906020018083116111fb57829003601f168201915b5050505050815260200161122a610f24565b905281518290600090811061123b57fe5b9060200190602002018190525060a0604051908101604052806001151581526020016040805190810160405280600d81526020017f657468735f696e7665737465640000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017f657468000000000000000000000000000000000000000000000000000000000081525081526020016001876040518082805190602001908083835b602083106113055780518252601f1990920191602091820191016112e6565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600d8087527f657468735f696e7665737465640000000000000000000000000000000000000093870193845291519095945092508291908083835b602083106113905780518252601f199092019160209182019101611371565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f60026001831615909802909501169590950492830182900482028801820190528187529294509250508301828280156114445780601f1061141957610100808354040283529160200191611444565b820191906000526020600020905b81548152906001019060200180831161142757829003601f168201915b50505050508152602001611456610f24565b905281518290600190811061146757fe5b9060200190602002018190525060a0604051908101604052806001151581526020016040805190810160405280601081526020017f746f6b656e735f70757263686173656400000000000000000000000000000000815250815260200161158e61154461153f86600160a060020a031663313ce5676040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561150b57600080fd5b505af115801561151f573d6000803e3d6000fd5b505050506040513d602081101561153557600080fd5b505160ff16611d90565b611eef565b6115826040805190810160405280600581526020017f746f6b656e000000000000000000000000000000000000000000000000000000815250611eef565b9063ffffffff611f1816565b81526020016001876040518082805190602001908083835b602083106115c55780518252601f1990920191602091820191016115a6565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520858201825260108087527f746f6b656e735f7075726368617365640000000000000000000000000000000093870193845291519095945092508291908083835b602083106116505780518252601f199092019160209182019101611631565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f60026001831615909802909501169590950492830182900482028801820190528187529294509250508301828280156117045780601f106116d957610100808354040283529160200191611704565b820191906000526020600020905b8154815290600101906020018083116116e757829003601f168201915b50505050508152602001611716610f24565b905281518290600290811061172757fe5b6020908102909101015291505092915050565b606080600080606085600160a060020a031663580c2ae96040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561178057600080fd5b505af1158015611794573d6000803e3d6000fd5b505050506040513d60208110156117aa57600080fd5b50516040805182815260208084028201019091529080156117df57816020015b60608152602001906001900390816117ca5790505b509350600092505b8351831015611aab5785600160a060020a03166391c62b79846040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561183957600080fd5b505af115801561184d573d6000803e3d6000fd5b505050506040513d602081101561186357600080fd5b505160408051808201909152600e81527f7b22707572636861736572223a22000000000000000000000000000000000000602082015290925090506118bf6118b661153f600160a060020a038516611f8f565b61158283611eef565b90506119026118b66040805190810160405280601281526020017f222c22657468735f696e766573746564223a0000000000000000000000000000815250611eef565b90506119996118b661153f88600160a060020a031663cf7c2b31866040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561196857600080fd5b505af115801561197c573d6000803e3d6000fd5b505050506040513d602081101561199257600080fd5b5051611d90565b90506119dc6118b66040805190810160405280601481526020017f2c22746f6b656e735f707572636861736564223a000000000000000000000000815250611eef565b9050611a426118b661153f88600160a060020a03166397b150ca866040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561196857600080fd5b9050611a856118b66040805190810160405280600181526020017f7d00000000000000000000000000000000000000000000000000000000000000815250611eef565b9050808484815181101515611a9657fe5b602090810290910101526001909201916117e7565b509195945050505050565b60408051808201909152600a81527f7b227469746c65223a22000000000000000000000000000000000000000000006020820152815160609190600090611b0990611b0090611eef565b61158284611eef565b9150611b4c611b006040805190810160405280600f81526020017f222c2273686f727444657363223a220000000000000000000000000000000000815250611eef565b9150611b5e611b008560200151611eef565b9150611ba1611b006040805190810160405280600e81526020017f222c226c6f6e6744657363223a22000000000000000000000000000000000000815250611eef565b9150611bb3611b008560400151611eef565b9150611bf6611b006040805190810160405280600a81526020017f222c227769647468223a00000000000000000000000000000000000000000000815250611eef565b9150611c0b611b0061153f8660600151611d90565b9150611c4e611b006040805190810160405280600d81526020017f2c22656c656d656e7473223a5b00000000000000000000000000000000000000815250611eef565b9150600090505b836080015151811015611cca576000811115611c9657611c93611b0060408051908101604052806001815260200160fa60020a600b02815250611eef565b91505b611cc0611b0061153f866080015184815181101515611cb157fe5b906020019060200201516120d2565b9150600101611c55565b611d0b611b006040805190810160405280600281526020017f5d7d000000000000000000000000000000000000000000000000000000000000815250611eef565b949350505050565b600160a060020a0381161515611d2857600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60608060008181851515611dd95760408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201529450611ee6565b6040805160208082528183019092529080820161040080388339019050509350600092505b6000861115611e4b57600a860660300160f860020a028484815181101515611e2257fe5b906020010190600160f860020a031916908160001a905350600a86049550600190920191611dfe565b60408051848152601f19601f86011681016020019091526000198401938015611e7e578160200160208202803883390190505b509150600090505b8151811015611ee257835160001984019385918110611ea157fe5b90602001015160f860020a900460f860020a028282815181101515611ec257fe5b906020010190600160f860020a031916908160001a905350600101611e86565b8194505b50505050919050565b611ef7612ae0565b50604080518082019091528151815260208281019082018190525b50919050565b606080600083600001518560000151016040519080825280601f01601f191660200182016040528015611f55578160200160208202803883390190505b509150602082019050611f7181866020015187600001516123b7565b845160208501518551611f8792840191906123b7565b509392505050565b60408051602a80825260608083019093528291600091829182916020820161054080388339505081519195507f3000000000000000000000000000000000000000000000000000000000000000918691506000908110611feb57fe5b906020010190600160f860020a031916908160001a90535083517f7800000000000000000000000000000000000000000000000000000000000000908590600190811061203457fe5b906020010190600160f860020a031916908160001a905350859250600091505b60288210156120c857506030600f8316016039600160a060020a038216111561207b576027015b8060f860020a02848360280360010181518110151561209657fe5b906020010190600160f860020a031916908160001a9053506010600160a060020a038416049250600190910190612054565b5091949350505050565b60608082600001511561237c576040805190810160405280600781526020017f7b226964223a220000000000000000000000000000000000000000000000000081525090506121276118b68460200151611eef565b905061216a6118b66040805190810160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250611eef565b60a084015151909150156121d1576121b96118b66040805190810160405280600b81526020017f2c2022616374696f6e223a000000000000000000000000000000000000000000815250611eef565b90506121ce6118b661153f8560a001516123fb565b90505b60c083015151156122355761221d6118b66040805190810160405280600a81526020017f2c20227461626c65223a00000000000000000000000000000000000000000000815250611eef565b90506122326118b661153f8560c0015161259e565b90505b6122766118b66040805190810160405280600981526020017f2c2274797065223a220000000000000000000000000000000000000000000000815250611eef565b90506122886118b68460400151611eef565b90506122cb6118b66040805190810160405280600b81526020017f222c226c6162656c223a22000000000000000000000000000000000000000000815250611eef565b90506122dd6118b68460600151611eef565b90506123206118b66040805190810160405280600981526020017f222c2264617461223a0000000000000000000000000000000000000000000000815250611eef565b90506123326118b68460800151611eef565b90506123756118b66040805190810160405280600181526020017f7d00000000000000000000000000000000000000000000000000000000000000815250611eef565b9150611f12565b60408051808201909152600481527f6e756c6c0000000000000000000000000000000000000000000000000000000060208201529150611f12565b60005b602082106123dc578251845260209384019390920191601f19909101906123ba565b50905182516020929092036101000a6000190180199091169116179052565b60608082600001511561237c576040805190810160405280600c81526020017f7b2261646472657373223a220000000000000000000000000000000000000000815250905061245c6118b661153f8560200151600160a060020a0316611f8f565b905061249f6118b66040805190810160405280601681526020017f222c2266756e6374696f6e53656c6563746f72223a2200000000000000000000815250611eef565b90506124b16118b68460400151611eef565b90506124f46118b66040805190810160405280600e81526020017f222c22617267756d656e7473223a000000000000000000000000000000000000815250611eef565b90506125066118b68460600151611eef565b90506125496118b66040805190810160405280600c81526020017f2c22636f6e6669726d223a220000000000000000000000000000000000000000815250611eef565b905061255b6118b68460800151611eef565b90506123756118b66040805190810160405280600281526020017f227d000000000000000000000000000000000000000000000000000000000000815250611eef565b60608060008084600001511561277657505060408051808201909152600c81527f7b22636f6c756d6e73223a5b0000000000000000000000000000000000000000602082015290506000805b84602001515181101561266c5760008211156126345761263161262860408051908101604052806001815260200160fa60020a600b02815250611eef565b61158285611eef565b92505b61265e61262861153f87602001518481518110151561264f57fe5b906020019060200201516127b5565b9250600191820191016125ea565b6126ad6126286040805190810160405280600a81526020017f5d2c22726f7773223a5b00000000000000000000000000000000000000000000815250611eef565b925060009150600090505b84604001515181101561272e5760008211156126f9576126f661262860408051908101604052806001815260200160fa60020a600b02815250611eef565b92505b61272061262886604001518381518110151561271157fe5b90602001906020020151611eef565b9250600191820191016126b8565b61276f6126286040805190810160405280600281526020017f5d7d000000000000000000000000000000000000000000000000000000000000815250611eef565b93506127ad565b60408051808201909152600481527f6e756c6c00000000000000000000000000000000000000000000000000000000602082015293505b505050919050565b60608082600001511561237c576040805190810160405280600781526020017f7b226964223a2200000000000000000000000000000000000000000000000000815250905061280a6118b68460200151611eef565b905061284d6118b66040805190810160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250611eef565b608084015151909150156128de576128836118b660408051908101604052806001815260200160fa60020a600b02815250611eef565b90506128c66118b66040805190810160405280600981526020017f22616374696f6e223a0000000000000000000000000000000000000000000000815250611eef565b90506128db6118b661153f85608001516123fb565b90505b61291f6118b66040805190810160405280600981526020017f2c2274797065223a220000000000000000000000000000000000000000000000815250611eef565b90506129316118b68460400151611eef565b90506129746118b66040805190810160405280600b81526020017f222c226c6162656c223a22000000000000000000000000000000000000000000815250611eef565b905061255b6118b68460600151611eef565b60a06040519081016040528060608152602001606081526020016060815260200160008152602001606081525090565b6101a060405190810160405280600015158152602001606081526020016060815260200160608152602001606081526020016129f0612a80565b81526020016129fd612af7565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a4357805160ff1916838001178555612a70565b82800160010185558215612a70579182015b82811115612a70578251825591602001919060010190612a55565b50612a7c929150612b1b565b5090565b6040805160a081018252600080825260208201526060918101829052818101829052608081019190915290565b610120604051908101604052806000151581526020016060815260200160608152602001606081526020016129fd612a80565b604080518082019091526000808252602082015290565b60606040519081016040528060001515815260200160608152602001606081525090565b610f7491905b80821115612a7c5760008155600101612b2156007075726368617365727300000000000000000000000000000000000000000000a165627a7a723058200d99410b56dcae7bd15f43f42f3a068684c0f0078340bcea8046fe90c33f68920029",
  "deployedBytecode": "0x6080604052600436106100a05763ffffffff60e060020a6000350416635bd9426a81146100a5578063604fb92b1461012f578063715018a6146101445780638b5827121461015b5780638da5cb5b14610170578063ac5c6e12146101a1578063c398b602146101b6578063ca1a70be146101cb578063e2dade281461022f578063ed3487fe14610244578063f2fde38b14610319578063f65a5c1b1461033a575b600080fd5b3480156100b157600080fd5b506100ba6103d1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f45781810151838201526020016100dc565b50505050905090810190601f1680156101215780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013b57600080fd5b506100ba6103f6565b34801561015057600080fd5b5061015961042d565b005b34801561016757600080fd5b506100ba610499565b34801561017c57600080fd5b506101856104d0565b60408051600160a060020a039092168252519081900360200190f35b3480156101ad57600080fd5b506100ba6104df565b3480156101c257600080fd5b506100ba610516565b3480156101d757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100ba94369492936024939284019190819084018382808284375094975050509235600160a060020a0316935061054d92505050565b34801561023b57600080fd5b506100ba610c8c565b34801561025057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261015994369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610cc39650505050505050565b34801561032557600080fd5b50610159600160a060020a0360043516610db0565b34801561034657600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100ba94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610dd39650505050505050565b60408051808201909152600a8152600080516020612b36833981519152602082015281565b60408051808201909152600d81527f657468735f696e76657374656400000000000000000000000000000000000000602082015281565b600054600160a060020a0316331461044457600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60408051808201909152600a81527f73686f72745f6465736300000000000000000000000000000000000000000000602082015281565b600054600160a060020a031681565b60408051808201909152600981527f6c6f6e675f646573630000000000000000000000000000000000000000000000602082015281565b60408051808201909152600981527f7075726368617365720000000000000000000000000000000000000000000000602082015281565b606080610558612986565b60408051600180825281830190925290816020015b6105756129b6565b81526020019060019003908161056d57905050915060e0604051908101604052806001151581526020016040805190810160405280600a8152602001600080516020612b3683398151915281525081526020016040805190810160405280600581526020017f7461626c6500000000000000000000000000000000000000000000000000000081525081526020016001876040518082805190602001908083835b602083106106355780518252601f199092019160209182019101610616565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600a808752600080516020612b3683398151915293870193845291519095945092508291908083835b602083106106ae5780518252601f19909201916020918201910161068f565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f60026001831615909802909501169590950492830182900482028801820190528187529294509250508301828280156107625780601f1061073757610100808354040283529160200191610762565b820191906000526020600020905b81548152906001019060200180831161074557829003601f168201915b505050505081526020016040805190810160405280600481526020017f6e756c6c0000000000000000000000000000000000000000000000000000000081525081526020016107af610f24565b81526020016060604051908101604052806001151581526020016107d38989610f77565b81526020016107e2898961173a565b905290528251839060009081106107f557fe5b9060200190602002018190525060a0604051908101604052806001876040518082805190602001908083835b602083106108405780518252601f199092019160209182019101610821565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600a808752600080516020612b3683398151915293870193845291519095945092508291908083835b602083106108b95780518252601f19909201916020918201910161089a565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f600260018316159098029095011695909504928301829004820288018201905281875292945092505083018282801561096d5780601f106109425761010080835404028352916020019161096d565b820191906000526020600020905b81548152906001019060200180831161095057829003601f168201915b505050505081526020016001876040518082805190602001908083835b602083106109a95780518252601f19909201916020918201910161098a565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600a8087527f73686f72745f646573630000000000000000000000000000000000000000000093870193845291519095945092508291908083835b60208310610a345780518252601f199092019160209182019101610a15565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f6002600183161590980290950116959095049283018290048202880182019052818752929450925050830182828015610ae85780601f10610abd57610100808354040283529160200191610ae8565b820191906000526020600020905b815481529060010190602001808311610acb57829003601f168201915b505050505081526020016001876040518082805190602001908083835b60208310610b245780518252601f199092019160209182019101610b05565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520858201825260098087527f6c6f6e675f64657363000000000000000000000000000000000000000000000093870193845291519095945092508291908083835b60208310610baf5780518252601f199092019160209182019101610b90565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f6002600183161590980290950116959095049283018290048202880182019052818752929450925050830182828015610c635780601f10610c3857610100808354040283529160200191610c63565b820191906000526020600020905b815481529060010190602001808311610c4657829003601f168201915b5050505050815260200160088152602001838152509050610c8381611ab6565b95945050505050565b60408051808201909152601081527f746f6b656e735f70757263686173656400000000000000000000000000000000602082015281565b600054600160a060020a03163314610cda57600080fd5b806001846040518082805190602001908083835b60208310610d0d5780518252601f199092019160209182019101610cee565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842087519094889450925082918401908083835b60208310610d695780518252601f199092019160209182019101610d4a565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381019093208451610daa9591949190910192509050612a02565b50505050565b600054600160a060020a03163314610dc757600080fd5b610dd081611d13565b50565b60606001836040518082805190602001908083835b60208310610e075780518252601f199092019160209182019101610de8565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b60208310610e635780518252601f199092019160209182019101610e44565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f6002600183161590980290950116959095049283018290048202880182019052818752929450925050830182828015610f175780601f10610eec57610100808354040283529160200191610f17565b820191906000526020600020905b815481529060010190602001808311610efa57829003601f168201915b5050505050905092915050565b610f2c612a80565b506040805160a0810182526000808252602080830182905283518082018552828152838501528351808201855282815260608401528351908101909352825260808101919091525b90565b60606000606083600160a060020a031663fc0c546a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b505050506040513d6020811015610fe557600080fd5b505160408051600380825260808201909252919350816020015b611007612aad565b815260200190600190039081610fff57905050905060a0604051908101604052806001151581526020016040805190810160405280600981526020017f707572636861736572000000000000000000000000000000000000000000000081525081526020016040805190810160405280600781526020017f616464726573730000000000000000000000000000000000000000000000000081525081526020016001876040518082805190602001908083835b602083106110d95780518252601f1990920191602091820191016110ba565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520858201825260098087527f707572636861736572000000000000000000000000000000000000000000000093870193845291519095945092508291908083835b602083106111645780518252601f199092019160209182019101611145565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f60026001831615909802909501169590950492830182900482028801820190528187529294509250508301828280156112185780601f106111ed57610100808354040283529160200191611218565b820191906000526020600020905b8154815290600101906020018083116111fb57829003601f168201915b5050505050815260200161122a610f24565b905281518290600090811061123b57fe5b9060200190602002018190525060a0604051908101604052806001151581526020016040805190810160405280600d81526020017f657468735f696e7665737465640000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017f657468000000000000000000000000000000000000000000000000000000000081525081526020016001876040518082805190602001908083835b602083106113055780518252601f1990920191602091820191016112e6565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600d8087527f657468735f696e7665737465640000000000000000000000000000000000000093870193845291519095945092508291908083835b602083106113905780518252601f199092019160209182019101611371565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f60026001831615909802909501169590950492830182900482028801820190528187529294509250508301828280156114445780601f1061141957610100808354040283529160200191611444565b820191906000526020600020905b81548152906001019060200180831161142757829003601f168201915b50505050508152602001611456610f24565b905281518290600190811061146757fe5b9060200190602002018190525060a0604051908101604052806001151581526020016040805190810160405280601081526020017f746f6b656e735f70757263686173656400000000000000000000000000000000815250815260200161158e61154461153f86600160a060020a031663313ce5676040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561150b57600080fd5b505af115801561151f573d6000803e3d6000fd5b505050506040513d602081101561153557600080fd5b505160ff16611d90565b611eef565b6115826040805190810160405280600581526020017f746f6b656e000000000000000000000000000000000000000000000000000000815250611eef565b9063ffffffff611f1816565b81526020016001876040518082805190602001908083835b602083106115c55780518252601f1990920191602091820191016115a6565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520858201825260108087527f746f6b656e735f7075726368617365640000000000000000000000000000000093870193845291519095945092508291908083835b602083106116505780518252601f199092019160209182019101611631565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f60026001831615909802909501169590950492830182900482028801820190528187529294509250508301828280156117045780601f106116d957610100808354040283529160200191611704565b820191906000526020600020905b8154815290600101906020018083116116e757829003601f168201915b50505050508152602001611716610f24565b905281518290600290811061172757fe5b6020908102909101015291505092915050565b606080600080606085600160a060020a031663580c2ae96040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561178057600080fd5b505af1158015611794573d6000803e3d6000fd5b505050506040513d60208110156117aa57600080fd5b50516040805182815260208084028201019091529080156117df57816020015b60608152602001906001900390816117ca5790505b509350600092505b8351831015611aab5785600160a060020a03166391c62b79846040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561183957600080fd5b505af115801561184d573d6000803e3d6000fd5b505050506040513d602081101561186357600080fd5b505160408051808201909152600e81527f7b22707572636861736572223a22000000000000000000000000000000000000602082015290925090506118bf6118b661153f600160a060020a038516611f8f565b61158283611eef565b90506119026118b66040805190810160405280601281526020017f222c22657468735f696e766573746564223a0000000000000000000000000000815250611eef565b90506119996118b661153f88600160a060020a031663cf7c2b31866040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561196857600080fd5b505af115801561197c573d6000803e3d6000fd5b505050506040513d602081101561199257600080fd5b5051611d90565b90506119dc6118b66040805190810160405280601481526020017f2c22746f6b656e735f707572636861736564223a000000000000000000000000815250611eef565b9050611a426118b661153f88600160a060020a03166397b150ca866040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561196857600080fd5b9050611a856118b66040805190810160405280600181526020017f7d00000000000000000000000000000000000000000000000000000000000000815250611eef565b9050808484815181101515611a9657fe5b602090810290910101526001909201916117e7565b509195945050505050565b60408051808201909152600a81527f7b227469746c65223a22000000000000000000000000000000000000000000006020820152815160609190600090611b0990611b0090611eef565b61158284611eef565b9150611b4c611b006040805190810160405280600f81526020017f222c2273686f727444657363223a220000000000000000000000000000000000815250611eef565b9150611b5e611b008560200151611eef565b9150611ba1611b006040805190810160405280600e81526020017f222c226c6f6e6744657363223a22000000000000000000000000000000000000815250611eef565b9150611bb3611b008560400151611eef565b9150611bf6611b006040805190810160405280600a81526020017f222c227769647468223a00000000000000000000000000000000000000000000815250611eef565b9150611c0b611b0061153f8660600151611d90565b9150611c4e611b006040805190810160405280600d81526020017f2c22656c656d656e7473223a5b00000000000000000000000000000000000000815250611eef565b9150600090505b836080015151811015611cca576000811115611c9657611c93611b0060408051908101604052806001815260200160fa60020a600b02815250611eef565b91505b611cc0611b0061153f866080015184815181101515611cb157fe5b906020019060200201516120d2565b9150600101611c55565b611d0b611b006040805190810160405280600281526020017f5d7d000000000000000000000000000000000000000000000000000000000000815250611eef565b949350505050565b600160a060020a0381161515611d2857600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60608060008181851515611dd95760408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201529450611ee6565b6040805160208082528183019092529080820161040080388339019050509350600092505b6000861115611e4b57600a860660300160f860020a028484815181101515611e2257fe5b906020010190600160f860020a031916908160001a905350600a86049550600190920191611dfe565b60408051848152601f19601f86011681016020019091526000198401938015611e7e578160200160208202803883390190505b509150600090505b8151811015611ee257835160001984019385918110611ea157fe5b90602001015160f860020a900460f860020a028282815181101515611ec257fe5b906020010190600160f860020a031916908160001a905350600101611e86565b8194505b50505050919050565b611ef7612ae0565b50604080518082019091528151815260208281019082018190525b50919050565b606080600083600001518560000151016040519080825280601f01601f191660200182016040528015611f55578160200160208202803883390190505b509150602082019050611f7181866020015187600001516123b7565b845160208501518551611f8792840191906123b7565b509392505050565b60408051602a80825260608083019093528291600091829182916020820161054080388339505081519195507f3000000000000000000000000000000000000000000000000000000000000000918691506000908110611feb57fe5b906020010190600160f860020a031916908160001a90535083517f7800000000000000000000000000000000000000000000000000000000000000908590600190811061203457fe5b906020010190600160f860020a031916908160001a905350859250600091505b60288210156120c857506030600f8316016039600160a060020a038216111561207b576027015b8060f860020a02848360280360010181518110151561209657fe5b906020010190600160f860020a031916908160001a9053506010600160a060020a038416049250600190910190612054565b5091949350505050565b60608082600001511561237c576040805190810160405280600781526020017f7b226964223a220000000000000000000000000000000000000000000000000081525090506121276118b68460200151611eef565b905061216a6118b66040805190810160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250611eef565b60a084015151909150156121d1576121b96118b66040805190810160405280600b81526020017f2c2022616374696f6e223a000000000000000000000000000000000000000000815250611eef565b90506121ce6118b661153f8560a001516123fb565b90505b60c083015151156122355761221d6118b66040805190810160405280600a81526020017f2c20227461626c65223a00000000000000000000000000000000000000000000815250611eef565b90506122326118b661153f8560c0015161259e565b90505b6122766118b66040805190810160405280600981526020017f2c2274797065223a220000000000000000000000000000000000000000000000815250611eef565b90506122886118b68460400151611eef565b90506122cb6118b66040805190810160405280600b81526020017f222c226c6162656c223a22000000000000000000000000000000000000000000815250611eef565b90506122dd6118b68460600151611eef565b90506123206118b66040805190810160405280600981526020017f222c2264617461223a0000000000000000000000000000000000000000000000815250611eef565b90506123326118b68460800151611eef565b90506123756118b66040805190810160405280600181526020017f7d00000000000000000000000000000000000000000000000000000000000000815250611eef565b9150611f12565b60408051808201909152600481527f6e756c6c0000000000000000000000000000000000000000000000000000000060208201529150611f12565b60005b602082106123dc578251845260209384019390920191601f19909101906123ba565b50905182516020929092036101000a6000190180199091169116179052565b60608082600001511561237c576040805190810160405280600c81526020017f7b2261646472657373223a220000000000000000000000000000000000000000815250905061245c6118b661153f8560200151600160a060020a0316611f8f565b905061249f6118b66040805190810160405280601681526020017f222c2266756e6374696f6e53656c6563746f72223a2200000000000000000000815250611eef565b90506124b16118b68460400151611eef565b90506124f46118b66040805190810160405280600e81526020017f222c22617267756d656e7473223a000000000000000000000000000000000000815250611eef565b90506125066118b68460600151611eef565b90506125496118b66040805190810160405280600c81526020017f2c22636f6e6669726d223a220000000000000000000000000000000000000000815250611eef565b905061255b6118b68460800151611eef565b90506123756118b66040805190810160405280600281526020017f227d000000000000000000000000000000000000000000000000000000000000815250611eef565b60608060008084600001511561277657505060408051808201909152600c81527f7b22636f6c756d6e73223a5b0000000000000000000000000000000000000000602082015290506000805b84602001515181101561266c5760008211156126345761263161262860408051908101604052806001815260200160fa60020a600b02815250611eef565b61158285611eef565b92505b61265e61262861153f87602001518481518110151561264f57fe5b906020019060200201516127b5565b9250600191820191016125ea565b6126ad6126286040805190810160405280600a81526020017f5d2c22726f7773223a5b00000000000000000000000000000000000000000000815250611eef565b925060009150600090505b84604001515181101561272e5760008211156126f9576126f661262860408051908101604052806001815260200160fa60020a600b02815250611eef565b92505b61272061262886604001518381518110151561271157fe5b90602001906020020151611eef565b9250600191820191016126b8565b61276f6126286040805190810160405280600281526020017f5d7d000000000000000000000000000000000000000000000000000000000000815250611eef565b93506127ad565b60408051808201909152600481527f6e756c6c00000000000000000000000000000000000000000000000000000000602082015293505b505050919050565b60608082600001511561237c576040805190810160405280600781526020017f7b226964223a2200000000000000000000000000000000000000000000000000815250905061280a6118b68460200151611eef565b905061284d6118b66040805190810160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250611eef565b608084015151909150156128de576128836118b660408051908101604052806001815260200160fa60020a600b02815250611eef565b90506128c66118b66040805190810160405280600981526020017f22616374696f6e223a0000000000000000000000000000000000000000000000815250611eef565b90506128db6118b661153f85608001516123fb565b90505b61291f6118b66040805190810160405280600981526020017f2c2274797065223a220000000000000000000000000000000000000000000000815250611eef565b90506129316118b68460400151611eef565b90506129746118b66040805190810160405280600b81526020017f222c226c6162656c223a22000000000000000000000000000000000000000000815250611eef565b905061255b6118b68460600151611eef565b60a06040519081016040528060608152602001606081526020016060815260200160008152602001606081525090565b6101a060405190810160405280600015158152602001606081526020016060815260200160608152602001606081526020016129f0612a80565b81526020016129fd612af7565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a4357805160ff1916838001178555612a70565b82800160010185558215612a70579182015b82811115612a70578251825591602001919060010190612a55565b50612a7c929150612b1b565b5090565b6040805160a081018252600080825260208201526060918101829052818101829052608081019190915290565b610120604051908101604052806000151581526020016060815260200160608152602001606081526020016129fd612a80565b604080518082019091526000808252602082015290565b60606040519081016040528060001515815260200160608152602001606081525090565b610f7491905b80821115612a7c5760008155600101612b2156007075726368617365727300000000000000000000000000000000000000000000a165627a7a723058200d99410b56dcae7bd15f43f42f3a068684c0f0078340bcea8046fe90c33f68920029",
  "sourceMap": "257:2958:6:-;;;567:5:35;:18;;-1:-1:-1;;;;;;567:18:35;575:10;567:18;;;257:2958:6;;;;;;",
  "deployedSourceMap": "257:2958:6:-;;;;;;;;;-1:-1:-1;;;257:2958:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;454:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;454:48:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;454:48:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;666:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;666:54:6;;;;1001:111:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1001:111:35;;;;;;508:48:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;508:48:6;;;;238:20:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:35;;;;;;;;-1:-1:-1;;;;;238:20:35;;;;;;;;;;;;;;562:46:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;562:46:6;;;;614;;8:9:-1;5:2;;;30:1;27;20:12;5:2;614:46:6;;;;793:709;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;793:709:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;793:709:6;;-1:-1:-1;;;793:709:6;;-1:-1:-1;;;;;793:709:6;;-1:-1:-1;793:709:6;;-1:-1:-1;;;793:709:6;726:60;;8:9:-1;5:2;;;30:1;27;20:12;5:2;726:60:6;;;;186:126:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;186:126:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;186:126:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;186:126:28;;;;-1:-1:-1;186:126:28;-1:-1:-1;186:126:28;;-1:-1:-1;186:126:28;;;;;;;;-1:-1:-1;;186:126:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;186:126:28;;;;-1:-1:-1;186:126:28;-1:-1:-1;186:126:28;;-1:-1:-1;186:126:28;;;;;;;;-1:-1:-1;186:126:28;;-1:-1:-1;186:126:28;;-1:-1:-1;;;;;;;186:126:28;1274:103:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1274:103:35;-1:-1:-1;;;;;1274:103:35;;;;;318:120:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;318:120:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;318:120:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;318:120:28;;;;-1:-1:-1;318:120:28;-1:-1:-1;318:120:28;;-1:-1:-1;318:120:28;;;;;;;;-1:-1:-1;318:120:28;;-1:-1:-1;318:120:28;;-1:-1:-1;;;;;;;318:120:28;454:48:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;454:48:6;;;;;:::o;666:54::-;;;;;;;;;;;;;;;;;;;:::o;1001:111:35:-;719:5;;-1:-1:-1;;;;;719:5:35;705:10;:19;697:28;;;;;;1077:5;;;1058:25;;-1:-1:-1;;;;;1077:5:35;;;;1058:25;;;1105:1;1089:18;;-1:-1:-1;;1089:18:35;;;1001:111::o;508:48:6:-;;;;;;;;;;;;;;;;;;;:::o;238:20:35:-;;;-1:-1:-1;;;;;238:20:35;;:::o;562:46:6:-;;;;;;;;;;;;;;;;;;;:::o;614:::-;;;;;;;;;;;;;;;;;;;:::o;793:709::-;863:6;881:34;1240:28;;:::i;:::-;918:25;;;941:1;918:25;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;881:62;;967:263;;;;;;;;;997:4;967:263;;;;;;1015:10;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1015:10:6;;;967:263;;;;;;;;;;;;;;;;;;;;;;;;;;1060:9;1070:7;1060:18;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1060:18:6;;;;;-1:-1:-1;1060:18:6;;;;;;;;;;;1079:10;;;;;;;;;-1:-1:-1;;;;;;;;;;;1079:10:6;;;;;;1060:30;;:18;;;-1:-1:-1;1060:30:6;-1:-1:-1;1060:30:6;;1079:10;;1060:30;1079:10;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;;;246:30;;340:21;;;311:9;;295:26;;;;377:20;;;;365:33;;;1060:30:6;;;;;;;;;;;;;;;;;;967:263;;;;274:1:-1;967:263:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1060:30;;-1:-1:-1;967:263:6;-1:-1:-1;;967:263:6;;1060:30;967:263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1124:15;:13;:15::i;:::-;967:263;;;;1153:67;;;;;;;;;1166:4;1153:67;;;;;;1172:24;1181:7;1190:5;1172:8;:24::i;:::-;1153:67;;;;1198:21;1204:7;1213:5;1198;:21::i;:::-;1153:67;;967:263;;953:11;;:8;;962:1;;953:11;;;;;;;;;;;;;:277;;;;1271:192;;;;;;;;;1299:9;1309:7;1299:18;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1299:18:6;;;;;-1:-1:-1;1299:18:6;;;;;;;;;;;1318:10;;;;;;;;;-1:-1:-1;;;;;;;;;;;1318:10:6;;;;;;1299:30;;:18;;;-1:-1:-1;1299:30:6;-1:-1:-1;1299:30:6;;1318:10;;1299:30;1318:10;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;;;246:30;;340:21;;;311:9;;295:26;;;;377:20;;;;365:33;;;1299:30:6;;;;;;;;;;;;;;;;;;1271:192;;;;274:1:-1;1271:192:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1299:30;;-1:-1:-1;1271:192:6;-1:-1:-1;;1271:192:6;;1299:30;1271:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1343:9;1353:7;1343:18;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1343:18:6;;;;;-1:-1:-1;1343:18:6;;;;;;;;;;;1362:10;;;;;;;;;;;;;;;;1343:30;;:18;;;-1:-1:-1;1343:30:6;-1:-1:-1;1343:30:6;;1362:10;;1343:30;1362:10;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;;;246:30;;340:21;;;311:9;;295:26;;;;377:20;;;;365:33;;;1343:30:6;;;;;;;;;;;;;;;;;;1271:192;;;;274:1:-1;1271:192:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1343:30;;-1:-1:-1;1271:192:6;-1:-1:-1;;1271:192:6;;1343:30;1271:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1387:9;1397:7;1387:18;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1387:18:6;;;;;-1:-1:-1;1387:18:6;;;;;;;;;;;1406:9;;;;;;;;;;;;;;;;1387:29;;:18;;;-1:-1:-1;1387:29:6;-1:-1:-1;1387:29:6;;1406:9;;1387:29;1406:9;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;;;246:30;;340:21;;;311:9;;295:26;;;;377:20;;;;365:33;;;1387:29:6;;;;;;;;;;;;;;;;;;1271:192;;;;274:1:-1;1271:192:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1387:29;;-1:-1:-1;1271:192:6;-1:-1:-1;;1271:192:6;;1387:29;1271:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1430:1;1271:192;;;;1445:8;1271:192;;;1240:223;;1480:15;:6;:13;:15::i;:::-;1473:22;793:709;-1:-1:-1;;;;;793:709:6:o;726:60::-;;;;;;;;;;;;;;;;;;;:::o;186:126:28:-;719:5:35;;-1:-1:-1;;;;;719:5:35;705:10;:19;697:28;;;;;;300:5:28;275:9;285:6;275:17;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;275:17:28;;;;;-1:-1:-1;275:17:28;;;;;;;;;;:22;;:17;;:22;;-1:-1:-1;275:17:28;-1:-1:-1;275:17:28;;:22;;;;:17;:22;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;275:22:28;;;;;-1:-1:-1;275:22:28;;;;;;;;;;;:30;;;;:22;;:30;;;;;-1:-1:-1;275:30:28;-1:-1:-1;275:30:28;:::i;:::-;;186:126;;;:::o;1274:103:35:-;719:5;;-1:-1:-1;;;;;719:5:35;705:10;:19;697:28;;;;;;1343:29;1362:9;1343:18;:29::i;:::-;1274:103;:::o;318:120:28:-;384:6;409:9;419:6;409:17;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;409:17:28;;;;;-1:-1:-1;409:17:28;;;;;;;;;;:22;;:17;;:22;;-1:-1:-1;409:17:28;-1:-1:-1;409:17:28;;:22;;;;:17;:22;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;;;246:30;;340:21;;;311:9;;295:26;;;;377:20;;;;365:33;;;409:22:28;;;;;;;;;;;;;;;;;;402:29;;;;274:1:-1;402:29:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;409:22;;-1:-1:-1;402:29:28;-1:-1:-1;;402:29:28;;409:22;402:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;318:120;;;;:::o;329:116:26:-;369:6;;:::i;:::-;-1:-1:-1;401:37:26;;;;;;;;-1:-1:-1;401:37:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;329:116;;:::o;1508:873:6:-;1581:15;1608:19;1668:30;1644:5;-1:-1:-1;;;;;1644:11:6;;:13;;;;;-1:-1:-1;;;1644:13:6;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1644:13:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1644:13:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1644:13:6;1701:22;;;1721:1;1701:22;;;;;;;;;1644:13;;-1:-1:-1;1701:22:6;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1668:55;;1746:159;;;;;;;;;1773:4;1746:159;;;;;;1791:9;;;;;;;;;;;;;;;;;;1746:159;;;;;;;;;;;;;;;;;;;;;;;;;;1837:9;1847:7;1837:18;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1837:18:6;;;;;-1:-1:-1;1837:18:6;;;;;;;;;;;1856:9;;;;;;;;;;;;;;;;1837:29;;:18;;;-1:-1:-1;1837:29:6;-1:-1:-1;1837:29:6;;1856:9;;1837:29;1856:9;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;;;246:30;;340:21;;;311:9;;295:26;;;;377:20;;;;365:33;;;1837:29:6;;;;;;;;;;;;;;;;;;1746:159;;;;274:1:-1;1746:159:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1837:29;;-1:-1:-1;1746:159:6;-1:-1:-1;;1746:159:6;;1837:29;1746:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1880:15;:13;:15::i;:::-;1746:159;;1733:10;;:7;;1741:1;;1733:10;;;;;;;;;;;;;:172;;;;1928:163;;;;;;;;;1955:4;1928:163;;;;;;1973:13;;;;;;;;;;;;;;;;;;1928:163;;;;;;;;;;;;;;;;;;;;;;;;;;2019:9;2029:7;2019:18;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;2019:18:6;;;;;-1:-1:-1;2019:18:6;;;;;;;;;;;2038:13;;;;;;;;;;;;;;;;2019:33;;:18;;;-1:-1:-1;2019:33:6;-1:-1:-1;2019:33:6;;2038:13;;2019:33;2038:13;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;;;246:30;;340:21;;;311:9;;295:26;;;;377:20;;;;365:33;;;2019::6;;;;;;;;;;;;;;;;;;1928:163;;;;274:1:-1;1928:163:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2019:33;;-1:-1:-1;1928:163:6;-1:-1:-1;;1928:163:6;;2019:33;1928:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2066:15;:13;:15::i;:::-;1928:163;;1915:10;;:7;;1923:1;;1915:10;;;;;;;;;;;;;:176;;;;2114:236;;;;;;;;;2141:4;2114:236;;;;;;2159:16;;;;;;;;;;;;;;;;;;2114:236;;;;2189:72;2214:46;:36;2222:5;-1:-1:-1;;;;;2222:14:6;;:16;;;;;-1:-1:-1;;;2222:16:6;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2222:16:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2222:16:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2222:16:6;2214:25;;:34;:36::i;:::-;:44;:46::i;:::-;2189:17;:15;;;;;;;;;;;;;;;;;;;:17::i;:::-;:24;:72;:24;:72;:::i;:::-;2114:236;;;;2275:9;2285:7;2275:18;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;2275:18:6;;;;;-1:-1:-1;2275:18:6;;;;;;;;;;;2294:16;;;;;;;;;;;;;;;;2275:36;;:18;;;-1:-1:-1;2275:36:6;-1:-1:-1;2275:36:6;;2294:16;;2275:36;2294:16;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;;;246:30;;340:21;;;311:9;;295:26;;;;377:20;;;;365:33;;;2275:36:6;;;;;;;;;;;;;;;;;;2114:236;;;;274:1:-1;2114:236:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2275:36;;-1:-1:-1;2114:236:6;-1:-1:-1;;2114:236:6;;2275:36;2114:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2325:15;:13;:15::i;:::-;2114:236;;2101:10;;:7;;2109:1;;2101:10;;;;;;;;;;;;;;:249;2367:7;-1:-1:-1;1508:873:6;;;;;:::o;2387:826::-;2457:8;2477:20;2555:6;2603:17;2657;2513:5;-1:-1:-1;;;;;2513:24:6;;:26;;;;;-1:-1:-1;;;2513:26:6;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2513:26:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2513:26:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2513:26:6;2500:40;;;;;;2513:26;2500:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2477:63;;2564:1;2555:10;;2550:636;2571:4;:11;2567:1;:15;2550:636;;;2623:5;-1:-1:-1;;;;;2623:17:6;;2641:1;2623:20;;;;;-1:-1:-1;;;2623:20:6;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2623:20:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2623:20:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2623:20:6;2657:36;;;;;;;;;;;;;2623:20;2657:36;;;2623:20;;-1:-1:-1;2657:36:6;-1:-1:-1;2713:52:6;2734:30;:20;-1:-1:-1;;;;;2734:18:6;;;:20::i;:30::-;2713:13;:3;:11;:13::i;:52::-;2707:58;;2785:52;2806:30;:28;;;;;;;;;;;;;;;;;;;:30::i;2785:52::-;2779:58;;2857:69;2878:47;:37;:5;-1:-1:-1;;;;;2878:15:6;;2894:9;2878:26;;;;;-1:-1:-1;;;2878:26:6;;;;;;;-1:-1:-1;;;;;2878:26:6;-1:-1:-1;;;;;2878:26:6;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2878:26:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2878:26:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2878:26:6;:35;:37::i;2857:69::-;2851:75;;2946:54;2967:32;:30;;;;;;;;;;;;;;;;;;;:32::i;2946:54::-;2940:60;;3020:73;3041:51;:41;:5;-1:-1:-1;;;;;3041:19:6;;3061:9;3041:30;;;;;-1:-1:-1;;;3041:30:6;;;;;;;-1:-1:-1;;;;;3041:30:6;-1:-1:-1;;;;;3041:30:6;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;3020:73:6;3014:79;;3113:35;3134:13;:11;;;;;;;;;;;;;;;;;;;:13::i;3113:35::-;3107:41;;3172:3;3162:4;3167:1;3162:7;;;;;;;;;;;;;;;;;;:13;2584:3;;;;;2550:636;;;-1:-1:-1;3202:4:6;;2387:826;-1:-1:-1;;;;;2387:826:6:o;392:943:31:-;470:33;;;;;;;;;;;;;;;;;542:11;;452:6;;470:33;1040:6;;520:44;;542:21;;:19;:21::i;:::-;520:14;:4;:12;:14::i;:44::-;513:51;;581:50;603:27;:25;;;;;;;;;;;;;;;;;;;:27::i;581:50::-;574:57;;648:48;670:25;:5;:15;;;:23;:25::i;648:48::-;641:55;;713:49;735:26;:24;;;;;;;;;;;;;;;;;;;:26::i;713:49::-;706:56;;779:47;801:24;:5;:14;;;:22;:24::i;779:47::-;772:54;;843:45;865:22;:20;;;;;;;;;;;;;;;;;;;:22::i;843:45::-;836:52;;905:55;927:32;:22;:5;:11;;;:20;:22::i;905:55::-;898:62;;977:48;999:25;:23;;;;;;;;;;;;;;;;;;;:25::i;977:48::-;970:55;;1049:1;1040:10;;1035:240;1056:5;:14;;;:21;1052:1;:25;1035:240;;;1106:1;1102;:5;1098:87;;;1134:36;1156:13;:11;;;;;;;;;;;;;;-1:-1:-1;;;;;1156:11:31;;;;:13::i;1134:36::-;1127:43;;1098:87;1205:59;1227:36;:26;:5;:14;;;1242:1;1227:17;;;;;;;;;;;;;;;;;;:24;:26::i;1205:59::-;1198:66;-1:-1:-1;1079:3:31;;1035:240;;;1291:37;1313:14;:12;;;;;;;;;;;;;;;;;;;:14::i;1291:37::-;1284:44;392:943;-1:-1:-1;;;;392:943:31:o;1512:171:35:-;-1:-1:-1;;;;;1582:23:35;;;;1574:32;;;;;;1638:5;;;1617:38;;-1:-1:-1;;;;;1617:38:35;;;;1638:5;;;1617:38;;;1661:5;:17;;-1:-1:-1;;1661:17:35;-1:-1:-1;;;;;1661:17:35;;;;;;;;;;1512:171::o;50:483:24:-;103:6;;231;103;231;132:10;;128:51;;;158:10;;;;;;;;;;;;;;;;;;-1:-1:-1;158:10:24;;128:51;208:13;;;218:2;208:13;;;;;;;;;;;;;17:15:-1;;105:10;208:13:24;88:34:-1;136:17;;-1:-1;208:13:24;188:33;;256:1;252:5;;247:111;267:1;259:5;:9;247:111;;;313:2;305:5;:10;319:2;304:17;-1:-1:-1;;;299:23:24;289:4;294:1;289:7;;;;;;;;;;;;;;:33;-1:-1:-1;;;;;289:33:24;;;;;;;;-1:-1:-1;345:2:24;336:11;;;-1:-1:-1;270:3:24;;;;;247:111;;;388:14;;;;;;-1:-1:-1;;388:14:24;;;;;;;;;;;-1:-1:-1;;398:3:24;;;388:14;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;388:14:24;;367:35;;426:1;417:10;;412:85;433:5;:12;429:1;:16;412:85;;;477:9;;-1:-1:-1;;482:3:24;;;477:4;;:9;;;;;;;;;;;-1:-1:-1;;;477:9:24;;-1:-1:-1;;;477:9:24;466:5;472:1;466:8;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;466:20:24;;;;;;;;-1:-1:-1;447:3:24;;412:85;;;520:5;506:20;;50:483;;;;;;;;:::o;2837:210:25:-;2897:5;;:::i;:::-;-1:-1:-1;3010:30:25;;;;;;;;;3016:18;;3010:30;;2979:4;2969:15;;;3010:30;;;;;;2837:210;;;;;:::o;23944:355::-;24022:6;24047:17;24111:11;24090:5;:10;;;24078:4;:9;;;:22;24067:34;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;24067:34:25;;24047:54;;24162:2;24157:3;24153:12;24143:22;;24176:36;24183:6;24191:4;:9;;;24202:4;:9;;;24176:6;:36::i;:::-;24238:9;;24249:10;;;;24261;;24222:50;;24229:18;;;24249:10;24222:6;:50::i;:::-;-1:-1:-1;24289:3:25;23944:355;-1:-1:-1;;;23944:355:25:o;206:443:21:-;307:13;;;317:2;307:13;;;262:6;307:13;;;;;;262:6;;387:11;;;;;;307:13;;;17:15:-1;;105:10;307:13:21;88:34:-1;-1:-1;;330:7:21;;287:33;;-1:-1:-1;340:8:21;;287:33;;-1:-1:-1;335:1:21;;330:7;;;;;;;;;;:18;-1:-1:-1;;;;;330:18:21;;;;;;;;-1:-1:-1;358:7:21;;368:9;;358:4;;363:1;;358:7;;;;;;;;;;:19;-1:-1:-1;;;;;358:19:21;;;;;;;;;409:5;387:28;;450:1;446:5;;441:173;457:2;453:1;:6;441:173;;;-1:-1:-1;505:2:21;493:8;;;492:15;529:2;-1:-1:-1;;;;;525:6:21;;;521:19;;;538:2;533:7;521:19;578:1;-1:-1:-1;;;573:7:21;554:4;564:1;559:2;:6;568:1;559:10;554:16;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;554:26:21;;;;;;;;-1:-1:-1;601:2:21;-1:-1:-1;;;;;594:9:21;;;;-1:-1:-1;461:3:21;;;;;441:173;;;-1:-1:-1;637:4:21;;206:443;-1:-1:-1;;;;206:443:21:o;568:1172:27:-;629:6;679:18;651:5;:12;;;647:1087;;;679:30;;;;;;;;;;;;;;;;;;;;730:41;752:18;:5;:8;;;:16;:18::i;730:41::-;723:48;;792:36;814:13;:11;;;;;;;;;;;;;;;;;;;:13::i;792:36::-;846:12;;;;:19;785:43;;-1:-1:-1;842:190:27;;;892:46;914:23;:21;;;;;;;;;;;;;;;;;;;:23::i;892:46::-;885:53;;963:54;985:31;:21;:5;:12;;;:19;:21::i;963:54::-;956:61;;842:190;1049:11;;;;:18;1045:187;;;1094:45;1116:22;:20;;;;;;;;;;;;;;;;;;;:22::i;1094:45::-;1087:52;;1164:53;1186:30;:20;:5;:11;;;:18;:20::i;1164:53::-;1157:60;;1045:187;1252:44;1274:21;:19;;;;;;;;;;;;;;;;;;;:21::i;1252:44::-;1245:51;;1317:44;1339:21;:5;:11;;;:19;:21::i;1317:44::-;1310:51;;1382:46;1404:23;:21;;;;;;;;;;;;;;;;;;;:23::i;1382:46::-;1375:53;;1449:44;1471:21;:5;:11;;;:19;:21::i;1449:44::-;1442:51;;1514:44;1536:21;:19;;;;;;;;;;;;;;;;;;;:21::i;1514:44::-;1507:51;;1579:43;1601:20;:5;:10;;;:18;:20::i;1579:43::-;1572:50;;1643:36;1665:13;:11;;;;;;;;;;;;;;;;;;;:13::i;1643:36::-;1636:43;;;;647:1087;1710:13;;;;;;;;;;;;;;;;;;-1:-1:-1;1710:13:27;;2089:548:25;2415:9;2209:164;2222:2;2215:9;;2209:164;;2291:10;;2278:24;;2337:2;2329:10;;;;2353:9;;;;-1:-1:-1;;2226:9:25;;;;2209:164;;;-1:-1:-1;2500:10:25;;2555:11;;2435:2;:8;;;;2427:3;:17;-1:-1:-1;;2427:21:25;2512:9;;2496:26;;;2551:22;;2599:21;2586:35;;2467:164::o;451:765:26:-;511:6;561:18;533:5;:12;;;529:681;;;561:35;;;;;;;;;;;;;;;;;;;;617:52;639:29;:19;:5;:8;;;-1:-1:-1;;;;;639:17:26;;:19::i;617:52::-;610:59;;690:57;712:34;:32;;;;;;;;;;;;;;;;;;;:34::i;690:57::-;683:64;;768:55;790:32;:5;:22;;;:30;:32::i;768:55::-;761:62;;844:49;866:26;:24;;;;;;;;;;;;;;;;;;;:26::i;844:49::-;837:56;;914:48;936:25;:5;:15;;;:23;:25::i;914:48::-;907:55;;983:47;1005:24;:22;;;;;;;;;;;;;;;;;;;:24::i;983:47::-;976:54;;1051:46;1073:23;:5;:13;;;:21;:23::i;1051:46::-;1044:53;;1118:37;1140:14;:12;;;;;;;;;;;;;;;;;;;:14::i;504:978:30:-;563:6;613:18;662:11;696:6;585:5;:12;;;581:895;;;-1:-1:-1;;613:35:30;;;;;;;;;;;;;;;;;;-1:-1:-1;;;691:298:30;712:5;:13;;;:20;708:1;:24;691:298;;;770:1;761:6;:10;757:100;;;802:36;824:13;:11;;;;;;;;;;;;;;-1:-1:-1;;;;;824:11:30;;;;:13::i;:::-;802:14;:4;:12;:14::i;:36::-;795:43;;757:100;881:64;903:41;:31;917:5;:13;;;931:1;917:16;;;;;;;;;;;;;;;;;;903:13;:31::i;881:64::-;874:71;-1:-1:-1;973:1:30;963:11;;;;734:3;691:298;;;1009:45;1031:22;:20;;;;;;;;;;;;;;;;;;;:22::i;1009:45::-;1002:52;;1077:1;1068:10;;1101:1;1097:5;;1092:272;1108:5;:10;;;:17;1104:1;:21;1092:272;;;1163:1;1154:6;:10;1150:100;;;1195:36;1217:13;:11;;;;;;;;;;;;;;-1:-1:-1;;;;;1217:11:30;;;;:13::i;1195:36::-;1188:43;;1150:100;1274:46;1296:23;:5;:10;;;1307:1;1296:13;;;;;;;;;;;;;;;;;;:21;:23::i;1274:46::-;1267:53;-1:-1:-1;1348:1:30;1338:11;;;;1127:3;1092:272;;;1384:37;1406:14;:12;;;;;;;;;;;;;;;;;;;:14::i;1384:37::-;1377:44;;;;581:895;1452:13;;;;;;;;;;;;;;;;;;-1:-1:-1;581:895:30;504:978;;;;;;:::o;1488:909::-;1555:6;1605:18;1577:5;:12;;;1573:818;;;1605:30;;;;;;;;;;;;;;;;;;;;1656:41;1678:18;:5;:8;;;:16;:18::i;1656:41::-;1649:48;;1718:36;1740:13;:11;;;;;;;;;;;;;;;;;;;:13::i;1718:36::-;1772:12;;;;:19;1711:43;;-1:-1:-1;1768:249:30;;;1818:36;1840:13;:11;;;;;;;;;;;;;;-1:-1:-1;;;;;1840:11:30;;;;:13::i;1818:36::-;1811:43;;1879:44;1901:21;:19;;;;;;;;;;;;;;;;;;;:21::i;1879:44::-;1872:51;;1948:54;1970:31;:21;:5;:12;;;:19;:21::i;1948:54::-;1941:61;;1768:249;2037:44;2059:21;:19;;;;;;;;;;;;;;;;;;;:21::i;2037:44::-;2030:51;;2102:44;2124:21;:5;:11;;;:19;:21::i;2102:44::-;2095:51;;2167:46;2189:23;:21;;;;;;;;;;;;;;;;;;;:23::i;2167:46::-;2160:53;;2234:44;2256:21;:5;:11;;;:19;:21::i;257:2958:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;257:2958:6;;;-1:-1:-1;257:2958:6;:::i;:::-;;;:::o;:::-;;;;;;;;;-1:-1:-1;257:2958:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;257:2958:6;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./ERC20SaleWidgetRenderer.sol\";\nimport \"tokenboost-solidity/contracts/widget/Localizable.sol\";\nimport \"tokenboost-solidity/contracts/widget/Widgets.sol\";\nimport \"zeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol\";\n\ncontract PurchasersWidgetRenderer is ERC20SaleWidgetRenderer {\n    using Widgets for Widgets.Widget;\n    using UintUtils for uint;\n    using AddressUtils for address;\n    using strings for *;\n\n    string public constant PURCHASERS = \"purchasers\";\n    string public constant SHORT_DESC = \"short_desc\";\n    string public constant LONG_DESC = \"long_desc\";\n    string public constant PURCHASER = \"purchaser\";\n    string public constant ETHS_INVESTED = \"eths_invested\";\n    string public constant TOKENS_PURCHASED = \"tokens_purchased\";\n\n    function render(string _locale, ERC20Sale _sale) public view returns (string) {\n        Elements.Element[] memory elements = new Elements.Element[](1);\n        elements[0] = Elements.Element(\n            true,\n            PURCHASERS,\n            \"table\",\n            resources[_locale][PURCHASERS],\n            \"null\",\n            Actions.empty(),\n            Tables.Table(true, _columns(_locale, _sale), _rows(_locale, _sale))\n        );\n        Widgets.Widget memory widget = Widgets.Widget(\n            resources[_locale][PURCHASERS],\n            resources[_locale][SHORT_DESC],\n            resources[_locale][LONG_DESC],\n            8,\n            elements\n        );\n        return widget.toJson();\n    }\n\n    function _columns(string _locale, ERC20Sale _sale) private view returns (Tables.Column[]) {\n        DetailedERC20 token = DetailedERC20(_sale.token());\n        Tables.Column[] memory columns = new Tables.Column[](3);\n        columns[0] = Tables.Column(\n            true,\n            PURCHASER,\n            \"address\",\n            resources[_locale][PURCHASER],\n            Actions.empty()\n        );\n        columns[1] = Tables.Column(\n            true,\n            ETHS_INVESTED,\n            \"eth\",\n            resources[_locale][ETHS_INVESTED],\n            Actions.empty()\n        );\n        columns[2] = Tables.Column(\n            true,\n            TOKENS_PURCHASED,\n            \"token\".toSlice().concat(uint256(token.decimals()).toString().toSlice()),\n            resources[_locale][TOKENS_PURCHASED],\n            Actions.empty()\n        );\n        return columns;\n    }\n\n    function _rows(string _locale, ERC20Sale _sale) private view returns (string[]) {\n        string[] memory rows = new string[](_sale.numberOfPurchasers());\n        for (uint i = 0; i < rows.length; i++) {\n            address purchaser = _sale.purchaserAt(i);\n            string memory row = '{\"purchaser\":\"';\n            row = row.toSlice().concat(purchaser.toString().toSlice());\n            row = row.toSlice().concat('\",\"eths_invested\":'.toSlice());\n            row = row.toSlice().concat(_sale.paymentOf(purchaser).toString().toSlice());\n            row = row.toSlice().concat(',\"tokens_purchased\":'.toSlice());\n            row = row.toSlice().concat(_sale.tokenAmountOf(purchaser).toString().toSlice());\n            row = row.toSlice().concat('}'.toSlice());\n            rows[i] = row;\n        }\n        return rows;\n    }\n}\n",
  "sourcePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/PurchasersWidgetRenderer.sol",
  "ast": {
    "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/PurchasersWidgetRenderer.sol",
    "exportedSymbols": {
      "PurchasersWidgetRenderer": [
        1673
      ]
    },
    "id": 1674,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1320,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:6"
      },
      {
        "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/ERC20SaleWidgetRenderer.sol",
        "file": "./ERC20SaleWidgetRenderer.sol",
        "id": 1321,
        "nodeType": "ImportDirective",
        "scope": 1674,
        "sourceUnit": 1203,
        "src": "26:39:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "tokenboost-solidity/contracts/widget/Localizable.sol",
        "file": "tokenboost-solidity/contracts/widget/Localizable.sol",
        "id": 1322,
        "nodeType": "ImportDirective",
        "scope": 1674,
        "sourceUnit": 5716,
        "src": "66:62:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "tokenboost-solidity/contracts/widget/Widgets.sol",
        "file": "tokenboost-solidity/contracts/widget/Widgets.sol",
        "id": 1323,
        "nodeType": "ImportDirective",
        "scope": 1674,
        "sourceUnit": 6259,
        "src": "129:58:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "zeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol",
        "file": "zeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol",
        "id": 1324,
        "nodeType": "ImportDirective",
        "scope": 1674,
        "sourceUnit": 6534,
        "src": "188:67:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1325,
              "name": "ERC20SaleWidgetRenderer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1202,
              "src": "294:23:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1202",
                "typeString": "contract ERC20SaleWidgetRenderer"
              }
            },
            "id": 1326,
            "nodeType": "InheritanceSpecifier",
            "src": "294:23:6"
          }
        ],
        "contractDependencies": [
          1202,
          5715,
          6499
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1673,
        "linearizedBaseContracts": [
          1673,
          1202,
          5715,
          6499
        ],
        "name": "PurchasersWidgetRenderer",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 1329,
            "libraryName": {
              "contractScope": null,
              "id": 1327,
              "name": "Widgets",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6258,
              "src": "330:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Widgets_$6258",
                "typeString": "library Widgets"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "324:33:6",
            "typeName": {
              "contractScope": null,
              "id": 1328,
              "name": "Widgets.Widget",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6096,
              "src": "342:14:6",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Widget_$6096_storage_ptr",
                "typeString": "struct Widgets.Widget"
              }
            }
          },
          {
            "id": 1332,
            "libraryName": {
              "contractScope": null,
              "id": 1330,
              "name": "UintUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3595,
              "src": "368:9:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UintUtils_$3595",
                "typeString": "library UintUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "362:25:6",
            "typeName": {
              "id": 1331,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "382:4:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 1335,
            "libraryName": {
              "contractScope": null,
              "id": 1333,
              "name": "AddressUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3455,
              "src": "398:12:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AddressUtils_$3455",
                "typeString": "library AddressUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "392:31:6",
            "typeName": {
              "id": 1334,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "415:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 1337,
            "libraryName": {
              "contractScope": null,
              "id": 1336,
              "name": "strings",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5290,
              "src": "434:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_strings_$5290",
                "typeString": "library strings"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "428:20:6",
            "typeName": null
          },
          {
            "constant": true,
            "id": 1340,
            "name": "PURCHASERS",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "454:48:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1338,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "454:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "70757263686173657273",
              "id": 1339,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "490:12:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_1260b08910b76b8da549a9b7624376eca0a915c1fdbfd92c6c1f99d36a6b6a4f",
                "typeString": "literal_string \"purchasers\""
              },
              "value": "purchasers"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 1343,
            "name": "SHORT_DESC",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "508:48:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1341,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "508:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "73686f72745f64657363",
              "id": 1342,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "544:12:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_94c241f8e931f92c2d4b9c8bf91f277610ffbc69f83ddd91d5e8535e49fe7894",
                "typeString": "literal_string \"short_desc\""
              },
              "value": "short_desc"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 1346,
            "name": "LONG_DESC",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "562:46:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1344,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "562:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6c6f6e675f64657363",
              "id": 1345,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "597:11:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_a47709c5db6426dae60658aa3fe6818a09dac224ef85f317a31b897413052755",
                "typeString": "literal_string \"long_desc\""
              },
              "value": "long_desc"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 1349,
            "name": "PURCHASER",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "614:46:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1347,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "614:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "707572636861736572",
              "id": 1348,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "649:11:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_5cd9763eb0769e05e47a6515df0fedff76d312b6727c9aef2e804b125f56ae63",
                "typeString": "literal_string \"purchaser\""
              },
              "value": "purchaser"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 1352,
            "name": "ETHS_INVESTED",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "666:54:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1350,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "666:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "657468735f696e766573746564",
              "id": 1351,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "705:15:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_31e88b7b2704896411d3d882563f5ac8d0ea58f0e49c2a9cc61e4e0e906763bf",
                "typeString": "literal_string \"eths_invested\""
              },
              "value": "eths_invested"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 1355,
            "name": "TOKENS_PURCHASED",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "726:60:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1353,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "726:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "746f6b656e735f707572636861736564",
              "id": 1354,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "768:18:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f36e26426112ae1ef585224654b69da78e707c1a79d4bfc46ba246e2be5c153c",
                "typeString": "literal_string \"tokens_purchased\""
              },
              "value": "tokens_purchased"
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 1436,
              "nodeType": "Block",
              "src": "871:631:6",
              "statements": [
                {
                  "assignments": [
                    1368
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1368,
                      "name": "elements",
                      "nodeType": "VariableDeclaration",
                      "scope": 1437,
                      "src": "881:34:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Element_$5466_memory_$dyn_memory_ptr",
                        "typeString": "struct Elements.Element[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1366,
                          "name": "Elements.Element",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 5466,
                          "src": "881:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Element_$5466_storage_ptr",
                            "typeString": "struct Elements.Element"
                          }
                        },
                        "id": 1367,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "881:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Element_$5466_storage_$dyn_storage_ptr",
                          "typeString": "struct Elements.Element[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1374,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "941:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 1371,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "918:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_Element_$5466_memory_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (struct Elements.Element memory[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1369,
                          "name": "Elements.Element",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 5466,
                          "src": "922:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Element_$5466_storage_ptr",
                            "typeString": "struct Elements.Element"
                          }
                        },
                        "id": 1370,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "922:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Element_$5466_storage_$dyn_storage_ptr",
                          "typeString": "struct Elements.Element[]"
                        }
                      }
                    },
                    "id": 1373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "918:25:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Element_$5466_memory_$dyn_memory",
                      "typeString": "struct Elements.Element memory[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "881:62:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1375,
                        "name": "elements",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1368,
                        "src": "953:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Element_$5466_memory_$dyn_memory_ptr",
                          "typeString": "struct Elements.Element memory[] memory"
                        }
                      },
                      "id": 1377,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1376,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "962:1:6",
                        "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": "953:11:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Element_$5466_memory",
                        "typeString": "struct Elements.Element memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "997:4:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        {
                          "argumentTypes": null,
                          "id": 1381,
                          "name": "PURCHASERS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1340,
                          "src": "1015:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "7461626c65",
                          "id": 1382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1039:7:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_5cda47eec2b53757468f49f12e982f8bbff34a8fd216f10c6b56da16e54e4749",
                            "typeString": "literal_string \"table\""
                          },
                          "value": "table"
                        },
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1383,
                              "name": "resources",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5678,
                              "src": "1060:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                                "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                              }
                            },
                            "id": 1385,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1384,
                              "name": "_locale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1357,
                              "src": "1070:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1060:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                              "typeString": "mapping(string memory => string storage ref)"
                            }
                          },
                          "id": 1387,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1386,
                            "name": "PURCHASERS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1340,
                            "src": "1079:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1060:30:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "6e756c6c",
                          "id": 1388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1104:6:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_efbde2c3aee204a69b7696d4b10ff31137fe78e3946306284f806e2dfc68b805",
                            "typeString": "literal_string \"null\""
                          },
                          "value": "null"
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1389,
                              "name": "Actions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5438,
                              "src": "1124:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Actions_$5438_$",
                                "typeString": "type(library Actions)"
                              }
                            },
                            "id": 1390,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "empty",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5326,
                            "src": "1124:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Action_$5310_memory_ptr_$",
                              "typeString": "function () pure returns (struct Actions.Action memory)"
                            }
                          },
                          "id": 1391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1124:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 1394,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1166:4:6",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1396,
                                  "name": "_locale",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1357,
                                  "src": "1181:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1397,
                                  "name": "_sale",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1359,
                                  "src": "1190:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                    "typeString": "contract ERC20Sale"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                    "typeString": "contract ERC20Sale"
                                  }
                                ],
                                "id": 1395,
                                "name": "_columns",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1539,
                                "src": "1172:8:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$444_$returns$_t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr_$",
                                  "typeString": "function (string memory,contract ERC20Sale) view returns (struct Tables.Column memory[] memory)"
                                }
                              },
                              "id": 1398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1172:24:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                                "typeString": "struct Tables.Column memory[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1400,
                                  "name": "_locale",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1357,
                                  "src": "1204:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1401,
                                  "name": "_sale",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1359,
                                  "src": "1213:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                    "typeString": "contract ERC20Sale"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                    "typeString": "contract ERC20Sale"
                                  }
                                ],
                                "id": 1399,
                                "name": "_rows",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1672,
                                "src": "1198:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$444_$returns$_t_array$_t_string_memory_$dyn_memory_ptr_$",
                                  "typeString": "function (string memory,contract ERC20Sale) view returns (string memory[] memory)"
                                }
                              },
                              "id": 1402,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1198:21:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                                "typeString": "string memory[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                                "typeString": "struct Tables.Column memory[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                                "typeString": "string memory[] memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1392,
                              "name": "Tables",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6071,
                              "src": "1153:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Tables_$6071_$",
                                "typeString": "type(library Tables)"
                              }
                            },
                            "id": 1393,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "Table",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5767,
                            "src": "1153:12:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_Table_$5767_storage_ptr_$",
                              "typeString": "type(struct Tables.Table storage pointer)"
                            }
                          },
                          "id": 1403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1153:67:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Table_$5767_memory",
                            "typeString": "struct Tables.Table memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_5cda47eec2b53757468f49f12e982f8bbff34a8fd216f10c6b56da16e54e4749",
                            "typeString": "literal_string \"table\""
                          },
                          {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_efbde2c3aee204a69b7696d4b10ff31137fe78e3946306284f806e2dfc68b805",
                            "typeString": "literal_string \"null\""
                          },
                          {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_Table_$5767_memory",
                            "typeString": "struct Tables.Table memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1378,
                          "name": "Elements",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5667,
                          "src": "967:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Elements_$5667_$",
                            "typeString": "type(library Elements)"
                          }
                        },
                        "id": 1379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "Element",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5466,
                        "src": "967:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Element_$5466_storage_ptr_$",
                          "typeString": "type(struct Elements.Element storage pointer)"
                        }
                      },
                      "id": 1404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "967:263:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Element_$5466_memory",
                        "typeString": "struct Elements.Element memory"
                      }
                    },
                    "src": "953:277:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Element_$5466_memory",
                      "typeString": "struct Elements.Element memory"
                    }
                  },
                  "id": 1406,
                  "nodeType": "ExpressionStatement",
                  "src": "953:277:6"
                },
                {
                  "assignments": [
                    1410
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1410,
                      "name": "widget",
                      "nodeType": "VariableDeclaration",
                      "scope": 1437,
                      "src": "1240:28:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Widget_$6096_memory_ptr",
                        "typeString": "struct Widgets.Widget"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1409,
                        "name": "Widgets.Widget",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6096,
                        "src": "1240:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Widget_$6096_storage_ptr",
                          "typeString": "struct Widgets.Widget"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1431,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1413,
                            "name": "resources",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5678,
                            "src": "1299:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                              "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                            }
                          },
                          "id": 1415,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1414,
                            "name": "_locale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1357,
                            "src": "1309:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1299:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                            "typeString": "mapping(string memory => string storage ref)"
                          }
                        },
                        "id": 1417,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1416,
                          "name": "PURCHASERS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1340,
                          "src": "1318:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1299:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1418,
                            "name": "resources",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5678,
                            "src": "1343:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                              "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                            }
                          },
                          "id": 1420,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1419,
                            "name": "_locale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1357,
                            "src": "1353:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1343:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                            "typeString": "mapping(string memory => string storage ref)"
                          }
                        },
                        "id": 1422,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1421,
                          "name": "SHORT_DESC",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1343,
                          "src": "1362:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1343:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1423,
                            "name": "resources",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5678,
                            "src": "1387:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                              "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                            }
                          },
                          "id": 1425,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1424,
                            "name": "_locale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1357,
                            "src": "1397:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1387:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                            "typeString": "mapping(string memory => string storage ref)"
                          }
                        },
                        "id": 1427,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1426,
                          "name": "LONG_DESC",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1346,
                          "src": "1406:9:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1387:29:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "38",
                        "id": 1428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1430:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_8_by_1",
                          "typeString": "int_const 8"
                        },
                        "value": "8"
                      },
                      {
                        "argumentTypes": null,
                        "id": 1429,
                        "name": "elements",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1368,
                        "src": "1445:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Element_$5466_memory_$dyn_memory_ptr",
                          "typeString": "struct Elements.Element memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_rational_8_by_1",
                          "typeString": "int_const 8"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_Element_$5466_memory_$dyn_memory_ptr",
                          "typeString": "struct Elements.Element memory[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1411,
                        "name": "Widgets",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6258,
                        "src": "1271:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Widgets_$6258_$",
                          "typeString": "type(library Widgets)"
                        }
                      },
                      "id": 1412,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "Widget",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6096,
                      "src": "1271:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Widget_$6096_storage_ptr_$",
                        "typeString": "type(struct Widgets.Widget storage pointer)"
                      }
                    },
                    "id": 1430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1271:192:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Widget_$6096_memory",
                      "typeString": "struct Widgets.Widget memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1240:223:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1432,
                        "name": "widget",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1410,
                        "src": "1480:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Widget_$6096_memory_ptr",
                          "typeString": "struct Widgets.Widget memory"
                        }
                      },
                      "id": 1433,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toJson",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6257,
                      "src": "1480:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Widget_$6096_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Widget_$6096_memory_ptr_$",
                        "typeString": "function (struct Widgets.Widget memory) pure returns (string memory)"
                      }
                    },
                    "id": 1434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1480:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1363,
                  "id": 1435,
                  "nodeType": "Return",
                  "src": "1473:22:6"
                }
              ]
            },
            "documentation": null,
            "id": 1437,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "render",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1357,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1437,
                  "src": "809:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1356,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "809:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1359,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1437,
                  "src": "825:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1358,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 444,
                    "src": "825:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$444",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "808:33:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 1363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1362,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1437,
                  "src": "863:6:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1361,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "863:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "862:8:6"
            },
            "scope": 1673,
            "src": "793:709:6",
            "stateMutability": "view",
            "superFunction": 1201,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1538,
              "nodeType": "Block",
              "src": "1598:783:6",
              "statements": [
                {
                  "assignments": [
                    1448
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1448,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 1539,
                      "src": "1608:19:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DetailedERC20_$6533",
                        "typeString": "contract DetailedERC20"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1447,
                        "name": "DetailedERC20",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6533,
                        "src": "1608:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DetailedERC20_$6533",
                          "typeString": "contract DetailedERC20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1454,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1450,
                            "name": "_sale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1441,
                            "src": "1644:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Sale_$444",
                              "typeString": "contract ERC20Sale"
                            }
                          },
                          "id": 1451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "token",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32,
                          "src": "1644:11:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$6576_$",
                            "typeString": "function () view external returns (contract ERC20)"
                          }
                        },
                        "id": 1452,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1644:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$6576",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$6576",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 1449,
                      "name": "DetailedERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6533,
                      "src": "1630:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_DetailedERC20_$6533_$",
                        "typeString": "type(contract DetailedERC20)"
                      }
                    },
                    "id": 1453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1630:28:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DetailedERC20_$6533",
                      "typeString": "contract DetailedERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1608:50:6"
                },
                {
                  "assignments": [
                    1459
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1459,
                      "name": "columns",
                      "nodeType": "VariableDeclaration",
                      "scope": 1539,
                      "src": "1668:30:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                        "typeString": "struct Tables.Column[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1457,
                          "name": "Tables.Column",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 5758,
                          "src": "1668:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Column_$5758_storage_ptr",
                            "typeString": "struct Tables.Column"
                          }
                        },
                        "id": 1458,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1668:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Column_$5758_storage_$dyn_storage_ptr",
                          "typeString": "struct Tables.Column[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1465,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "33",
                        "id": 1463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1721:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        }
                      ],
                      "id": 1462,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1701:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_Column_$5758_memory_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (struct Tables.Column memory[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1460,
                          "name": "Tables.Column",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 5758,
                          "src": "1705:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Column_$5758_storage_ptr",
                            "typeString": "struct Tables.Column"
                          }
                        },
                        "id": 1461,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1705:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Column_$5758_storage_$dyn_storage_ptr",
                          "typeString": "struct Tables.Column[]"
                        }
                      }
                    },
                    "id": 1464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1701:22:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory",
                      "typeString": "struct Tables.Column memory[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1668:55:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1466,
                        "name": "columns",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1459,
                        "src": "1733:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                          "typeString": "struct Tables.Column memory[] memory"
                        }
                      },
                      "id": 1468,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1467,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1741:1:6",
                        "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": "1733:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1471,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1773:4:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        {
                          "argumentTypes": null,
                          "id": 1472,
                          "name": "PURCHASER",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1349,
                          "src": "1791:9:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "61646472657373",
                          "id": 1473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1814:9:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_421683f821a0574472445355be6d2b769119e8515f8376a1d7878523dfdecf7b",
                            "typeString": "literal_string \"address\""
                          },
                          "value": "address"
                        },
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1474,
                              "name": "resources",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5678,
                              "src": "1837:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                                "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                              }
                            },
                            "id": 1476,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1475,
                              "name": "_locale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1439,
                              "src": "1847:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1837:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                              "typeString": "mapping(string memory => string storage ref)"
                            }
                          },
                          "id": 1478,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1477,
                            "name": "PURCHASER",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1349,
                            "src": "1856:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1837:29:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1479,
                              "name": "Actions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5438,
                              "src": "1880:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Actions_$5438_$",
                                "typeString": "type(library Actions)"
                              }
                            },
                            "id": 1480,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "empty",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5326,
                            "src": "1880:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Action_$5310_memory_ptr_$",
                              "typeString": "function () pure returns (struct Actions.Action memory)"
                            }
                          },
                          "id": 1481,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1880:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_421683f821a0574472445355be6d2b769119e8515f8376a1d7878523dfdecf7b",
                            "typeString": "literal_string \"address\""
                          },
                          {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          },
                          {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1469,
                          "name": "Tables",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6071,
                          "src": "1746:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Tables_$6071_$",
                            "typeString": "type(library Tables)"
                          }
                        },
                        "id": 1470,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "Column",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5758,
                        "src": "1746:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Column_$5758_storage_ptr_$",
                          "typeString": "type(struct Tables.Column storage pointer)"
                        }
                      },
                      "id": 1482,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1746:159:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "src": "1733:172:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Column_$5758_memory",
                      "typeString": "struct Tables.Column memory"
                    }
                  },
                  "id": 1484,
                  "nodeType": "ExpressionStatement",
                  "src": "1733:172:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1485,
                        "name": "columns",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1459,
                        "src": "1915:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                          "typeString": "struct Tables.Column memory[] memory"
                        }
                      },
                      "id": 1487,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1486,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1923:1:6",
                        "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": "1915:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1490,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1955:4:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        {
                          "argumentTypes": null,
                          "id": 1491,
                          "name": "ETHS_INVESTED",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1352,
                          "src": "1973:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "657468",
                          "id": 1492,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2000:5:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0",
                            "typeString": "literal_string \"eth\""
                          },
                          "value": "eth"
                        },
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1493,
                              "name": "resources",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5678,
                              "src": "2019:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                                "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                              }
                            },
                            "id": 1495,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1494,
                              "name": "_locale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1439,
                              "src": "2029:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2019:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                              "typeString": "mapping(string memory => string storage ref)"
                            }
                          },
                          "id": 1497,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1496,
                            "name": "ETHS_INVESTED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1352,
                            "src": "2038:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2019:33:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1498,
                              "name": "Actions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5438,
                              "src": "2066:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Actions_$5438_$",
                                "typeString": "type(library Actions)"
                              }
                            },
                            "id": 1499,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "empty",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5326,
                            "src": "2066:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Action_$5310_memory_ptr_$",
                              "typeString": "function () pure returns (struct Actions.Action memory)"
                            }
                          },
                          "id": 1500,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2066:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0",
                            "typeString": "literal_string \"eth\""
                          },
                          {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          },
                          {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1488,
                          "name": "Tables",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6071,
                          "src": "1928:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Tables_$6071_$",
                            "typeString": "type(library Tables)"
                          }
                        },
                        "id": 1489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "Column",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5758,
                        "src": "1928:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Column_$5758_storage_ptr_$",
                          "typeString": "type(struct Tables.Column storage pointer)"
                        }
                      },
                      "id": 1501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1928:163:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "src": "1915:176:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Column_$5758_memory",
                      "typeString": "struct Tables.Column memory"
                    }
                  },
                  "id": 1503,
                  "nodeType": "ExpressionStatement",
                  "src": "1915:176:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1504,
                        "name": "columns",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1459,
                        "src": "2101:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                          "typeString": "struct Tables.Column memory[] memory"
                        }
                      },
                      "id": 1506,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 1505,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2109:1:6",
                        "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": "2101:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2141:4:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        {
                          "argumentTypes": null,
                          "id": 1510,
                          "name": "TOKENS_PURCHASED",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1355,
                          "src": "2159:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 1516,
                                              "name": "token",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1448,
                                              "src": "2222:5:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_DetailedERC20_$6533",
                                                "typeString": "contract DetailedERC20"
                                              }
                                            },
                                            "id": 1517,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "decimals",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6510,
                                            "src": "2222:14:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                              "typeString": "function () view external returns (uint8)"
                                            }
                                          },
                                          "id": 1518,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "2222:16:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        ],
                                        "id": 1515,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "2214:7:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        },
                                        "typeName": "uint256"
                                      },
                                      "id": 1519,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2214:25:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1520,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "toString",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3594,
                                    "src": "2214:34:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256) pure returns (string memory)"
                                    }
                                  },
                                  "id": 1521,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2214:36:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                "id": 1522,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toSlice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3662,
                                "src": "2214:44:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                  "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                }
                              },
                              "id": 1523,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2214:46:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "hexValue": "746f6b656e",
                                  "id": 1511,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2189:7:6",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_9b9b0454cadcb5884dd3faa6ba975da4d2459aa3f11d31291a25a8358f84946d",
                                    "typeString": "literal_string \"token\""
                                  },
                                  "value": "token"
                                },
                                "id": 1512,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toSlice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3662,
                                "src": "2189:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                  "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                }
                              },
                              "id": 1513,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2189:17:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1514,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "concat",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5175,
                            "src": "2189:24:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                              "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                            }
                          },
                          "id": 1524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2189:72:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1525,
                              "name": "resources",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5678,
                              "src": "2275:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                                "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                              }
                            },
                            "id": 1527,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1526,
                              "name": "_locale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1439,
                              "src": "2285:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2275:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                              "typeString": "mapping(string memory => string storage ref)"
                            }
                          },
                          "id": 1529,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1528,
                            "name": "TOKENS_PURCHASED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1355,
                            "src": "2294:16:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2275:36:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1530,
                              "name": "Actions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5438,
                              "src": "2325:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Actions_$5438_$",
                                "typeString": "type(library Actions)"
                              }
                            },
                            "id": 1531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "empty",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5326,
                            "src": "2325:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Action_$5310_memory_ptr_$",
                              "typeString": "function () pure returns (struct Actions.Action memory)"
                            }
                          },
                          "id": 1532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2325:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          },
                          {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          },
                          {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          },
                          {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1507,
                          "name": "Tables",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6071,
                          "src": "2114:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Tables_$6071_$",
                            "typeString": "type(library Tables)"
                          }
                        },
                        "id": 1508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "Column",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5758,
                        "src": "2114:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Column_$5758_storage_ptr_$",
                          "typeString": "type(struct Tables.Column storage pointer)"
                        }
                      },
                      "id": 1533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2114:236:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "src": "2101:249:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Column_$5758_memory",
                      "typeString": "struct Tables.Column memory"
                    }
                  },
                  "id": 1535,
                  "nodeType": "ExpressionStatement",
                  "src": "2101:249:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1536,
                    "name": "columns",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1459,
                    "src": "2367:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                      "typeString": "struct Tables.Column memory[] memory"
                    }
                  },
                  "functionReturnParameters": 1446,
                  "id": 1537,
                  "nodeType": "Return",
                  "src": "2360:14:6"
                }
              ]
            },
            "documentation": null,
            "id": 1539,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_columns",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1442,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1439,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1539,
                  "src": "1526:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1438,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1526:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1441,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1539,
                  "src": "1542:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1440,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 444,
                    "src": "1542:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$444",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1525:33:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 1446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1445,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1539,
                  "src": "1581:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                    "typeString": "struct Tables.Column[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 1443,
                      "name": "Tables.Column",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 5758,
                      "src": "1581:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_storage_ptr",
                        "typeString": "struct Tables.Column"
                      }
                    },
                    "id": 1444,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1581:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Column_$5758_storage_$dyn_storage_ptr",
                      "typeString": "struct Tables.Column[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1580:17:6"
            },
            "scope": 1673,
            "src": "1508:873:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1671,
              "nodeType": "Block",
              "src": "2467:746:6",
              "statements": [
                {
                  "assignments": [
                    1552
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1552,
                      "name": "rows",
                      "nodeType": "VariableDeclaration",
                      "scope": 1672,
                      "src": "2477:20:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                        "typeString": "string[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1550,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2477:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "id": 1551,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2477:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                          "typeString": "string[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1560,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1556,
                            "name": "_sale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1543,
                            "src": "2513:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Sale_$444",
                              "typeString": "contract ERC20Sale"
                            }
                          },
                          "id": 1557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "numberOfPurchasers",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 74,
                          "src": "2513:24:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                            "typeString": "function () view external returns (uint256)"
                          }
                        },
                        "id": 1558,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2513:26:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2500:12:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_string_memory_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (string memory[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1553,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2504:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "id": 1554,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2504:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                          "typeString": "string[]"
                        }
                      }
                    },
                    "id": 1559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2500:40:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_string_memory_$dyn_memory",
                      "typeString": "string memory[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2477:63:6"
                },
                {
                  "body": {
                    "id": 1667,
                    "nodeType": "Block",
                    "src": "2589:597:6",
                    "statements": [
                      {
                        "assignments": [
                          1573
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1573,
                            "name": "purchaser",
                            "nodeType": "VariableDeclaration",
                            "scope": 1672,
                            "src": "2603:17:6",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1572,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2603:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1578,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1576,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1562,
                              "src": "2641:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1574,
                              "name": "_sale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1543,
                              "src": "2623:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                "typeString": "contract ERC20Sale"
                              }
                            },
                            "id": 1575,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "purchaserAt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 86,
                            "src": "2623:17:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view external returns (address)"
                            }
                          },
                          "id": 1577,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2623:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2603:40:6"
                      },
                      {
                        "assignments": [
                          1580
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1580,
                            "name": "row",
                            "nodeType": "VariableDeclaration",
                            "scope": 1672,
                            "src": "2657:17:6",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 1579,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "2657:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1582,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "7b22707572636861736572223a22",
                          "id": 1581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2677:16:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_5c29630f8a518123d33dfe48bb09f337882707d986ce628a455cf947b26f0dbb",
                            "typeString": "literal_string \"{\"purchaser\":\"\""
                          },
                          "value": "{\"purchaser\":\""
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2657:36:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1594,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1583,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "2707:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1588,
                                        "name": "purchaser",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1573,
                                        "src": "2734:9:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "id": 1589,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toString",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3454,
                                      "src": "2734:18:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_address_$",
                                        "typeString": "function (address) pure returns (string memory)"
                                      }
                                    },
                                    "id": 1590,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2734:20:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1591,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2734:28:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2734:30:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1584,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "2713:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1585,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2713:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1586,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2713:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1587,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "2713:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2713:52:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2707:58:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1595,
                        "nodeType": "ExpressionStatement",
                        "src": "2707:58:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1605,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1596,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "2779:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "hexValue": "222c22657468735f696e766573746564223a",
                                    "id": 1601,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2806:20:6",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_65936ccd1d02dbf7637829fc780dde5e17f70edd168795b56e0a68174d806422",
                                      "typeString": "literal_string \"\",\"eths_invested\":\""
                                    },
                                    "value": "\",\"eths_invested\":"
                                  },
                                  "id": 1602,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2806:28:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1603,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2806:30:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1597,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "2785:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1598,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2785:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1599,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2785:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1600,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "2785:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1604,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2785:52:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2779:58:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1606,
                        "nodeType": "ExpressionStatement",
                        "src": "2779:58:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1621,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1607,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "2851:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 1614,
                                            "name": "purchaser",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1573,
                                            "src": "2894:9:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1612,
                                            "name": "_sale",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1543,
                                            "src": "2878:5:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                              "typeString": "contract ERC20Sale"
                                            }
                                          },
                                          "id": 1613,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "paymentOf",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 2776,
                                          "src": "2878:15:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                            "typeString": "function (address) view external returns (uint256)"
                                          }
                                        },
                                        "id": 1615,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2878:26:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1616,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toString",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3594,
                                      "src": "2878:35:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (string memory)"
                                      }
                                    },
                                    "id": 1617,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2878:37:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1618,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2878:45:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1619,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2878:47:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1608,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "2857:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1609,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2857:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1610,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2857:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1611,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "2857:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1620,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2857:69:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2851:75:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1622,
                        "nodeType": "ExpressionStatement",
                        "src": "2851:75:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1623,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "2940:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "hexValue": "2c22746f6b656e735f707572636861736564223a",
                                    "id": 1628,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2967:22:6",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_1001ea9cbbe35936e9ed3f2024a5530ec4da436e4e54c68f2bf481b63224638f",
                                      "typeString": "literal_string \",\"tokens_purchased\":\""
                                    },
                                    "value": ",\"tokens_purchased\":"
                                  },
                                  "id": 1629,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2967:30:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1630,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2967:32:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1624,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "2946:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1625,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2946:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2946:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1627,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "2946:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1631,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2946:54:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2940:60:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1633,
                        "nodeType": "ExpressionStatement",
                        "src": "2940:60:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1634,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "3014:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 1641,
                                            "name": "purchaser",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1573,
                                            "src": "3061:9:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1639,
                                            "name": "_sale",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1543,
                                            "src": "3041:5:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                              "typeString": "contract ERC20Sale"
                                            }
                                          },
                                          "id": 1640,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "tokenAmountOf",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 98,
                                          "src": "3041:19:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                            "typeString": "function (address) view external returns (uint256)"
                                          }
                                        },
                                        "id": 1642,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3041:30:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1643,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toString",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3594,
                                      "src": "3041:39:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (string memory)"
                                      }
                                    },
                                    "id": 1644,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3041:41:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1645,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "3041:49:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1646,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3041:51:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1635,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "3020:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1636,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "3020:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1637,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3020:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1638,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "3020:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3020:73:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3014:79:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1649,
                        "nodeType": "ExpressionStatement",
                        "src": "3014:79:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1659,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1650,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "3107:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "hexValue": "7d",
                                    "id": 1655,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3134:3:6",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff",
                                      "typeString": "literal_string \"}\""
                                    },
                                    "value": "}"
                                  },
                                  "id": 1656,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "3134:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1657,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3134:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1651,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "3113:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1652,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "3113:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1653,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3113:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1654,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "3113:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1658,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3113:35:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3107:41:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1660,
                        "nodeType": "ExpressionStatement",
                        "src": "3107:41:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1661,
                              "name": "rows",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1552,
                              "src": "3162:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                                "typeString": "string memory[] memory"
                              }
                            },
                            "id": 1663,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1662,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1562,
                              "src": "3167:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3162:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1664,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "3172:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3162:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1666,
                        "nodeType": "ExpressionStatement",
                        "src": "3162:13:6"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1565,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1562,
                      "src": "2567:1:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1566,
                        "name": "rows",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1552,
                        "src": "2571:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                          "typeString": "string memory[] memory"
                        }
                      },
                      "id": 1567,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2571:11:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2567:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1668,
                  "initializationExpression": {
                    "assignments": [
                      1562
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1562,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1672,
                        "src": "2555:6:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1561,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2555:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1564,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2564:1:6",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2555:10:6"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2584:3:6",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1569,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1562,
                        "src": "2584:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1571,
                    "nodeType": "ExpressionStatement",
                    "src": "2584:3:6"
                  },
                  "nodeType": "ForStatement",
                  "src": "2550:636:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1669,
                    "name": "rows",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1552,
                    "src": "3202:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                      "typeString": "string memory[] memory"
                    }
                  },
                  "functionReturnParameters": 1548,
                  "id": 1670,
                  "nodeType": "Return",
                  "src": "3195:11:6"
                }
              ]
            },
            "documentation": null,
            "id": 1672,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_rows",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1541,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1672,
                  "src": "2402:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1540,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2402:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1543,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1672,
                  "src": "2418:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1542,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 444,
                    "src": "2418:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$444",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2401:33:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 1548,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1547,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1672,
                  "src": "2457:8:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                    "typeString": "string[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1545,
                      "name": "string",
                      "nodeType": "ElementaryTypeName",
                      "src": "2457:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      }
                    },
                    "id": 1546,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2457:8:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                      "typeString": "string[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2456:10:6"
            },
            "scope": 1673,
            "src": "2387:826:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 1674,
        "src": "257:2958:6"
      }
    ],
    "src": "0:3216:6"
  },
  "legacyAST": {
    "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/PurchasersWidgetRenderer.sol",
    "exportedSymbols": {
      "PurchasersWidgetRenderer": [
        1673
      ]
    },
    "id": 1674,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1320,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:6"
      },
      {
        "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/ERC20SaleWidgetRenderer.sol",
        "file": "./ERC20SaleWidgetRenderer.sol",
        "id": 1321,
        "nodeType": "ImportDirective",
        "scope": 1674,
        "sourceUnit": 1203,
        "src": "26:39:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "tokenboost-solidity/contracts/widget/Localizable.sol",
        "file": "tokenboost-solidity/contracts/widget/Localizable.sol",
        "id": 1322,
        "nodeType": "ImportDirective",
        "scope": 1674,
        "sourceUnit": 5716,
        "src": "66:62:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "tokenboost-solidity/contracts/widget/Widgets.sol",
        "file": "tokenboost-solidity/contracts/widget/Widgets.sol",
        "id": 1323,
        "nodeType": "ImportDirective",
        "scope": 1674,
        "sourceUnit": 6259,
        "src": "129:58:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "zeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol",
        "file": "zeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol",
        "id": 1324,
        "nodeType": "ImportDirective",
        "scope": 1674,
        "sourceUnit": 6534,
        "src": "188:67:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1325,
              "name": "ERC20SaleWidgetRenderer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1202,
              "src": "294:23:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1202",
                "typeString": "contract ERC20SaleWidgetRenderer"
              }
            },
            "id": 1326,
            "nodeType": "InheritanceSpecifier",
            "src": "294:23:6"
          }
        ],
        "contractDependencies": [
          1202,
          5715,
          6499
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1673,
        "linearizedBaseContracts": [
          1673,
          1202,
          5715,
          6499
        ],
        "name": "PurchasersWidgetRenderer",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 1329,
            "libraryName": {
              "contractScope": null,
              "id": 1327,
              "name": "Widgets",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6258,
              "src": "330:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Widgets_$6258",
                "typeString": "library Widgets"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "324:33:6",
            "typeName": {
              "contractScope": null,
              "id": 1328,
              "name": "Widgets.Widget",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6096,
              "src": "342:14:6",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Widget_$6096_storage_ptr",
                "typeString": "struct Widgets.Widget"
              }
            }
          },
          {
            "id": 1332,
            "libraryName": {
              "contractScope": null,
              "id": 1330,
              "name": "UintUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3595,
              "src": "368:9:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UintUtils_$3595",
                "typeString": "library UintUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "362:25:6",
            "typeName": {
              "id": 1331,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "382:4:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 1335,
            "libraryName": {
              "contractScope": null,
              "id": 1333,
              "name": "AddressUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3455,
              "src": "398:12:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AddressUtils_$3455",
                "typeString": "library AddressUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "392:31:6",
            "typeName": {
              "id": 1334,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "415:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 1337,
            "libraryName": {
              "contractScope": null,
              "id": 1336,
              "name": "strings",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5290,
              "src": "434:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_strings_$5290",
                "typeString": "library strings"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "428:20:6",
            "typeName": null
          },
          {
            "constant": true,
            "id": 1340,
            "name": "PURCHASERS",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "454:48:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1338,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "454:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "70757263686173657273",
              "id": 1339,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "490:12:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_1260b08910b76b8da549a9b7624376eca0a915c1fdbfd92c6c1f99d36a6b6a4f",
                "typeString": "literal_string \"purchasers\""
              },
              "value": "purchasers"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 1343,
            "name": "SHORT_DESC",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "508:48:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1341,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "508:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "73686f72745f64657363",
              "id": 1342,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "544:12:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_94c241f8e931f92c2d4b9c8bf91f277610ffbc69f83ddd91d5e8535e49fe7894",
                "typeString": "literal_string \"short_desc\""
              },
              "value": "short_desc"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 1346,
            "name": "LONG_DESC",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "562:46:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1344,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "562:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6c6f6e675f64657363",
              "id": 1345,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "597:11:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_a47709c5db6426dae60658aa3fe6818a09dac224ef85f317a31b897413052755",
                "typeString": "literal_string \"long_desc\""
              },
              "value": "long_desc"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 1349,
            "name": "PURCHASER",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "614:46:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1347,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "614:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "707572636861736572",
              "id": 1348,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "649:11:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_5cd9763eb0769e05e47a6515df0fedff76d312b6727c9aef2e804b125f56ae63",
                "typeString": "literal_string \"purchaser\""
              },
              "value": "purchaser"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 1352,
            "name": "ETHS_INVESTED",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "666:54:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1350,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "666:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "657468735f696e766573746564",
              "id": 1351,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "705:15:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_31e88b7b2704896411d3d882563f5ac8d0ea58f0e49c2a9cc61e4e0e906763bf",
                "typeString": "literal_string \"eths_invested\""
              },
              "value": "eths_invested"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 1355,
            "name": "TOKENS_PURCHASED",
            "nodeType": "VariableDeclaration",
            "scope": 1673,
            "src": "726:60:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 1353,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "726:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "746f6b656e735f707572636861736564",
              "id": 1354,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "768:18:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f36e26426112ae1ef585224654b69da78e707c1a79d4bfc46ba246e2be5c153c",
                "typeString": "literal_string \"tokens_purchased\""
              },
              "value": "tokens_purchased"
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 1436,
              "nodeType": "Block",
              "src": "871:631:6",
              "statements": [
                {
                  "assignments": [
                    1368
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1368,
                      "name": "elements",
                      "nodeType": "VariableDeclaration",
                      "scope": 1437,
                      "src": "881:34:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Element_$5466_memory_$dyn_memory_ptr",
                        "typeString": "struct Elements.Element[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1366,
                          "name": "Elements.Element",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 5466,
                          "src": "881:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Element_$5466_storage_ptr",
                            "typeString": "struct Elements.Element"
                          }
                        },
                        "id": 1367,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "881:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Element_$5466_storage_$dyn_storage_ptr",
                          "typeString": "struct Elements.Element[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1374,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "941:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 1371,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "918:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_Element_$5466_memory_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (struct Elements.Element memory[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1369,
                          "name": "Elements.Element",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 5466,
                          "src": "922:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Element_$5466_storage_ptr",
                            "typeString": "struct Elements.Element"
                          }
                        },
                        "id": 1370,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "922:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Element_$5466_storage_$dyn_storage_ptr",
                          "typeString": "struct Elements.Element[]"
                        }
                      }
                    },
                    "id": 1373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "918:25:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Element_$5466_memory_$dyn_memory",
                      "typeString": "struct Elements.Element memory[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "881:62:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1375,
                        "name": "elements",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1368,
                        "src": "953:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Element_$5466_memory_$dyn_memory_ptr",
                          "typeString": "struct Elements.Element memory[] memory"
                        }
                      },
                      "id": 1377,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1376,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "962:1:6",
                        "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": "953:11:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Element_$5466_memory",
                        "typeString": "struct Elements.Element memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "997:4:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        {
                          "argumentTypes": null,
                          "id": 1381,
                          "name": "PURCHASERS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1340,
                          "src": "1015:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "7461626c65",
                          "id": 1382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1039:7:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_5cda47eec2b53757468f49f12e982f8bbff34a8fd216f10c6b56da16e54e4749",
                            "typeString": "literal_string \"table\""
                          },
                          "value": "table"
                        },
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1383,
                              "name": "resources",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5678,
                              "src": "1060:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                                "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                              }
                            },
                            "id": 1385,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1384,
                              "name": "_locale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1357,
                              "src": "1070:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1060:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                              "typeString": "mapping(string memory => string storage ref)"
                            }
                          },
                          "id": 1387,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1386,
                            "name": "PURCHASERS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1340,
                            "src": "1079:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1060:30:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "6e756c6c",
                          "id": 1388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1104:6:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_efbde2c3aee204a69b7696d4b10ff31137fe78e3946306284f806e2dfc68b805",
                            "typeString": "literal_string \"null\""
                          },
                          "value": "null"
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1389,
                              "name": "Actions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5438,
                              "src": "1124:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Actions_$5438_$",
                                "typeString": "type(library Actions)"
                              }
                            },
                            "id": 1390,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "empty",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5326,
                            "src": "1124:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Action_$5310_memory_ptr_$",
                              "typeString": "function () pure returns (struct Actions.Action memory)"
                            }
                          },
                          "id": 1391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1124:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 1394,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1166:4:6",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1396,
                                  "name": "_locale",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1357,
                                  "src": "1181:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1397,
                                  "name": "_sale",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1359,
                                  "src": "1190:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                    "typeString": "contract ERC20Sale"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                    "typeString": "contract ERC20Sale"
                                  }
                                ],
                                "id": 1395,
                                "name": "_columns",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1539,
                                "src": "1172:8:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$444_$returns$_t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr_$",
                                  "typeString": "function (string memory,contract ERC20Sale) view returns (struct Tables.Column memory[] memory)"
                                }
                              },
                              "id": 1398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1172:24:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                                "typeString": "struct Tables.Column memory[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1400,
                                  "name": "_locale",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1357,
                                  "src": "1204:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1401,
                                  "name": "_sale",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1359,
                                  "src": "1213:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                    "typeString": "contract ERC20Sale"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                    "typeString": "contract ERC20Sale"
                                  }
                                ],
                                "id": 1399,
                                "name": "_rows",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1672,
                                "src": "1198:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$444_$returns$_t_array$_t_string_memory_$dyn_memory_ptr_$",
                                  "typeString": "function (string memory,contract ERC20Sale) view returns (string memory[] memory)"
                                }
                              },
                              "id": 1402,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1198:21:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                                "typeString": "string memory[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                                "typeString": "struct Tables.Column memory[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                                "typeString": "string memory[] memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1392,
                              "name": "Tables",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6071,
                              "src": "1153:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Tables_$6071_$",
                                "typeString": "type(library Tables)"
                              }
                            },
                            "id": 1393,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "Table",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5767,
                            "src": "1153:12:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_Table_$5767_storage_ptr_$",
                              "typeString": "type(struct Tables.Table storage pointer)"
                            }
                          },
                          "id": 1403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1153:67:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Table_$5767_memory",
                            "typeString": "struct Tables.Table memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_5cda47eec2b53757468f49f12e982f8bbff34a8fd216f10c6b56da16e54e4749",
                            "typeString": "literal_string \"table\""
                          },
                          {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_efbde2c3aee204a69b7696d4b10ff31137fe78e3946306284f806e2dfc68b805",
                            "typeString": "literal_string \"null\""
                          },
                          {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_Table_$5767_memory",
                            "typeString": "struct Tables.Table memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1378,
                          "name": "Elements",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5667,
                          "src": "967:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Elements_$5667_$",
                            "typeString": "type(library Elements)"
                          }
                        },
                        "id": 1379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "Element",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5466,
                        "src": "967:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Element_$5466_storage_ptr_$",
                          "typeString": "type(struct Elements.Element storage pointer)"
                        }
                      },
                      "id": 1404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "967:263:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Element_$5466_memory",
                        "typeString": "struct Elements.Element memory"
                      }
                    },
                    "src": "953:277:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Element_$5466_memory",
                      "typeString": "struct Elements.Element memory"
                    }
                  },
                  "id": 1406,
                  "nodeType": "ExpressionStatement",
                  "src": "953:277:6"
                },
                {
                  "assignments": [
                    1410
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1410,
                      "name": "widget",
                      "nodeType": "VariableDeclaration",
                      "scope": 1437,
                      "src": "1240:28:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Widget_$6096_memory_ptr",
                        "typeString": "struct Widgets.Widget"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1409,
                        "name": "Widgets.Widget",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6096,
                        "src": "1240:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Widget_$6096_storage_ptr",
                          "typeString": "struct Widgets.Widget"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1431,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1413,
                            "name": "resources",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5678,
                            "src": "1299:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                              "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                            }
                          },
                          "id": 1415,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1414,
                            "name": "_locale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1357,
                            "src": "1309:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1299:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                            "typeString": "mapping(string memory => string storage ref)"
                          }
                        },
                        "id": 1417,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1416,
                          "name": "PURCHASERS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1340,
                          "src": "1318:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1299:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1418,
                            "name": "resources",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5678,
                            "src": "1343:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                              "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                            }
                          },
                          "id": 1420,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1419,
                            "name": "_locale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1357,
                            "src": "1353:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1343:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                            "typeString": "mapping(string memory => string storage ref)"
                          }
                        },
                        "id": 1422,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1421,
                          "name": "SHORT_DESC",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1343,
                          "src": "1362:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1343:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1423,
                            "name": "resources",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5678,
                            "src": "1387:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                              "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                            }
                          },
                          "id": 1425,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1424,
                            "name": "_locale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1357,
                            "src": "1397:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1387:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                            "typeString": "mapping(string memory => string storage ref)"
                          }
                        },
                        "id": 1427,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1426,
                          "name": "LONG_DESC",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1346,
                          "src": "1406:9:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1387:29:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "38",
                        "id": 1428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1430:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_8_by_1",
                          "typeString": "int_const 8"
                        },
                        "value": "8"
                      },
                      {
                        "argumentTypes": null,
                        "id": 1429,
                        "name": "elements",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1368,
                        "src": "1445:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Element_$5466_memory_$dyn_memory_ptr",
                          "typeString": "struct Elements.Element memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_rational_8_by_1",
                          "typeString": "int_const 8"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_Element_$5466_memory_$dyn_memory_ptr",
                          "typeString": "struct Elements.Element memory[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1411,
                        "name": "Widgets",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6258,
                        "src": "1271:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Widgets_$6258_$",
                          "typeString": "type(library Widgets)"
                        }
                      },
                      "id": 1412,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "Widget",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6096,
                      "src": "1271:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Widget_$6096_storage_ptr_$",
                        "typeString": "type(struct Widgets.Widget storage pointer)"
                      }
                    },
                    "id": 1430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1271:192:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Widget_$6096_memory",
                      "typeString": "struct Widgets.Widget memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1240:223:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1432,
                        "name": "widget",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1410,
                        "src": "1480:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Widget_$6096_memory_ptr",
                          "typeString": "struct Widgets.Widget memory"
                        }
                      },
                      "id": 1433,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toJson",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6257,
                      "src": "1480:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Widget_$6096_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_Widget_$6096_memory_ptr_$",
                        "typeString": "function (struct Widgets.Widget memory) pure returns (string memory)"
                      }
                    },
                    "id": 1434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1480:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1363,
                  "id": 1435,
                  "nodeType": "Return",
                  "src": "1473:22:6"
                }
              ]
            },
            "documentation": null,
            "id": 1437,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "render",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1357,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1437,
                  "src": "809:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1356,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "809:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1359,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1437,
                  "src": "825:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1358,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 444,
                    "src": "825:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$444",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "808:33:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 1363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1362,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1437,
                  "src": "863:6:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1361,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "863:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "862:8:6"
            },
            "scope": 1673,
            "src": "793:709:6",
            "stateMutability": "view",
            "superFunction": 1201,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1538,
              "nodeType": "Block",
              "src": "1598:783:6",
              "statements": [
                {
                  "assignments": [
                    1448
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1448,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 1539,
                      "src": "1608:19:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DetailedERC20_$6533",
                        "typeString": "contract DetailedERC20"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1447,
                        "name": "DetailedERC20",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6533,
                        "src": "1608:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DetailedERC20_$6533",
                          "typeString": "contract DetailedERC20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1454,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1450,
                            "name": "_sale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1441,
                            "src": "1644:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Sale_$444",
                              "typeString": "contract ERC20Sale"
                            }
                          },
                          "id": 1451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "token",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32,
                          "src": "1644:11:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$6576_$",
                            "typeString": "function () view external returns (contract ERC20)"
                          }
                        },
                        "id": 1452,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1644:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$6576",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$6576",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 1449,
                      "name": "DetailedERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6533,
                      "src": "1630:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_DetailedERC20_$6533_$",
                        "typeString": "type(contract DetailedERC20)"
                      }
                    },
                    "id": 1453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1630:28:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DetailedERC20_$6533",
                      "typeString": "contract DetailedERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1608:50:6"
                },
                {
                  "assignments": [
                    1459
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1459,
                      "name": "columns",
                      "nodeType": "VariableDeclaration",
                      "scope": 1539,
                      "src": "1668:30:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                        "typeString": "struct Tables.Column[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1457,
                          "name": "Tables.Column",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 5758,
                          "src": "1668:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Column_$5758_storage_ptr",
                            "typeString": "struct Tables.Column"
                          }
                        },
                        "id": 1458,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1668:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Column_$5758_storage_$dyn_storage_ptr",
                          "typeString": "struct Tables.Column[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1465,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "33",
                        "id": 1463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1721:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        }
                      ],
                      "id": 1462,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1701:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_Column_$5758_memory_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (struct Tables.Column memory[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1460,
                          "name": "Tables.Column",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 5758,
                          "src": "1705:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Column_$5758_storage_ptr",
                            "typeString": "struct Tables.Column"
                          }
                        },
                        "id": 1461,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1705:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Column_$5758_storage_$dyn_storage_ptr",
                          "typeString": "struct Tables.Column[]"
                        }
                      }
                    },
                    "id": 1464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1701:22:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory",
                      "typeString": "struct Tables.Column memory[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1668:55:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1466,
                        "name": "columns",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1459,
                        "src": "1733:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                          "typeString": "struct Tables.Column memory[] memory"
                        }
                      },
                      "id": 1468,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1467,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1741:1:6",
                        "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": "1733:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1471,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1773:4:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        {
                          "argumentTypes": null,
                          "id": 1472,
                          "name": "PURCHASER",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1349,
                          "src": "1791:9:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "61646472657373",
                          "id": 1473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1814:9:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_421683f821a0574472445355be6d2b769119e8515f8376a1d7878523dfdecf7b",
                            "typeString": "literal_string \"address\""
                          },
                          "value": "address"
                        },
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1474,
                              "name": "resources",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5678,
                              "src": "1837:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                                "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                              }
                            },
                            "id": 1476,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1475,
                              "name": "_locale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1439,
                              "src": "1847:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1837:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                              "typeString": "mapping(string memory => string storage ref)"
                            }
                          },
                          "id": 1478,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1477,
                            "name": "PURCHASER",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1349,
                            "src": "1856:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1837:29:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1479,
                              "name": "Actions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5438,
                              "src": "1880:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Actions_$5438_$",
                                "typeString": "type(library Actions)"
                              }
                            },
                            "id": 1480,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "empty",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5326,
                            "src": "1880:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Action_$5310_memory_ptr_$",
                              "typeString": "function () pure returns (struct Actions.Action memory)"
                            }
                          },
                          "id": 1481,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1880:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_421683f821a0574472445355be6d2b769119e8515f8376a1d7878523dfdecf7b",
                            "typeString": "literal_string \"address\""
                          },
                          {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          },
                          {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1469,
                          "name": "Tables",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6071,
                          "src": "1746:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Tables_$6071_$",
                            "typeString": "type(library Tables)"
                          }
                        },
                        "id": 1470,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "Column",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5758,
                        "src": "1746:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Column_$5758_storage_ptr_$",
                          "typeString": "type(struct Tables.Column storage pointer)"
                        }
                      },
                      "id": 1482,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1746:159:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "src": "1733:172:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Column_$5758_memory",
                      "typeString": "struct Tables.Column memory"
                    }
                  },
                  "id": 1484,
                  "nodeType": "ExpressionStatement",
                  "src": "1733:172:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1485,
                        "name": "columns",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1459,
                        "src": "1915:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                          "typeString": "struct Tables.Column memory[] memory"
                        }
                      },
                      "id": 1487,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1486,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1923:1:6",
                        "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": "1915:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1490,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1955:4:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        {
                          "argumentTypes": null,
                          "id": 1491,
                          "name": "ETHS_INVESTED",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1352,
                          "src": "1973:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "657468",
                          "id": 1492,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2000:5:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0",
                            "typeString": "literal_string \"eth\""
                          },
                          "value": "eth"
                        },
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1493,
                              "name": "resources",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5678,
                              "src": "2019:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                                "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                              }
                            },
                            "id": 1495,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1494,
                              "name": "_locale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1439,
                              "src": "2029:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2019:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                              "typeString": "mapping(string memory => string storage ref)"
                            }
                          },
                          "id": 1497,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1496,
                            "name": "ETHS_INVESTED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1352,
                            "src": "2038:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2019:33:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1498,
                              "name": "Actions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5438,
                              "src": "2066:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Actions_$5438_$",
                                "typeString": "type(library Actions)"
                              }
                            },
                            "id": 1499,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "empty",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5326,
                            "src": "2066:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Action_$5310_memory_ptr_$",
                              "typeString": "function () pure returns (struct Actions.Action memory)"
                            }
                          },
                          "id": 1500,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2066:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0",
                            "typeString": "literal_string \"eth\""
                          },
                          {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          },
                          {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1488,
                          "name": "Tables",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6071,
                          "src": "1928:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Tables_$6071_$",
                            "typeString": "type(library Tables)"
                          }
                        },
                        "id": 1489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "Column",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5758,
                        "src": "1928:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Column_$5758_storage_ptr_$",
                          "typeString": "type(struct Tables.Column storage pointer)"
                        }
                      },
                      "id": 1501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1928:163:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "src": "1915:176:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Column_$5758_memory",
                      "typeString": "struct Tables.Column memory"
                    }
                  },
                  "id": 1503,
                  "nodeType": "ExpressionStatement",
                  "src": "1915:176:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1504,
                        "name": "columns",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1459,
                        "src": "2101:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                          "typeString": "struct Tables.Column memory[] memory"
                        }
                      },
                      "id": 1506,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 1505,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2109:1:6",
                        "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": "2101:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2141:4:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        {
                          "argumentTypes": null,
                          "id": 1510,
                          "name": "TOKENS_PURCHASED",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1355,
                          "src": "2159:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 1516,
                                              "name": "token",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1448,
                                              "src": "2222:5:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_DetailedERC20_$6533",
                                                "typeString": "contract DetailedERC20"
                                              }
                                            },
                                            "id": 1517,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "decimals",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6510,
                                            "src": "2222:14:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                              "typeString": "function () view external returns (uint8)"
                                            }
                                          },
                                          "id": 1518,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "2222:16:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        ],
                                        "id": 1515,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "2214:7:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        },
                                        "typeName": "uint256"
                                      },
                                      "id": 1519,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2214:25:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1520,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "toString",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3594,
                                    "src": "2214:34:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256) pure returns (string memory)"
                                    }
                                  },
                                  "id": 1521,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2214:36:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                "id": 1522,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toSlice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3662,
                                "src": "2214:44:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                  "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                }
                              },
                              "id": 1523,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2214:46:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "hexValue": "746f6b656e",
                                  "id": 1511,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2189:7:6",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_9b9b0454cadcb5884dd3faa6ba975da4d2459aa3f11d31291a25a8358f84946d",
                                    "typeString": "literal_string \"token\""
                                  },
                                  "value": "token"
                                },
                                "id": 1512,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toSlice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3662,
                                "src": "2189:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                  "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                }
                              },
                              "id": 1513,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2189:17:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1514,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "concat",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5175,
                            "src": "2189:24:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                              "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                            }
                          },
                          "id": 1524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2189:72:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1525,
                              "name": "resources",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5678,
                              "src": "2275:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_mapping$_t_string_memory_$_t_string_storage_$_$",
                                "typeString": "mapping(string memory => mapping(string memory => string storage ref))"
                              }
                            },
                            "id": 1527,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1526,
                              "name": "_locale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1439,
                              "src": "2285:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2275:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                              "typeString": "mapping(string memory => string storage ref)"
                            }
                          },
                          "id": 1529,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1528,
                            "name": "TOKENS_PURCHASED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1355,
                            "src": "2294:16:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2275:36:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1530,
                              "name": "Actions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5438,
                              "src": "2325:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Actions_$5438_$",
                                "typeString": "type(library Actions)"
                              }
                            },
                            "id": 1531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "empty",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5326,
                            "src": "2325:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Action_$5310_memory_ptr_$",
                              "typeString": "function () pure returns (struct Actions.Action memory)"
                            }
                          },
                          "id": 1532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2325:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          },
                          {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          },
                          {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          },
                          {
                            "typeIdentifier": "t_struct$_Action_$5310_memory_ptr",
                            "typeString": "struct Actions.Action memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1507,
                          "name": "Tables",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6071,
                          "src": "2114:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Tables_$6071_$",
                            "typeString": "type(library Tables)"
                          }
                        },
                        "id": 1508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "Column",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5758,
                        "src": "2114:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Column_$5758_storage_ptr_$",
                          "typeString": "type(struct Tables.Column storage pointer)"
                        }
                      },
                      "id": 1533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2114:236:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_memory",
                        "typeString": "struct Tables.Column memory"
                      }
                    },
                    "src": "2101:249:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Column_$5758_memory",
                      "typeString": "struct Tables.Column memory"
                    }
                  },
                  "id": 1535,
                  "nodeType": "ExpressionStatement",
                  "src": "2101:249:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1536,
                    "name": "columns",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1459,
                    "src": "2367:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                      "typeString": "struct Tables.Column memory[] memory"
                    }
                  },
                  "functionReturnParameters": 1446,
                  "id": 1537,
                  "nodeType": "Return",
                  "src": "2360:14:6"
                }
              ]
            },
            "documentation": null,
            "id": 1539,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_columns",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1442,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1439,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1539,
                  "src": "1526:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1438,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1526:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1441,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1539,
                  "src": "1542:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1440,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 444,
                    "src": "1542:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$444",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1525:33:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 1446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1445,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1539,
                  "src": "1581:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Column_$5758_memory_$dyn_memory_ptr",
                    "typeString": "struct Tables.Column[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 1443,
                      "name": "Tables.Column",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 5758,
                      "src": "1581:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Column_$5758_storage_ptr",
                        "typeString": "struct Tables.Column"
                      }
                    },
                    "id": 1444,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1581:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Column_$5758_storage_$dyn_storage_ptr",
                      "typeString": "struct Tables.Column[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1580:17:6"
            },
            "scope": 1673,
            "src": "1508:873:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1671,
              "nodeType": "Block",
              "src": "2467:746:6",
              "statements": [
                {
                  "assignments": [
                    1552
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1552,
                      "name": "rows",
                      "nodeType": "VariableDeclaration",
                      "scope": 1672,
                      "src": "2477:20:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                        "typeString": "string[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1550,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2477:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "id": 1551,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2477:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                          "typeString": "string[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1560,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1556,
                            "name": "_sale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1543,
                            "src": "2513:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Sale_$444",
                              "typeString": "contract ERC20Sale"
                            }
                          },
                          "id": 1557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "numberOfPurchasers",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 74,
                          "src": "2513:24:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                            "typeString": "function () view external returns (uint256)"
                          }
                        },
                        "id": 1558,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2513:26:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2500:12:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_string_memory_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (string memory[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1553,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2504:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "id": 1554,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2504:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                          "typeString": "string[]"
                        }
                      }
                    },
                    "id": 1559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2500:40:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_string_memory_$dyn_memory",
                      "typeString": "string memory[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2477:63:6"
                },
                {
                  "body": {
                    "id": 1667,
                    "nodeType": "Block",
                    "src": "2589:597:6",
                    "statements": [
                      {
                        "assignments": [
                          1573
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1573,
                            "name": "purchaser",
                            "nodeType": "VariableDeclaration",
                            "scope": 1672,
                            "src": "2603:17:6",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1572,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2603:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1578,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1576,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1562,
                              "src": "2641:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1574,
                              "name": "_sale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1543,
                              "src": "2623:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                "typeString": "contract ERC20Sale"
                              }
                            },
                            "id": 1575,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "purchaserAt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 86,
                            "src": "2623:17:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view external returns (address)"
                            }
                          },
                          "id": 1577,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2623:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2603:40:6"
                      },
                      {
                        "assignments": [
                          1580
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1580,
                            "name": "row",
                            "nodeType": "VariableDeclaration",
                            "scope": 1672,
                            "src": "2657:17:6",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 1579,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "2657:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1582,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "7b22707572636861736572223a22",
                          "id": 1581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2677:16:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_5c29630f8a518123d33dfe48bb09f337882707d986ce628a455cf947b26f0dbb",
                            "typeString": "literal_string \"{\"purchaser\":\"\""
                          },
                          "value": "{\"purchaser\":\""
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2657:36:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1594,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1583,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "2707:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1588,
                                        "name": "purchaser",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1573,
                                        "src": "2734:9:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "id": 1589,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toString",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3454,
                                      "src": "2734:18:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_string_memory_ptr_$bound_to$_t_address_$",
                                        "typeString": "function (address) pure returns (string memory)"
                                      }
                                    },
                                    "id": 1590,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2734:20:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1591,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2734:28:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2734:30:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1584,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "2713:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1585,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2713:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1586,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2713:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1587,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "2713:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2713:52:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2707:58:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1595,
                        "nodeType": "ExpressionStatement",
                        "src": "2707:58:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1605,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1596,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "2779:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "hexValue": "222c22657468735f696e766573746564223a",
                                    "id": 1601,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2806:20:6",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_65936ccd1d02dbf7637829fc780dde5e17f70edd168795b56e0a68174d806422",
                                      "typeString": "literal_string \"\",\"eths_invested\":\""
                                    },
                                    "value": "\",\"eths_invested\":"
                                  },
                                  "id": 1602,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2806:28:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1603,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2806:30:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1597,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "2785:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1598,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2785:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1599,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2785:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1600,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "2785:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1604,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2785:52:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2779:58:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1606,
                        "nodeType": "ExpressionStatement",
                        "src": "2779:58:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1621,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1607,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "2851:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 1614,
                                            "name": "purchaser",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1573,
                                            "src": "2894:9:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1612,
                                            "name": "_sale",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1543,
                                            "src": "2878:5:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                              "typeString": "contract ERC20Sale"
                                            }
                                          },
                                          "id": 1613,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "paymentOf",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 2776,
                                          "src": "2878:15:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                            "typeString": "function (address) view external returns (uint256)"
                                          }
                                        },
                                        "id": 1615,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2878:26:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1616,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toString",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3594,
                                      "src": "2878:35:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (string memory)"
                                      }
                                    },
                                    "id": 1617,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2878:37:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1618,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2878:45:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1619,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2878:47:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1608,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "2857:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1609,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2857:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1610,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2857:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1611,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "2857:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1620,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2857:69:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2851:75:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1622,
                        "nodeType": "ExpressionStatement",
                        "src": "2851:75:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1623,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "2940:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "hexValue": "2c22746f6b656e735f707572636861736564223a",
                                    "id": 1628,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2967:22:6",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_1001ea9cbbe35936e9ed3f2024a5530ec4da436e4e54c68f2bf481b63224638f",
                                      "typeString": "literal_string \",\"tokens_purchased\":\""
                                    },
                                    "value": ",\"tokens_purchased\":"
                                  },
                                  "id": 1629,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2967:30:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1630,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2967:32:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1624,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "2946:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1625,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "2946:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2946:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1627,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "2946:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1631,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2946:54:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2940:60:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1633,
                        "nodeType": "ExpressionStatement",
                        "src": "2940:60:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1634,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "3014:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 1641,
                                            "name": "purchaser",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1573,
                                            "src": "3061:9:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1639,
                                            "name": "_sale",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1543,
                                            "src": "3041:5:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_ERC20Sale_$444",
                                              "typeString": "contract ERC20Sale"
                                            }
                                          },
                                          "id": 1640,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "tokenAmountOf",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 98,
                                          "src": "3041:19:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                            "typeString": "function (address) view external returns (uint256)"
                                          }
                                        },
                                        "id": 1642,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3041:30:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1643,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toString",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3594,
                                      "src": "3041:39:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (string memory)"
                                      }
                                    },
                                    "id": 1644,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3041:41:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1645,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "3041:49:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1646,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3041:51:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1635,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "3020:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1636,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "3020:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1637,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3020:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1638,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "3020:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3020:73:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3014:79:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1649,
                        "nodeType": "ExpressionStatement",
                        "src": "3014:79:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1659,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1650,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "3107:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "hexValue": "7d",
                                    "id": 1655,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3134:3:6",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff",
                                      "typeString": "literal_string \"}\""
                                    },
                                    "value": "}"
                                  },
                                  "id": 1656,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "3134:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1657,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3134:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1651,
                                    "name": "row",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1580,
                                    "src": "3113:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  "id": 1652,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toSlice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3662,
                                  "src": "3113:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$3602_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                  }
                                },
                                "id": 1653,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3113:13:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$3602_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 1654,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "concat",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5175,
                              "src": "3113:20:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$3602_memory_ptr_$_t_struct$_slice_$3602_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$3602_memory_ptr_$",
                                "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                              }
                            },
                            "id": 1658,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3113:35:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3107:41:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1660,
                        "nodeType": "ExpressionStatement",
                        "src": "3107:41:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1661,
                              "name": "rows",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1552,
                              "src": "3162:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                                "typeString": "string memory[] memory"
                              }
                            },
                            "id": 1663,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1662,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1562,
                              "src": "3167:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3162:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1664,
                            "name": "row",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1580,
                            "src": "3172:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3162:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory",
                            "typeString": "string memory"
                          }
                        },
                        "id": 1666,
                        "nodeType": "ExpressionStatement",
                        "src": "3162:13:6"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1565,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1562,
                      "src": "2567:1:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1566,
                        "name": "rows",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1552,
                        "src": "2571:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                          "typeString": "string memory[] memory"
                        }
                      },
                      "id": 1567,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2571:11:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2567:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1668,
                  "initializationExpression": {
                    "assignments": [
                      1562
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1562,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1672,
                        "src": "2555:6:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1561,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2555:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1564,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2564:1:6",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2555:10:6"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2584:3:6",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1569,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1562,
                        "src": "2584:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1571,
                    "nodeType": "ExpressionStatement",
                    "src": "2584:3:6"
                  },
                  "nodeType": "ForStatement",
                  "src": "2550:636:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1669,
                    "name": "rows",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1552,
                    "src": "3202:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                      "typeString": "string memory[] memory"
                    }
                  },
                  "functionReturnParameters": 1548,
                  "id": 1670,
                  "nodeType": "Return",
                  "src": "3195:11:6"
                }
              ]
            },
            "documentation": null,
            "id": 1672,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_rows",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1541,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1672,
                  "src": "2402:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1540,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2402:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1543,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1672,
                  "src": "2418:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$444",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1542,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 444,
                    "src": "2418:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$444",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2401:33:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 1548,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1547,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1672,
                  "src": "2457:8:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_string_memory_$dyn_memory_ptr",
                    "typeString": "string[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1545,
                      "name": "string",
                      "nodeType": "ElementaryTypeName",
                      "src": "2457:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      }
                    },
                    "id": 1546,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2457:8:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                      "typeString": "string[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2456:10:6"
            },
            "scope": 1673,
            "src": "2387:826:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 1674,
        "src": "257:2958:6"
      }
    ],
    "src": "0:3216:6"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {
    "1": {
      "events": {},
      "links": {},
      "address": "0x34da33386d17c151ba190129a3f103d442adf2b0",
      "transactionHash": "0xb578508b4cfa78f52f168f1c597bb0f7645f9e4869978feeef31040d543c3ff3"
    },
    "3": {
      "events": {},
      "links": {},
      "address": "0x73b67be96323506ba85d64bc5e974a5f8855341a",
      "transactionHash": "0x6aa399c5207eb4226ff24c9b1bddc8381ce4f467a43da7d20f034f8f954e0d39"
    }
  },
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-11-01T09:28:40.939Z"
}