{
  "contractName": "VanillaFDT",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "contract IERC20",
          "name": "_fundsToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "initialAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fundsDistributed",
          "type": "uint256"
        }
      ],
      "name": "FundsDistributed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fundsWithdrawn",
          "type": "uint256"
        }
      ],
      "name": "FundsWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "accumulativeFundsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fundsToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fundsTokenBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "contract IERC20",
          "name": "_fundsToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "initialAmount",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "owners",
          "type": "address[]"
        }
      ],
      "name": "pushFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateFundsReceived",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "withdrawableFundsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "withdrawnFundsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"contract IERC20\",\"name\":\"_fundsToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fundsDistributed\",\"type\":\"uint256\"}],\"name\":\"FundsDistributed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fundsWithdrawn\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"accumulativeFundsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fundsToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fundsTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"contract IERC20\",\"name\":\"_fundsToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialAmount\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"}],\"name\":\"pushFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateFundsReceived\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"withdrawableFundsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"withdrawnFundsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accumulativeFundsOf(address)\":{\"details\":\"accumulativeFundsOf(_owner) = withdrawableFundsOf(_owner) + withdrawnFundsOf(_owner) = (pointsPerShare * balanceOf(_owner) + pointsCorrection[_owner]) / pointsMultiplier\",\"params\":{\"_owner\":\"The address of a token holder.\"},\"returns\":{\"_0\":\"The amount of funds that `_owner` has earned in total.\"}},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"initialize(string,string,address,address,uint256)\":{\"details\":\"\\\"constructor\\\" to be called on deployment\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateFundsReceived()\":{\"details\":\"Calls _updateFundsTokenBalance(), whereby the contract computes the delta of the previous and the new funds token balance and increments the total received funds (cumulative) by delta by calling _registerFunds()\"},\"withdrawableFundsOf(address)\":{\"params\":{\"_owner\":\"The address of a token holder.\"},\"returns\":{\"_0\":\"The amount funds that `_owner` can withdraw.\"}},\"withdrawnFundsOf(address)\":{\"params\":{\"_owner\":\"The address of a token holder.\"},\"returns\":{\"_0\":\"The amount of funds that `_owner` has withdrawn.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"accumulativeFundsOf(address)\":{\"notice\":\"prev. accumulativeDividendOfView the amount of funds that an address has earned in total.\"},\"burn(address,uint256)\":{\"notice\":\"Exposes the ability to burn exisiting FDTs for a given account. Caller has to be the owner of the FDT.\"},\"initialize(string,string,address,address,uint256)\":{\"notice\":\"Initialize a new instance storage\"},\"mint(address,uint256)\":{\"notice\":\"Exposes the ability to mint new FDTs for a given account. Caller has to be the owner of the FDT.\"},\"pushFunds(address[])\":{\"notice\":\"Withdraws funds for a set of token holders\"},\"transfer(address,uint256)\":{\"notice\":\"Overrides the parent class token transfer function to enforce restrictions.\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Overrides the parent class token transferFrom function to enforce restrictions.\"},\"updateFundsReceived()\":{\"notice\":\"Register a payment of funds in tokens. May be called directly after a deposit is made.\"},\"withdrawFunds()\":{\"notice\":\"Withdraws all available funds for a token holder\"},\"withdrawableFundsOf(address)\":{\"notice\":\"prev. withdrawableDividendOfView the amount of funds that an address can withdraw.\"},\"withdrawnFundsOf(address)\":{\"notice\":\"prev. withdrawnDividendOfView the amount of funds that an address has withdrawn.\"}},\"notice\":\"This contract, unlike its parent contract, is entirely instantiated by the `constructor`. Therefore this contract may NOT be used with a proxy that `delegatecall`s it.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/VanillaFDT.sol\":\"VanillaFDT\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/FundsDistributionToken.sol\":{\"keccak256\":\"0x91b13e01fdef718f2d5a64d9d4051dd8495913ac78c2309342e6af7656d1ee21\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d9a17efea849552722739b1ffb0878a80da99072e6af5d8c2bd563dce00ebc29\",\"dweb:/ipfs/QmamL6A7LoLuqwNngKY3NPzZgpihiBPERFCbVB5G5wuPT5\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/IFundsDistributionToken.sol\":{\"keccak256\":\"0x357c01314146027ec6d250d5b29824bd795e00578b0b888b8c8063d1f49bfec8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4ba4486b5f8d60500cc1f8af3c9859c4bd0ee07a279f94b67ba1393391e54154\",\"dweb:/ipfs/QmNxYYnyPLh2vNJLzoPAVhHBxvuczBo24GDmRS61nD4ABv\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/IInitializableFDT.sol\":{\"keccak256\":\"0x367de24e2fcd7cd02aabe65af0afc0c5184781135bb826835a82d406f33c93b5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f08d02e99e8daf2be5f2067c12f2c81aff1983fa49eebbe9cf5bea75ae4f308c\",\"dweb:/ipfs/QmX1xtraEs8QwFF9tBTBPnuoU5mP3k9X9U1Y9eMoEjNyB7\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/ProxySafeVanillaFDT.sol\":{\"keccak256\":\"0xf69b0544f6af67822b688e362b7df0b9a5ebe8b3720f4b134b991a8c3d62784f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b877d66e6021fea995db36629f26e9c9826cc9e79ed91b69a90dbb8d289fdc0c\",\"dweb:/ipfs/QmdB6kHkvA6ADTaWUYNjQDsFuCVJ7wRtbPxyK7cSucZMQK\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/VanillaFDT.sol\":{\"keccak256\":\"0x6f1286cf24fc67247e63fda70300da7bead532dbf97b11439fc6e803144552ec\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fede72e923f6f6d086c37290eeaceede230625f30410839aab04acdeb242cc5c\",\"dweb:/ipfs/QmVUphXmQRot8vqwug4LSkRRzKQSHtW578viSqSEmctMDR\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/math/SafeMathInt.sol\":{\"keccak256\":\"0xc53b786fe1e9a4a207e503272ca7bf485f4872a196fcdf9b209ff18a025857ae\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://99aef73723a7dac14a7a407036d85fe6070ea280e8509f214bf709321c1b7d68\",\"dweb:/ipfs/QmQW5ygUX2EJMQkUmNt3q18VrtrCEiNeape7JaUh19p1tF\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/math/SafeMathUint.sol\":{\"keccak256\":\"0xdba5f11842c7ef0d82b4fdccf5430ae81d677c426a8bbe1c5dd4df62ab9e43d9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://216bba31081f8f7bae15fbd79648300a04740c472f23957963354497d82d86b2\",\"dweb:/ipfs/QmXMnSfoSKbobfQkcRExx8RC5ZSPCCiNdcb1xy3v3vGgWV\"]},\"@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol\":{\"keccak256\":\"0xe81686511d62f18b2d9c693c2c94c0a789c690de63aa90e15451ebf65c5bfd3e\",\"urls\":[\"bzz-raw://1332ee1d2b096456bf2e5795b5871d0fed47be6a31c9a2f2cef9206a299565ea\",\"dweb:/ipfs/Qmdu1847Y4UL3gTjbLUManMGfxYEoyGPSodM3Br89SKzwx\"]},\"@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol\":{\"keccak256\":\"0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721\",\"urls\":[\"bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f\",\"dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7\"]},\"@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol\":{\"keccak256\":\"0x04a69a78363214b4e3055db8e620bed222349f0c81e9d1cbe769eb849b69b73f\",\"urls\":[\"bzz-raw://b3115459376196d6c2c3817439c169d9b052b27b70e8ee2e28963cda760736da\",\"dweb:/ipfs/QmXaNF5rmcDSAzBiFMQjf979qb9xNXqD9eZtgo4uM9VEis\"]},\"@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x04d34b3cd5677bea25f8dfceb6dec0eaa071d4d4b789a43f13fe0c415ba4c296\",\"urls\":[\"bzz-raw://e7e8b526a6839e5ba14f0d23a830387fec47f7043ce01d42c9f285b709a9d080\",\"dweb:/ipfs/QmXmhhFmX5gcAvVzNiDPAGA35iHMPNaYtQkACswRHBVTNw\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x9c2d859bc9de93ced0875d226598e56067fe4d6b2dde0e1fd53ca60fa9603db0\",\"urls\":[\"bzz-raw://5df1baba4ea42a94d0e0aed4a87271369ef2cd54d86e89cab7ef1428ff387210\",\"dweb:/ipfs/QmV5ErriAFQWqEPAfWhJ6DxmujH6vBPB3F5Breaq9vUWGu\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x6cc1cb934a3ac2137a7dcaed018af9e235392236ceecfd3687259702b9c767ad\",\"urls\":[\"bzz-raw://0055fa88138cd1c3c6440370f8580f85857f8fe9dec41c99af9eafbeb8d9c3ce\",\"dweb:/ipfs/QmX1xDh8vwGLLCH8ti45eXjQ7Wcxv1FEGTR3jkFnd5Nv6F\"]},\"@openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol\":{\"keccak256\":\"0x5f7da58ee3d9faa9b8999a93d49c8ff978f1afc88ae9bcfc6f9cbb44da011c2b\",\"urls\":[\"bzz-raw://4f089d954b3ecaa26949412fe63e9a184b056562c6c13dd4a0529a5d9a2e685a\",\"dweb:/ipfs/QmVK5iCNAMcEJQxT59bsC5E53JQASDQPU6khHox3d5ZXCn\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162002cda38038062002cda833981810160405260a08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b506040908152602082015190820151606090920151909350909150620001cb85858585856001600160e01b03620001d616565b505050505062000c0f565b600054610100900460ff1680620001fb5750620001fb6001600160e01b036200033c16565b806200020a575060005460ff16155b620002475760405162461bcd60e51b815260040180806020018281038252602e81526020018062002c85602e913960400191505060405180910390fd5b600054610100900460ff1615801562000273576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038416620002ba5760405162461bcd60e51b815260040180806020018281038252602781526020018062002cb36027913960400191505060405180910390fd5b620002d186866200034360201b62000dd31760201c565b620002e66200042060201b62000e891760201c565b60cc80546001600160a01b0319166001600160a01b0386161790556200030c83620004f9565b6200032183836001600160e01b036200060116565b801562000334576000805461ff00191690555b505050505050565b303b155b90565b600054610100900460ff1680620003685750620003686001600160e01b036200033c16565b8062000377575060005460ff16155b620003b45760405162461bcd60e51b815260040180806020018281038252602e81526020018062002c85602e913960400191505060405180910390fd5b600054610100900460ff16158015620003e0576000805460ff1961ff0019909116610100171660011790555b620003f36001600160e01b036200069a16565b6200040883836001600160e01b036200074b16565b80156200041b576000805461ff00191690555b505050565b600054610100900460ff1680620004455750620004456001600160e01b036200033c16565b8062000454575060005460ff16155b620004915760405162461bcd60e51b815260040180806020018281038252602e81526020018062002c85602e913960400191505060405180910390fd5b600054610100900460ff16158015620004bd576000805460ff1961ff0019909116610100171660011790555b620004d06001600160e01b036200069a16565b620004e36001600160e01b036200083816565b8015620004f6576000805461ff00191690555b50565b6200050c6001600160e01b036200093c16565b609a546001600160a01b039081169116146200056f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005b65760405162461bcd60e51b815260040180806020018281038252602681526020018062002c1e6026913960400191505060405180910390fd5b609a546040516001600160a01b0380841692169060008051602062002c6583398151915290600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b6200061882826200094060201b62000f3a1760201c565b6200067a6200064d6200063c8360975462000a5c60201b620010381790919060201c565b62000ac360201b620010911760201c565b6001600160a01b0384166000908152609860209081526040909120549190620010a162000ad4821b17901c565b6001600160a01b0390921660009081526098602052604090209190915550565b600054610100900460ff1680620006bf5750620006bf6001600160e01b036200033c16565b80620006ce575060005460ff16155b6200070b5760405162461bcd60e51b815260040180806020018281038252602e81526020018062002c85602e913960400191505060405180910390fd5b600054610100900460ff16158015620004e3576000805460ff1961ff0019909116610100171660011790558015620004f6576000805461ff001916905550565b600054610100900460ff1680620007705750620007706001600160e01b036200033c16565b806200077f575060005460ff16155b620007bc5760405162461bcd60e51b815260040180806020018281038252602e81526020018062002c85602e913960400191505060405180910390fd5b600054610100900460ff16158015620007e8576000805460ff1961ff0019909116610100171660011790555b8251620007fd90606890602086019062000b6d565b5081516200081390606990602085019062000b6d565b50606a805460ff1916601217905580156200041b576000805461ff0019169055505050565b600054610100900460ff16806200085d57506200085d6001600160e01b036200033c16565b806200086c575060005460ff16155b620008a95760405162461bcd60e51b815260040180806020018281038252602e81526020018062002c85602e913960400191505060405180910390fd5b600054610100900460ff16158015620008d5576000805460ff1961ff0019909116610100171660011790555b6000620008ea6001600160e01b036200093c16565b609a80546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062002c65833981519152908290a3508015620004f6576000805461ff001916905550565b3390565b6001600160a01b0382166200099c576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b620009b3600083836001600160e01b036200041b16565b620009cf8160675462000b1260201b620010db1790919060201c565b6067556001600160a01b03821660009081526065602090815260409091205462000a04918390620010db62000b12821b17901c565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008262000a6d5750600062000abd565b8282028284828162000a7b57fe5b041462000aba5760405162461bcd60e51b815260040180806020018281038252602181526020018062002c446021913960400191505060405180910390fd5b90505b92915050565b6000818181121562000abd57600080fd5b600080821215801562000ae957508282840313155b8062000b02575060008212801562000b02575082828403135b62000b0c57600080fd5b50900390565b60008282018381101562000aba576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000bb057805160ff191683800117855562000be0565b8280016001018555821562000be0579182015b8281111562000be057825182559160200191906001019062000bc3565b5062000bee92915062000bf2565b5090565b6200034091905b8082111562000bee576000815560010162000bf9565b611fff8062000c1f6000396000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c80634e97415f116100de5780639dc29fac11610097578063a9691f3f11610071578063a9691f3f14610507578063c9aba0aa1461050f578063dd62ed3e14610654578063f2fde38b1461068257610172565b80639dc29fac14610483578063a457c2d7146104af578063a9059cbb146104db57610172565b80634e97415f146103fb57806363f04b151461042157806370a0823114610445578063715018a61461046b5780638da5cb5b1461047357806395d89b411461047b57610172565b8063313ce56711610130578063313ce567146102b457806339509351146102d257806340c10f19146102fe578063443bb2931461032a57806345f634f21461035057806346c162de146103f357610172565b806241c52c1461017757806306fdde03146101af578063095ea7b31461022c57806318160ddd1461026c57806323b872dd1461027457806324600fc3146102aa575b600080fd5b61019d6004803603602081101561018d57600080fd5b50356001600160a01b03166106a8565b60408051918252519081900360200190f35b6101b76106c3565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f15781810151838201526020016101d9565b50505050905090810190601f16801561021e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102586004803603604081101561024257600080fd5b506001600160a01b03813516906020013561075a565b604080519115158252519081900360200190f35b61019d610778565b6102586004803603606081101561028a57600080fd5b506001600160a01b0381358116916020810135909116906040013561077e565b6102b2610793565b005b6102bc61079e565b6040805160ff9092168252519081900360200190f35b610258600480360360408110156102e857600080fd5b506001600160a01b0381351690602001356107a7565b6102586004803603604081101561031457600080fd5b506001600160a01b038135169060200135610800565b61019d6004803603602081101561034057600080fd5b50356001600160a01b0316610864565b6102b26004803603602081101561036657600080fd5b81019060208101813564010000000081111561038157600080fd5b82018360208201111561039357600080fd5b803590602001918460208302840111640100000000831117156103b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610896945050505050565b6102b26108ca565b61019d6004803603602081101561041157600080fd5b50356001600160a01b03166108f3565b61042961095c565b604080516001600160a01b039092168252519081900360200190f35b61019d6004803603602081101561045b57600080fd5b50356001600160a01b031661096b565b6102b2610986565b610429610a28565b6101b7610a37565b6102586004803603604081101561049957600080fd5b506001600160a01b038135169060200135610a98565b610258600480360360408110156104c557600080fd5b506001600160a01b038135169060200135610afc565b610258600480360360408110156104f157600080fd5b506001600160a01b038135169060200135610b6a565b61019d610b7d565b6102b2600480360360a081101561052557600080fd5b81019060208101813564010000000081111561054057600080fd5b82018360208201111561055257600080fd5b8035906020019184600183028401116401000000008311171561057457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156105c757600080fd5b8201836020820111156105d957600080fd5b803590602001918460018302840111640100000000831117156105fb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401351692604001359150610b839050565b61019d6004803603604081101561066a57600080fd5b506001600160a01b0381358116916020013516610caf565b6102b26004803603602081101561069857600080fd5b50356001600160a01b0316610cda565b6001600160a01b031660009081526099602052604090205490565b60688054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561074f5780601f106107245761010080835404028352916020019161074f565b820191906000526020600020905b81548152906001019060200180831161073257829003601f168201915b505050505090505b90565b600061076e610767611135565b8484611139565b5060015b92915050565b60675490565b600061078b848484611225565b949350505050565b61079c336112ad565b565b606a5460ff1690565b600061076e6107b4611135565b846107fb85606660006107c5611135565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6110db16565b611139565b600061080a611135565b609a546001600160a01b0390811691161461085a576040805162461bcd60e51b81526020600482018190526024820152600080516020611e9d833981519152604482015290519081900360640190fd5b61076e838361137f565b6001600160a01b0381166000908152609960205260408120546107729061088a846108f3565b9063ffffffff6113e916565b60005b81518110156108c6576108be8282815181106108b157fe5b60200260200101516112ad565b600101610899565b5050565b60006108d461142b565b905060008113156108f0576108f06108eb826114c1565b6114d4565b50565b6001600160a01b038116600090815260986020526040812054600160801b9061094e906109499061093d6109386109298861096b565b6097549063ffffffff61103816565b611091565b9063ffffffff61159316565b6114c1565b8161095557fe5b0492915050565b60cc546001600160a01b031681565b6001600160a01b031660009081526065602052604090205490565b61098e611135565b609a546001600160a01b039081169116146109de576040805162461bcd60e51b81526020600482018190526024820152600080516020611e9d833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609a80546001600160a01b0319169055565b609a546001600160a01b031690565b60698054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561074f5780601f106107245761010080835404028352916020019161074f565b6000610aa2611135565b609a546001600160a01b03908116911614610af2576040805162461bcd60e51b81526020600482018190526024820152600080516020611e9d833981519152604482015290519081900360640190fd5b61076e83836115c6565b600061076e610b09611135565b846107fb85604051806060016040528060258152602001611fa56025913960666000610b33611135565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61161016565b6000610b7683836116a7565b9392505050565b60cd5481565b600054610100900460ff1680610b9c5750610b9c6116bb565b80610baa575060005460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff16158015610c10576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038416610c555760405162461bcd60e51b8152600401808060200182810382526027815260200180611f7e6027913960400191505060405180910390fd5b610c5f8686610dd3565b610c67610e89565b60cc80546001600160a01b0319166001600160a01b038616179055610c8b83610cda565b610c95838361137f565b8015610ca7576000805461ff00191690555b505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b610ce2611135565b609a546001600160a01b03908116911614610d32576040805162461bcd60e51b81526020600482018190526024820152600080516020611e9d833981519152604482015290519081900360640190fd5b6001600160a01b038116610d775760405162461bcd60e51b8152600401808060200182810382526026815260200180611daf6026913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1680610dec5750610dec6116bb565b80610dfa575060005460ff16155b610e355760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff16158015610e60576000805460ff1961ff0019909116610100171660011790555b610e686116c1565b610e728383611761565b8015610e84576000805461ff00191690555b505050565b600054610100900460ff1680610ea25750610ea26116bb565b80610eb0575060005460ff16155b610eeb5760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff16158015610f16576000805460ff1961ff0019909116610100171660011790555b610f1e6116c1565b610f26611839565b80156108f0576000805461ff001916905550565b6001600160a01b038216610f95576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610fa160008383610e84565b606754610fb4908263ffffffff6110db16565b6067556001600160a01b038216600090815260656020526040902054610fe0908263ffffffff6110db16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008261104757506000610772565b8282028284828161105457fe5b0414610b765760405162461bcd60e51b8152600401808060200182810382526021815260200180611e546021913960400191505060405180910390fd5b6000818181121561077257600080fd5b60008082121580156110b557508282840313155b806110cc57506000821280156110cc575082828403135b6110d557600080fd5b50900390565b600082820183811015610b76576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b03831661117e5760405162461bcd60e51b8152600401808060200182810382526024815260200180611f316024913960400191505060405180910390fd5b6001600160a01b0382166111c35760405162461bcd60e51b8152600401808060200182810382526022815260200180611dd56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000611232848484611932565b6112a38461123e611135565b6107fb85604051806060016040528060288152602001611e75602891396001600160a01b038a1660009081526066602052604081209061127c611135565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61161016565b5060019392505050565b60006112b8826119da565b60cc546040805163a9059cbb60e01b81526001600160a01b03868116600483015260248201859052915193945091169163a9059cbb916044808201926020929091908290030181600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505050506040513d602081101561133a57600080fd5b50516113775760405162461bcd60e51b8152600401808060200182810382526029815260200180611f556029913960400191505060405180910390fd5b610e8461142b565b6113898282610f3a565b6113c96113a46109388360975461103890919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff6110a116565b6001600160a01b0390921660009081526098602052604090209190915550565b6000610b7683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611610565b60cd5460cc54604080516370a0823160e01b81523060048201529051600093926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561147a57600080fd5b505afa15801561148e573d6000803e3d6000fd5b505050506040513d60208110156114a457600080fd5b505160cd8190556114bb908263ffffffff6110a116565b91505090565b6000808212156114d057600080fd5b5090565b60006114de610778565b1161151a5760405162461bcd60e51b8152600401808060200182810382526037815260200180611e1d6037913960400191505060405180910390fd5b80156108f05761155761152b610778565b61153f83600160801b63ffffffff61103816565b8161154657fe5b60975491900463ffffffff6110db16565b60975560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a250565b60008282018183128015906115a85750838112155b806115bd57506000831280156115bd57508381125b610b7657600080fd5b6115d08282611a6a565b6113c96115eb6109388360975461103890919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff61159316565b6000818484111561169f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561166457818101518382015260200161164c565b50505050905090810190601f1680156116915780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061076e6116b4611135565b8484611932565b303b1590565b600054610100900460ff16806116da57506116da6116bb565b806116e8575060005460ff16155b6117235760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff16158015610f26576000805460ff1961ff00199091166101001716600117905580156108f0576000805461ff001916905550565b600054610100900460ff168061177a575061177a6116bb565b80611788575060005460ff16155b6117c35760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff161580156117ee576000805460ff1961ff0019909116610100171660011790555b8251611801906068906020860190611cdb565b508151611815906069906020850190611cdb565b50606a805460ff191660121790558015610e84576000805461ff0019169055505050565b600054610100900460ff168061185257506118526116bb565b80611860575060005460ff16155b61189b5760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff161580156118c6576000805460ff1961ff0019909116610100171660011790555b60006118d0611135565b609a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156108f0576000805461ff001916905550565b61193d838383611b72565b60006119576109388360975461103890919063ffffffff16565b6001600160a01b038516600090815260986020526040902054909150611983908263ffffffff61159316565b6001600160a01b0380861660009081526098602052604080822093909355908516815220546119b8908263ffffffff6110a116565b6001600160a01b03909316600090815260986020526040902092909255505050565b6000806119e683610864565b6001600160a01b038416600090815260996020526040902054909150611a12908263ffffffff6110db16565b6001600160a01b038416600081815260996020908152604091829020939093558051848152905191927feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d92918290030190a292915050565b6001600160a01b038216611aaf5760405162461bcd60e51b8152600401808060200182810382526021815260200180611eeb6021913960400191505060405180910390fd5b611abb82600083610e84565b611afe81604051806060016040528060228152602001611d8d602291396001600160a01b038516600090815260656020526040902054919063ffffffff61161016565b6001600160a01b038316600090815260656020526040902055606754611b2a908263ffffffff6113e916565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038316611bb75760405162461bcd60e51b8152600401808060200182810382526025815260200180611f0c6025913960400191505060405180910390fd5b6001600160a01b038216611bfc5760405162461bcd60e51b8152600401808060200182810382526023815260200180611d6a6023913960400191505060405180910390fd5b611c07838383610e84565b611c4a81604051806060016040528060268152602001611df7602691396001600160a01b038616600090815260656020526040902054919063ffffffff61161016565b6001600160a01b038085166000908152606560205260408082209390935590841681522054611c7f908263ffffffff6110db16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611d1c57805160ff1916838001178555611d49565b82800160010185558215611d49579182015b82811115611d49578251825591602001919060010190611d2e565b506114d0926107579250905b808211156114d05760008155600101611d5556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636546756e6473446973747269627574696f6e546f6b656e2e5f6469737472696275746546756e64733a20535550504c595f49535f5a45524f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737356616e696c6c614644542e776974686472617746756e64733a205452414e534645525f4641494c454456616e696c6c614644543a20494e56414c49445f46554e44535f544f4b454e5f4144445245535345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207edc139abe50707899654215501db004e3c0073d601676065dcb44889005099a64736f6c634300060b00334f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656456616e696c6c614644543a20494e56414c49445f46554e44535f544f4b454e5f41444452455353",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101725760003560e01c80634e97415f116100de5780639dc29fac11610097578063a9691f3f11610071578063a9691f3f14610507578063c9aba0aa1461050f578063dd62ed3e14610654578063f2fde38b1461068257610172565b80639dc29fac14610483578063a457c2d7146104af578063a9059cbb146104db57610172565b80634e97415f146103fb57806363f04b151461042157806370a0823114610445578063715018a61461046b5780638da5cb5b1461047357806395d89b411461047b57610172565b8063313ce56711610130578063313ce567146102b457806339509351146102d257806340c10f19146102fe578063443bb2931461032a57806345f634f21461035057806346c162de146103f357610172565b806241c52c1461017757806306fdde03146101af578063095ea7b31461022c57806318160ddd1461026c57806323b872dd1461027457806324600fc3146102aa575b600080fd5b61019d6004803603602081101561018d57600080fd5b50356001600160a01b03166106a8565b60408051918252519081900360200190f35b6101b76106c3565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f15781810151838201526020016101d9565b50505050905090810190601f16801561021e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102586004803603604081101561024257600080fd5b506001600160a01b03813516906020013561075a565b604080519115158252519081900360200190f35b61019d610778565b6102586004803603606081101561028a57600080fd5b506001600160a01b0381358116916020810135909116906040013561077e565b6102b2610793565b005b6102bc61079e565b6040805160ff9092168252519081900360200190f35b610258600480360360408110156102e857600080fd5b506001600160a01b0381351690602001356107a7565b6102586004803603604081101561031457600080fd5b506001600160a01b038135169060200135610800565b61019d6004803603602081101561034057600080fd5b50356001600160a01b0316610864565b6102b26004803603602081101561036657600080fd5b81019060208101813564010000000081111561038157600080fd5b82018360208201111561039357600080fd5b803590602001918460208302840111640100000000831117156103b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610896945050505050565b6102b26108ca565b61019d6004803603602081101561041157600080fd5b50356001600160a01b03166108f3565b61042961095c565b604080516001600160a01b039092168252519081900360200190f35b61019d6004803603602081101561045b57600080fd5b50356001600160a01b031661096b565b6102b2610986565b610429610a28565b6101b7610a37565b6102586004803603604081101561049957600080fd5b506001600160a01b038135169060200135610a98565b610258600480360360408110156104c557600080fd5b506001600160a01b038135169060200135610afc565b610258600480360360408110156104f157600080fd5b506001600160a01b038135169060200135610b6a565b61019d610b7d565b6102b2600480360360a081101561052557600080fd5b81019060208101813564010000000081111561054057600080fd5b82018360208201111561055257600080fd5b8035906020019184600183028401116401000000008311171561057457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156105c757600080fd5b8201836020820111156105d957600080fd5b803590602001918460018302840111640100000000831117156105fb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401351692604001359150610b839050565b61019d6004803603604081101561066a57600080fd5b506001600160a01b0381358116916020013516610caf565b6102b26004803603602081101561069857600080fd5b50356001600160a01b0316610cda565b6001600160a01b031660009081526099602052604090205490565b60688054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561074f5780601f106107245761010080835404028352916020019161074f565b820191906000526020600020905b81548152906001019060200180831161073257829003601f168201915b505050505090505b90565b600061076e610767611135565b8484611139565b5060015b92915050565b60675490565b600061078b848484611225565b949350505050565b61079c336112ad565b565b606a5460ff1690565b600061076e6107b4611135565b846107fb85606660006107c5611135565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6110db16565b611139565b600061080a611135565b609a546001600160a01b0390811691161461085a576040805162461bcd60e51b81526020600482018190526024820152600080516020611e9d833981519152604482015290519081900360640190fd5b61076e838361137f565b6001600160a01b0381166000908152609960205260408120546107729061088a846108f3565b9063ffffffff6113e916565b60005b81518110156108c6576108be8282815181106108b157fe5b60200260200101516112ad565b600101610899565b5050565b60006108d461142b565b905060008113156108f0576108f06108eb826114c1565b6114d4565b50565b6001600160a01b038116600090815260986020526040812054600160801b9061094e906109499061093d6109386109298861096b565b6097549063ffffffff61103816565b611091565b9063ffffffff61159316565b6114c1565b8161095557fe5b0492915050565b60cc546001600160a01b031681565b6001600160a01b031660009081526065602052604090205490565b61098e611135565b609a546001600160a01b039081169116146109de576040805162461bcd60e51b81526020600482018190526024820152600080516020611e9d833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609a80546001600160a01b0319169055565b609a546001600160a01b031690565b60698054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561074f5780601f106107245761010080835404028352916020019161074f565b6000610aa2611135565b609a546001600160a01b03908116911614610af2576040805162461bcd60e51b81526020600482018190526024820152600080516020611e9d833981519152604482015290519081900360640190fd5b61076e83836115c6565b600061076e610b09611135565b846107fb85604051806060016040528060258152602001611fa56025913960666000610b33611135565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61161016565b6000610b7683836116a7565b9392505050565b60cd5481565b600054610100900460ff1680610b9c5750610b9c6116bb565b80610baa575060005460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff16158015610c10576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038416610c555760405162461bcd60e51b8152600401808060200182810382526027815260200180611f7e6027913960400191505060405180910390fd5b610c5f8686610dd3565b610c67610e89565b60cc80546001600160a01b0319166001600160a01b038616179055610c8b83610cda565b610c95838361137f565b8015610ca7576000805461ff00191690555b505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b610ce2611135565b609a546001600160a01b03908116911614610d32576040805162461bcd60e51b81526020600482018190526024820152600080516020611e9d833981519152604482015290519081900360640190fd5b6001600160a01b038116610d775760405162461bcd60e51b8152600401808060200182810382526026815260200180611daf6026913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1680610dec5750610dec6116bb565b80610dfa575060005460ff16155b610e355760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff16158015610e60576000805460ff1961ff0019909116610100171660011790555b610e686116c1565b610e728383611761565b8015610e84576000805461ff00191690555b505050565b600054610100900460ff1680610ea25750610ea26116bb565b80610eb0575060005460ff16155b610eeb5760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff16158015610f16576000805460ff1961ff0019909116610100171660011790555b610f1e6116c1565b610f26611839565b80156108f0576000805461ff001916905550565b6001600160a01b038216610f95576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610fa160008383610e84565b606754610fb4908263ffffffff6110db16565b6067556001600160a01b038216600090815260656020526040902054610fe0908263ffffffff6110db16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008261104757506000610772565b8282028284828161105457fe5b0414610b765760405162461bcd60e51b8152600401808060200182810382526021815260200180611e546021913960400191505060405180910390fd5b6000818181121561077257600080fd5b60008082121580156110b557508282840313155b806110cc57506000821280156110cc575082828403135b6110d557600080fd5b50900390565b600082820183811015610b76576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b03831661117e5760405162461bcd60e51b8152600401808060200182810382526024815260200180611f316024913960400191505060405180910390fd5b6001600160a01b0382166111c35760405162461bcd60e51b8152600401808060200182810382526022815260200180611dd56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000611232848484611932565b6112a38461123e611135565b6107fb85604051806060016040528060288152602001611e75602891396001600160a01b038a1660009081526066602052604081209061127c611135565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61161016565b5060019392505050565b60006112b8826119da565b60cc546040805163a9059cbb60e01b81526001600160a01b03868116600483015260248201859052915193945091169163a9059cbb916044808201926020929091908290030181600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505050506040513d602081101561133a57600080fd5b50516113775760405162461bcd60e51b8152600401808060200182810382526029815260200180611f556029913960400191505060405180910390fd5b610e8461142b565b6113898282610f3a565b6113c96113a46109388360975461103890919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff6110a116565b6001600160a01b0390921660009081526098602052604090209190915550565b6000610b7683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611610565b60cd5460cc54604080516370a0823160e01b81523060048201529051600093926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561147a57600080fd5b505afa15801561148e573d6000803e3d6000fd5b505050506040513d60208110156114a457600080fd5b505160cd8190556114bb908263ffffffff6110a116565b91505090565b6000808212156114d057600080fd5b5090565b60006114de610778565b1161151a5760405162461bcd60e51b8152600401808060200182810382526037815260200180611e1d6037913960400191505060405180910390fd5b80156108f05761155761152b610778565b61153f83600160801b63ffffffff61103816565b8161154657fe5b60975491900463ffffffff6110db16565b60975560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a250565b60008282018183128015906115a85750838112155b806115bd57506000831280156115bd57508381125b610b7657600080fd5b6115d08282611a6a565b6113c96115eb6109388360975461103890919063ffffffff16565b6001600160a01b0384166000908152609860205260409020549063ffffffff61159316565b6000818484111561169f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561166457818101518382015260200161164c565b50505050905090810190601f1680156116915780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061076e6116b4611135565b8484611932565b303b1590565b600054610100900460ff16806116da57506116da6116bb565b806116e8575060005460ff16155b6117235760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff16158015610f26576000805460ff1961ff00199091166101001716600117905580156108f0576000805461ff001916905550565b600054610100900460ff168061177a575061177a6116bb565b80611788575060005460ff16155b6117c35760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff161580156117ee576000805460ff1961ff0019909116610100171660011790555b8251611801906068906020860190611cdb565b508151611815906069906020850190611cdb565b50606a805460ff191660121790558015610e84576000805461ff0019169055505050565b600054610100900460ff168061185257506118526116bb565b80611860575060005460ff16155b61189b5760405162461bcd60e51b815260040180806020018281038252602e815260200180611ebd602e913960400191505060405180910390fd5b600054610100900460ff161580156118c6576000805460ff1961ff0019909116610100171660011790555b60006118d0611135565b609a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156108f0576000805461ff001916905550565b61193d838383611b72565b60006119576109388360975461103890919063ffffffff16565b6001600160a01b038516600090815260986020526040902054909150611983908263ffffffff61159316565b6001600160a01b0380861660009081526098602052604080822093909355908516815220546119b8908263ffffffff6110a116565b6001600160a01b03909316600090815260986020526040902092909255505050565b6000806119e683610864565b6001600160a01b038416600090815260996020526040902054909150611a12908263ffffffff6110db16565b6001600160a01b038416600081815260996020908152604091829020939093558051848152905191927feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d92918290030190a292915050565b6001600160a01b038216611aaf5760405162461bcd60e51b8152600401808060200182810382526021815260200180611eeb6021913960400191505060405180910390fd5b611abb82600083610e84565b611afe81604051806060016040528060228152602001611d8d602291396001600160a01b038516600090815260656020526040902054919063ffffffff61161016565b6001600160a01b038316600090815260656020526040902055606754611b2a908263ffffffff6113e916565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038316611bb75760405162461bcd60e51b8152600401808060200182810382526025815260200180611f0c6025913960400191505060405180910390fd5b6001600160a01b038216611bfc5760405162461bcd60e51b8152600401808060200182810382526023815260200180611d6a6023913960400191505060405180910390fd5b611c07838383610e84565b611c4a81604051806060016040528060268152602001611df7602691396001600160a01b038616600090815260656020526040902054919063ffffffff61161016565b6001600160a01b038085166000908152606560205260408082209390935590841681522054611c7f908263ffffffff6110db16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611d1c57805160ff1916838001178555611d49565b82800160010185558215611d49579182015b82811115611d49578251825591602001919060010190611d2e565b506114d0926107579250905b808211156114d05760008155600101611d5556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636546756e6473446973747269627574696f6e546f6b656e2e5f6469737472696275746546756e64733a20535550504c595f49535f5a45524f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737356616e696c6c614644542e776974686472617746756e64733a205452414e534645525f4641494c454456616e696c6c614644543a20494e56414c49445f46554e44535f544f4b454e5f4144445245535345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207edc139abe50707899654215501db004e3c0073d601676065dcb44889005099a64736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "294:336:54:-:0;;;344:283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;344:283:54;;;;;;;;;;-1:-1:-1;344:283:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;344:283:54;;;;;;;;;;-1:-1:-1;344:283:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;344:283:54;;;;;;;;;;;;;;;;;;;-1:-1:-1;344:283:54;;-1:-1:-1;561:59:54::1;572:4:::0;578:6;344:283;;;-1:-1:-1;;;;;561:10:54::1;:59:::0;:::i:1;:::-;344:283:::0;;;;;294:336;;1810:512:52;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;-1:-1:-1;;;;;2035:34:52;::::1;2014:120;;;;-1:-1:-1::0;;;2014:120:52::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2145:32;2164:4;2170:6;2145:18;;;;;:32;;:::i;:::-;2187:22;:20;;;;;:22;;:::i;:::-;2220:10;:24:::0;;-1:-1:-1;;;;;;2220:24:52::1;-1:-1:-1::0;;;;;2220:24:52;::::1;;::::0;;2254::::1;2272:5:::0;2254:17:::1;:24::i;:::-;2288:27;2294:5:::0;2301:13;-1:-1:-1;;;;;2288:5:52::1;:27:::0;:::i:1;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;1810:512:52;;;;;;:::o;1409:498:108:-;1820:4;1864:17;1895:7;1409:498;;:::o;2046:174:111:-;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;2141:26:111::1;-1:-1:-1::0;;;;;2141:24:111::1;:26:::0;:::i:1;:::-;2177:36;2200:4:::0;2206:6;-1:-1:-1;;;;;2177:22:111::1;:36:::0;:::i:1;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;2046:174:111;;;:::o;867:126:109:-;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;924:26:109::1;-1:-1:-1::0;;;;;924:24:109::1;:26:::0;:::i:1;:::-;960;-1:-1:-1::0;;;;;960:24:109::1;:26:::0;:::i:1;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;867:126:109;:::o;2188:240::-;1485:12;-1:-1:-1;;;;;1485:10:109;:12;:::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2276:22:109;::::1;2268:73;;;;-1:-1:-1::0;;;2268:73:109::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:6;::::0;2356:38:::1;::::0;-1:-1:-1;;;;;2356:38:109;;::::1;::::0;2377:6:::1;::::0;-1:-1:-1;;;;;;;;;;;2356:38:109;2377:6:::1;::::0;2356:38:::1;2404:6;:17:::0;;-1:-1:-1;;;;;;2404:17:109::1;-1:-1:-1::0;;;;;2404:17:109;;;::::1;::::0;;;::::1;::::0;;2188:240::o;5472:236:48:-;5547:27;5559:7;5568:5;5547:11;;;;;:27;;:::i;:::-;5613:88;5657:42;5658:25;5677:5;5658:14;;:18;;;;;;:25;;;;:::i;:::-;5657:40;;;;;:42;;:::i;:::-;-1:-1:-1;;;;;5613:25:48;;;;;;:16;:25;;;;;;;;;;:88;:42;;;;;:88;;:::i;:::-;-1:-1:-1;;;;;5585:25:48;;;;;;;:16;:25;;;;;:116;;;;-1:-1:-1;5472:236:48:o;858:66:107:-;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1268:14;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;858:66:107;:::o;2226:177:111:-;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;2333:12:111;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2355:16:111;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2381:9:111::1;:14:::0;;-1:-1:-1;;2381:14:111::1;2393:2;2381:14;::::0;;1264:55:108;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;2226:177:111;;;:::o;999:195:109:-;1024:12:108;;;;;;;;:31;;-1:-1:-1;1040:15:108;-1:-1:-1;;;;;1040:13:108;:15;:::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;1068:17:109::1;1088:12;-1:-1:-1::0;;;;;1088:10:109::1;:12:::0;:::i:1;:::-;1110:6;:18:::0;;-1:-1:-1;;;;;;1110:18:109::1;-1:-1:-1::0;;;;;1110:18:109;::::1;::::0;;::::1;::::0;;;1143:43:::1;::::0;1110:18;;-1:-1:-1;1110:18:109;-1:-1:-1;;;;;;;;;;;;;1143:43:109;-1:-1:-1;;1143:43:109::1;1256:1:108;1268:14:::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;999:195:109;:::o;931:104:107:-;1018:10;931:104;:::o;8085:370:111:-;-1:-1:-1;;;;;8168:21:111;;8160:65;;;;;-1:-1:-1;;;8160:65:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;8236:49;8265:1;8269:7;8278:6;-1:-1:-1;;;;;8236:20:111;:49;:::i;:::-;8311:24;8328:6;8311:12;;:16;;;;;;:24;;;;:::i;:::-;8296:12;:39;-1:-1:-1;;;;;8366:18:111;;;;;;:9;:18;;;;;;;;;:30;;8389:6;;8366:22;;;;;:30;;:::i;:::-;-1:-1:-1;;;;;8345:18:111;;;;;;:9;:18;;;;;;;;:51;;;;8411:37;;;;;;;8345:18;;;;8411:37;;;;;;;;;;8085:370;;:::o;2119:459:110:-;2177:7;2418:6;2414:45;;-1:-1:-1;2447:1:110;2440:8;;2414:45;2481:5;;;2485:1;2481;:5;:1;2504:5;;;;;:10;2496:56;;;;-1:-1:-1;;;2496:56:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2570:1;-1:-1:-1;2119:459:110;;;;;:::o;190:146:56:-;246:6;282:1;303:6;;;;295:15;;;;;1043:159:55;1099:6;1131:1;1126;:6;;:20;;;;;1145:1;1140;1136;:5;:10;;1126:20;1125:46;;;;1156:1;1152;:5;:18;;;;;1169:1;1165;1161;:5;:9;1152:18;1117:55;;;;;;-1:-1:-1;1190:5:55;;;1043:159::o;834:176:110:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:110;;;;;;;;;;;;;;;;;;;;;;;;;;;294:336:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;294:336:54;;;-1:-1:-1;294:336:54;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "294:336:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3761:117:48;;;;;;;;;;;;;;;;-1:-1:-1;3761:117:48;-1:-1:-1;;;;;3761:117:48;;:::i;:::-;;;;;;;;;;;;;;;;2469:81:111;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4505:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4505:166:111;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3512:98;;;:::i;2921:153:52:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2921:153:52;;;;;;;;;;;;;;;;;:::i;1046:89::-;;;:::i;:::-;;3371:81:111;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5843:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5843:215:111;;;;;;;;:::i;3208:139:52:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3208:139:52;;;;;;;;:::i;3357:162:48:-;;;;;;;;;;;;;;;;-1:-1:-1;3357:162:48;-1:-1:-1;;;;;3357:162:48;;:::i;2402:164:52:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2402:164:52;;-1:-1:-1;2402:164:52;;-1:-1:-1;;;;;2402:164:52:i;1490:196::-;;;:::i;4324:228:48:-;;;;;;;;;;;;;;;;-1:-1:-1;4324:228:48;-1:-1:-1;;;;;4324:228:48;;:::i;633:24:52:-;;;:::i;:::-;;;;-1:-1:-1;;;;;633:24:52;;;;;;;;;;;;;;3668:117:111;;;;;;;;;;;;;;;;-1:-1:-1;3668:117:111;-1:-1:-1;;;;;3668:117:111;;:::i;1894:145:109:-;;;:::i;1271:77::-;;;:::i;2663:85:111:-;;;:::i;3487:139:52:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3487:139:52;;;;;;;;:::i;6545:266:111:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6545:266:111;;;;;;;;:::i;2679:125:52:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2679:125:52;;;;;;;;:::i;741:32::-;;;:::i;1810:512::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1810:512:52;;;;;;;;-1:-1:-1;1810:512:52;;-1:-1:-1;;1810:512:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1810:512:52;;-1:-1:-1;;;;;;;1810:512:52;;;;;-1:-1:-1;1810:512:52;;;;;;;;;;-1:-1:-1;1810:512:52;;-1:-1:-1;1810:512:52:i;4218:149:111:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4218:149:111;;;;;;;;;;:::i;2188:240:109:-;;;;;;;;;;;;;;;;-1:-1:-1;2188:240:109;-1:-1:-1;;;;;2188:240:109;;:::i;3761:117:48:-;-1:-1:-1;;;;;3849:22:48;3823:7;3849:22;;;:14;:22;;;;;;;3761:117::o;2469:81:111:-;2538:5;2531:12;;;;;;;;-1:-1:-1;;2531:12:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2506:13;;2531:12;;2538:5;;2531:12;;2538:5;2531:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2469:81;;:::o;4505:166::-;4588:4;4604:39;4613:12;:10;:12::i;:::-;4627:7;4636:6;4604:8;:39::i;:::-;-1:-1:-1;4660:4:111;4505:166;;;;;:::o;3512:98::-;3591:12;;3512:98;:::o;2921:153:52:-;3009:4;3032:35;3051:4;3057:2;3061:5;3032:18;:35::i;:::-;3025:42;2921:153;-1:-1:-1;;;;2921:153:52:o;1046:89::-;1099:29;1117:10;1099:17;:29::i;:::-;1046:89::o;3371:81:111:-;3436:9;;;;3371:81;:::o;5843:215::-;5931:4;5947:83;5956:12;:10;:12::i;:::-;5970:7;5979:50;6018:10;5979:11;:25;5991:12;:10;:12::i;:::-;-1:-1:-1;;;;;5979:25:111;;;;;;;;;;;;;;;;;-1:-1:-1;5979:25:111;;;:34;;;;;;;;;;;:50;:38;:50;:::i;:::-;5947:8;:83::i;3208:139:52:-;3281:4;1485:12:109;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:109;;;;;;;;;;;;;;;3297:22:52::1;3303:7;3312:6;3297:5;:22::i;3357:162:48:-:0;-1:-1:-1;;;;;3489:22:48;;3431:7;3489:22;;;:14;:22;;;;;;3457:55;;:27;3504:6;3457:19;:27::i;:::-;:31;:55;:31;:55;:::i;2402:164:52:-;2468:9;2463:97;2487:6;:13;2483:1;:17;2463:97;;;2521:28;2539:6;2546:1;2539:9;;;;;;;;;;;;;;2521:17;:28::i;:::-;2502:3;;2463:97;;;;2402:164;:::o;1490:196::-;1540:15;1558:26;:24;:26::i;:::-;1540:44;;1610:1;1599:8;:12;1595:85;;;1627:42;1644:24;:8;:22;:24::i;:::-;1627:16;:42::i;:::-;1490:196;:::o;4324:228:48:-;-1:-1:-1;;;;;4485:24:48;;4389:7;4485:24;;;:16;:24;;;;;;-1:-1:-1;;;1282:6:48;4415:111;;:95;;:52;:37;4434:17;4502:6;4434:9;:17::i;:::-;4415:14;;;:37;:18;:37;:::i;:::-;:50;:52::i;:::-;:69;:95;:69;:95;:::i;:::-;:109;:111::i;:::-;:130;;;;;;;4324:228;-1:-1:-1;;4324:228:48:o;633:24:52:-;;;-1:-1:-1;;;;;633:24:52;;:::o;3668:117:111:-;-1:-1:-1;;;;;3760:18:111;3734:7;3760:18;;;:9;:18;;;;;;;3668:117::o;1894:145:109:-;1485:12;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:109;;;;;;;;;;;;;;;1984:6:::1;::::0;1963:40:::1;::::0;2000:1:::1;::::0;-1:-1:-1;;;;;1984:6:109::1;::::0;1963:40:::1;::::0;2000:1;;1963:40:::1;2013:6;:19:::0;;-1:-1:-1;;;;;;2013:19:109::1;::::0;;1894:145::o;1271:77::-;1335:6;;-1:-1:-1;;;;;1335:6:109;1271:77;:::o;2663:85:111:-;2734:7;2727:14;;;;;;;;-1:-1:-1;;2727:14:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2702:13;;2727:14;;2734:7;;2727:14;;2734:7;2727:14;;;;;;;;;;;;;;;;;;;;;;;;3487:139:52;3560:4;1485:12:109;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:109;;;;;;;;;;;;;;;3576:22:52::1;3582:7;3591:6;3576:5;:22::i;6545:266:111:-:0;6638:4;6654:129;6663:12;:10;:12::i;:::-;6677:7;6686:96;6725:15;6686:96;;;;;;;;;;;;;;;;;:11;:25;6698:12;:10;:12::i;:::-;-1:-1:-1;;;;;6686:25:111;;;;;;;;;;;;;;;;;-1:-1:-1;6686:25:111;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;2679:125:52:-;2749:4;2772:25;2787:2;2791:5;2772:14;:25::i;:::-;2765:32;2679:125;-1:-1:-1;;;2679:125:52:o;741:32::-;;;;:::o;1810:512::-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;-1:-1:-1;;;;;2035:34:52;::::1;2014:120;;;;-1:-1:-1::0;;;2014:120:52::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2145:32;2164:4;2170:6;2145:18;:32::i;:::-;2187:22;:20;:22::i;:::-;2220:10;:24:::0;;-1:-1:-1;;;;;;2220:24:52::1;-1:-1:-1::0;;;;;2220:24:52;::::1;;::::0;;2254::::1;2272:5:::0;2254:17:::1;:24::i;:::-;2288:27;2294:5;2301:13;2288:5;:27::i;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;1810:512:52;;;;;;:::o;4218:149:111:-;-1:-1:-1;;;;;4333:18:111;;;4307:7;4333:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4218:149::o;2188:240:109:-;1485:12;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:109;;;:22;;;1467:67;;;;;-1:-1:-1;;;1467:67:109;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:109;;;;;;;;;;;;;;;-1:-1:-1;;;;;2276:22:109;::::1;2268:73;;;;-1:-1:-1::0;;;2268:73:109::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:6;::::0;2356:38:::1;::::0;-1:-1:-1;;;;;2356:38:109;;::::1;::::0;2377:6:::1;::::0;2356:38:::1;::::0;2377:6:::1;::::0;2356:38:::1;2404:6;:17:::0;;-1:-1:-1;;;;;;2404:17:109::1;-1:-1:-1::0;;;;;2404:17:109;;;::::1;::::0;;;::::1;::::0;;2188:240::o;2046:174:111:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;2141:26:111::1;:24;:26::i;:::-;2177:36;2200:4;2206:6;2177:22;:36::i;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;2046:174:111;;;:::o;867:126:109:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;924:26:109::1;:24;:26::i;:::-;960;:24;:26::i;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;867:126:109;:::o;8085:370:111:-;-1:-1:-1;;;;;8168:21:111;;8160:65;;;;;-1:-1:-1;;;8160:65:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;8236:49;8265:1;8269:7;8278:6;8236:20;:49::i;:::-;8311:12;;:24;;8328:6;8311:24;:16;:24;:::i;:::-;8296:12;:39;-1:-1:-1;;;;;8366:18:111;;;;;;:9;:18;;;;;;:30;;8389:6;8366:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;8345:18:111;;;;;;:9;:18;;;;;;;;:51;;;;8411:37;;;;;;;8345:18;;;;8411:37;;;;;;;;;;8085:370;;:::o;2119:459:110:-;2177:7;2418:6;2414:45;;-1:-1:-1;2447:1:110;2440:8;;2414:45;2481:5;;;2485:1;2481;:5;:1;2504:5;;;;;:10;2496:56;;;;-1:-1:-1;;;2496:56:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;190:146:56;246:6;282:1;303:6;;;;295:15;;;;;1043:159:55;1099:6;1131:1;1126;:6;;:20;;;;;1145:1;1140;1136;:5;:10;;1126:20;1125:46;;;;1156:1;1152;:5;:18;;;;;1169:1;1165;1161;:5;:9;1152:18;1117:55;;;;;;-1:-1:-1;1190:5:55;;;1043:159::o;834:176:110:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:110;;;;;;;;;;;;;;;;;;;;;;;;;;;931:104:107;1018:10;931:104;:::o;9609:340:111:-;-1:-1:-1;;;;;9710:19:111;;9702:68;;;;-1:-1:-1;;;9702:68:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9788:21:111;;9780:68;;;;-1:-1:-1;;;9780:68:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9859:18:111;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9910:32;;;;;;;;;;;;;;;;;9609:340;;;:::o;5131:317::-;5237:4;5253:36;5263:6;5271:9;5282:6;5253:9;:36::i;:::-;5299:121;5308:6;5316:12;:10;:12::i;:::-;5330:89;5368:6;5330:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5330:19:111;;;;;;:11;:19;;;;;;5350:12;:10;:12::i;:::-;-1:-1:-1;;;;;5330:33:111;;;;;;;;;;;;-1:-1:-1;5330:33:111;;;:89;;:37;:89;:::i;5299:121::-;-1:-1:-1;5437:4:111;5131:317;;;;;:::o;3712:303:52:-;3773:25;3801:26;3821:5;3801:19;:26::i;:::-;3859:10;;:45;;;-1:-1:-1;;;3859:45:52;;-1:-1:-1;;;;;3859:45:52;;;;;;;;;;;;;;;3773:54;;-1:-1:-1;3859:10:52;;;:19;;:45;;;;;;;;;;;;;;;:10;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3859:45:52;3838:133;;;;-1:-1:-1;;;3838:133:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3982:26;:24;:26::i;5472:236:48:-;5547:27;5559:7;5568:5;5547:11;:27::i;:::-;5613:88;5657:42;5658:25;5677:5;5658:14;;:18;;:25;;;;:::i;5657:42::-;-1:-1:-1;;;;;5613:25:48;;;;;;:16;:25;;;;;;;:88;:42;:88;:::i;:::-;-1:-1:-1;;;;;5585:25:48;;;;;;;:16;:25;;;;;:116;;;;-1:-1:-1;5472:236:48:o;1274:134:110:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;4260:272:52:-;4364:17;;4412:10;;:35;;;-1:-1:-1;;;4412:35:52;;4441:4;4412:35;;;;;;4314:6;;4364:17;-1:-1:-1;;;;;4412:10:52;;:20;;:35;;;;;;;;;;;;;;:10;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4412:35:52;4392:17;:55;;;4465:60;;4502:21;4465:60;:29;:60;:::i;:::-;4458:67;;;4260:272;:::o;1386:124:55:-;1442:7;1474:1;1469;:6;;1461:15;;;;;;-1:-1:-1;1501:1:55;1386:124::o;2227:366:48:-;2311:1;2295:13;:11;:13::i;:::-;:17;2287:85;;;;-1:-1:-1;;;2287:85:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2387:9;;2383:204;;2429:93;2495:13;:11;:13::i;:::-;2465:27;:5;-1:-1:-1;;;2465:27:48;:9;:27;:::i;:::-;:43;;;;;2429:14;;;2465:43;;2429:93;:18;:93;:::i;:::-;2412:14;:110;2541:35;;;;;;;;2558:10;;2541:35;;;;;;;;;;2227:366;:::o;1208:172:55:-;1264:6;1293:5;;;1317:6;;;;;;:16;;;1332:1;1327;:6;;1317:16;1316:38;;;;1343:1;1339;:5;:14;;;;;1352:1;1348;:5;1339:14;1308:47;;;;;5983:236:48;6058:27;6070:7;6079:5;6058:11;:27::i;:::-;6124:88;6168:42;6169:25;6188:5;6169:14;;:18;;:25;;;;:::i;6168:42::-;-1:-1:-1;;;;;6124:25:48;;;;;;:16;:25;;;;;;;:88;:42;:88;:::i;1692:187:110:-;1778:7;1813:12;1805:6;;;;1797:29;;;;-1:-1:-1;;;1797:29:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1848:5:110;;;1692:187::o;3988:172:111:-;4074:4;4090:42;4100:12;:10;:12::i;:::-;4114:9;4125:6;4090:9;:42::i;1409:498:108:-;1820:4;1864:17;1895:7;1409:498;:::o;858:66:107:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1268:14;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;858:66:107;:::o;2226:177:111:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;2333:12:111;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2355:16:111;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2381:9:111::1;:14:::0;;-1:-1:-1;;2381:14:111::1;2393:2;2381:14;::::0;;1264:55:108;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;2226:177:111;;;:::o;999:195:109:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;1068:17:109::1;1088:12;:10;:12::i;:::-;1110:6;:18:::0;;-1:-1:-1;;;;;;1110:18:109::1;-1:-1:-1::0;;;;;1110:18:109;::::1;::::0;;::::1;::::0;;;1143:43:::1;::::0;1110:18;;-1:-1:-1;1110:18:109;-1:-1:-1;;1143:43:109::1;::::0;-1:-1:-1;;1143:43:109::1;1256:1:108;1268:14:::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;999:195:109;:::o;4854:352:48:-;4942:32;4958:4;4964:2;4968:5;4942:15;:32::i;:::-;4985:21;5009:40;:25;5028:5;5009:14;;:18;;:25;;;;:::i;:40::-;-1:-1:-1;;;;;5084:22:48;;;;;;:16;:22;;;;;;4985:64;;-1:-1:-1;5084:42:48;;4985:64;5084:42;:26;:42;:::i;:::-;-1:-1:-1;;;;;5059:22:48;;;;;;;:16;:22;;;;;;:67;;;;5159:20;;;;;;;:40;;5184:14;5159:40;:24;:40;:::i;:::-;-1:-1:-1;;;;;5136:20:48;;;;;;;:16;:20;;;;;:63;;;;-1:-1:-1;;;4854:352:48:o;2784:333::-;2847:7;2866:29;2898:27;2918:6;2898:19;:27::i;:::-;-1:-1:-1;;;;;2961:22:48;;;;;;:14;:22;;;;;;2866:59;;-1:-1:-1;2961:49:48;;2866:59;2961:49;:26;:49;:::i;:::-;-1:-1:-1;;;;;2936:22:48;;;;;;:14;:22;;;;;;;;;:74;;;;3026:45;;;;;;;2936:22;;3026:45;;;;;;;;;3089:21;2784:333;-1:-1:-1;;2784:333:48:o;8774:410:111:-;-1:-1:-1;;;;;8857:21:111;;8849:67;;;;-1:-1:-1;;;8849:67:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8927:49;8948:7;8965:1;8969:6;8927:20;:49::i;:::-;9008:68;9031:6;9008:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9008:18:111;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;8987:18:111;;;;;;:9;:18;;;;;:89;9101:12;;:24;;9118:6;9101:24;:16;:24;:::i;:::-;9086:12;:39;9140:37;;;;;;;;9166:1;;-1:-1:-1;;;;;9140:37:111;;;;;;;;;;;;8774:410;;:::o;7285:530::-;-1:-1:-1;;;;;7390:20:111;;7382:70;;;;-1:-1:-1;;;7382:70:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7470:23:111;;7462:71;;;;-1:-1:-1;;;7462:71:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7544:47;7565:6;7573:9;7584:6;7544:20;:47::i;:::-;7622:71;7644:6;7622:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7622:17:111;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7602:17:111;;;;;;;:9;:17;;;;;;:91;;;;7726:20;;;;;;;:32;;7751:6;7726:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7703:20:111;;;;;;;:9;:20;;;;;;;;;:55;;;;7773:35;;;;;;;7703:20;;7773:35;;;;;;;;;;;;;7285:530;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\n\nimport \"./ProxySafeVanillaFDT.sol\";\n\n/**\n * @notice This contract, unlike its parent contract, is entirely instantiated by the `constructor`.\n * Therefore this contract may NOT be used with a proxy that `delegatecall`s it.\n */\ncontract VanillaFDT is ProxySafeVanillaFDT {\n\n    constructor(\n        string memory name,\n        string memory symbol,\n        IERC20 _fundsToken,\n        address owner,\n        uint256 initialAmount\n    )\n        public\n        ProxySafeVanillaFDT()\n    {\n        initialize(name, symbol, _fundsToken, owner, initialAmount);\n    }\n\n}\n",
  "sourcePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/VanillaFDT.sol",
  "ast": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/VanillaFDT.sol",
    "exportedSymbols": {
      "VanillaFDT": [
        19509
      ]
    },
    "id": 19510,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 19480,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:54"
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/ProxySafeVanillaFDT.sol",
        "file": "./ProxySafeVanillaFDT.sol",
        "id": 19481,
        "nodeType": "ImportDirective",
        "scope": 19510,
        "sourceUnit": 19448,
        "src": "67:35:54",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 19483,
              "name": "ProxySafeVanillaFDT",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 19447,
              "src": "317:19:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxySafeVanillaFDT_$19447",
                "typeString": "contract ProxySafeVanillaFDT"
              }
            },
            "id": 19484,
            "nodeType": "InheritanceSpecifier",
            "src": "317:19:54"
          }
        ],
        "contractDependencies": [
          18314,
          18343,
          18361,
          19447,
          37222,
          37297,
          37427,
          38157,
          38235
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 19482,
          "nodeType": "StructuredDocumentation",
          "src": "104:189:54",
          "text": " @notice This contract, unlike its parent contract, is entirely instantiated by the `constructor`.\n Therefore this contract may NOT be used with a proxy that `delegatecall`s it."
        },
        "fullyImplemented": true,
        "id": 19509,
        "linearizedBaseContracts": [
          19509,
          19447,
          37427,
          18314,
          38157,
          38235,
          37222,
          37297,
          18361,
          18343
        ],
        "name": "VanillaFDT",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 19507,
              "nodeType": "Block",
              "src": "551:76:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19500,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19486,
                        "src": "572:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19501,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19488,
                        "src": "578:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19502,
                        "name": "_fundsToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19490,
                        "src": "586:11:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19503,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19492,
                        "src": "599:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19504,
                        "name": "initialAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19494,
                        "src": "606:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 19499,
                      "name": "initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19283,
                      "src": "561:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_contract$_IERC20_$38235_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,contract IERC20,address,uint256)"
                      }
                    },
                    "id": 19505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "561:59:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19506,
                  "nodeType": "ExpressionStatement",
                  "src": "561:59:54"
                }
              ]
            },
            "documentation": null,
            "id": 19508,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [],
                "id": 19497,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19496,
                  "name": "ProxySafeVanillaFDT",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19447,
                  "src": "525:19:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ProxySafeVanillaFDT_$19447_$",
                    "typeString": "type(contract ProxySafeVanillaFDT)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "525:21:54"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 19495,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19486,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19508,
                  "src": "365:18:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19485,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "365:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19488,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19508,
                  "src": "393:20:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19487,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "393:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19490,
                  "mutability": "mutable",
                  "name": "_fundsToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19508,
                  "src": "423:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19489,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "423:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19492,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19508,
                  "src": "451:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19491,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "451:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19494,
                  "mutability": "mutable",
                  "name": "initialAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19508,
                  "src": "474:21:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19493,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "474:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "355:146:54"
            },
            "returnParameters": {
              "id": 19498,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "551:0:54"
            },
            "scope": 19509,
            "src": "344:283:54",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 19510,
        "src": "294:336:54"
      }
    ],
    "src": "41:590:54"
  },
  "legacyAST": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/VanillaFDT.sol",
    "exportedSymbols": {
      "VanillaFDT": [
        19509
      ]
    },
    "id": 19510,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 19480,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:54"
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/ProxySafeVanillaFDT.sol",
        "file": "./ProxySafeVanillaFDT.sol",
        "id": 19481,
        "nodeType": "ImportDirective",
        "scope": 19510,
        "sourceUnit": 19448,
        "src": "67:35:54",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 19483,
              "name": "ProxySafeVanillaFDT",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 19447,
              "src": "317:19:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxySafeVanillaFDT_$19447",
                "typeString": "contract ProxySafeVanillaFDT"
              }
            },
            "id": 19484,
            "nodeType": "InheritanceSpecifier",
            "src": "317:19:54"
          }
        ],
        "contractDependencies": [
          18314,
          18343,
          18361,
          19447,
          37222,
          37297,
          37427,
          38157,
          38235
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 19482,
          "nodeType": "StructuredDocumentation",
          "src": "104:189:54",
          "text": " @notice This contract, unlike its parent contract, is entirely instantiated by the `constructor`.\n Therefore this contract may NOT be used with a proxy that `delegatecall`s it."
        },
        "fullyImplemented": true,
        "id": 19509,
        "linearizedBaseContracts": [
          19509,
          19447,
          37427,
          18314,
          38157,
          38235,
          37222,
          37297,
          18361,
          18343
        ],
        "name": "VanillaFDT",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 19507,
              "nodeType": "Block",
              "src": "551:76:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 19500,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19486,
                        "src": "572:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19501,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19488,
                        "src": "578:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19502,
                        "name": "_fundsToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19490,
                        "src": "586:11:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19503,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19492,
                        "src": "599:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 19504,
                        "name": "initialAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19494,
                        "src": "606:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 19499,
                      "name": "initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19283,
                      "src": "561:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_contract$_IERC20_$38235_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,contract IERC20,address,uint256)"
                      }
                    },
                    "id": 19505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "561:59:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 19506,
                  "nodeType": "ExpressionStatement",
                  "src": "561:59:54"
                }
              ]
            },
            "documentation": null,
            "id": 19508,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [],
                "id": 19497,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 19496,
                  "name": "ProxySafeVanillaFDT",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19447,
                  "src": "525:19:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ProxySafeVanillaFDT_$19447_$",
                    "typeString": "type(contract ProxySafeVanillaFDT)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "525:21:54"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 19495,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19486,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19508,
                  "src": "365:18:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19485,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "365:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19488,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19508,
                  "src": "393:20:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19487,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "393:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19490,
                  "mutability": "mutable",
                  "name": "_fundsToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19508,
                  "src": "423:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 19489,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "423:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19492,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19508,
                  "src": "451:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19491,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "451:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19494,
                  "mutability": "mutable",
                  "name": "initialAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 19508,
                  "src": "474:21:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19493,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "474:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "355:146:54"
            },
            "returnParameters": {
              "id": 19498,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "551:0:54"
            },
            "scope": 19509,
            "src": "344:283:54",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 19510,
        "src": "294:336:54"
      }
    ],
    "src": "41:590:54"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.164Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "accumulativeFundsOf(address)": {
        "details": "accumulativeFundsOf(_owner) = withdrawableFundsOf(_owner) + withdrawnFundsOf(_owner) = (pointsPerShare * balanceOf(_owner) + pointsCorrection[_owner]) / pointsMultiplier",
        "params": {
          "_owner": "The address of a token holder."
        },
        "returns": {
          "_0": "The amount of funds that `_owner` has earned in total."
        }
      },
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
      },
      "initialize(string,string,address,address,uint256)": {
        "details": "\"constructor\" to be called on deployment"
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "updateFundsReceived()": {
        "details": "Calls _updateFundsTokenBalance(), whereby the contract computes the delta of the previous and the new funds token balance and increments the total received funds (cumulative) by delta by calling _registerFunds()"
      },
      "withdrawableFundsOf(address)": {
        "params": {
          "_owner": "The address of a token holder."
        },
        "returns": {
          "_0": "The amount funds that `_owner` can withdraw."
        }
      },
      "withdrawnFundsOf(address)": {
        "params": {
          "_owner": "The address of a token holder."
        },
        "returns": {
          "_0": "The amount of funds that `_owner` has withdrawn."
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "accumulativeFundsOf(address)": {
        "notice": "prev. accumulativeDividendOfView the amount of funds that an address has earned in total."
      },
      "burn(address,uint256)": {
        "notice": "Exposes the ability to burn exisiting FDTs for a given account. Caller has to be the owner of the FDT."
      },
      "initialize(string,string,address,address,uint256)": {
        "notice": "Initialize a new instance storage"
      },
      "mint(address,uint256)": {
        "notice": "Exposes the ability to mint new FDTs for a given account. Caller has to be the owner of the FDT."
      },
      "pushFunds(address[])": {
        "notice": "Withdraws funds for a set of token holders"
      },
      "transfer(address,uint256)": {
        "notice": "Overrides the parent class token transfer function to enforce restrictions."
      },
      "transferFrom(address,address,uint256)": {
        "notice": "Overrides the parent class token transferFrom function to enforce restrictions."
      },
      "updateFundsReceived()": {
        "notice": "Register a payment of funds in tokens. May be called directly after a deposit is made."
      },
      "withdrawFunds()": {
        "notice": "Withdraws all available funds for a token holder"
      },
      "withdrawableFundsOf(address)": {
        "notice": "prev. withdrawableDividendOfView the amount of funds that an address can withdraw."
      },
      "withdrawnFundsOf(address)": {
        "notice": "prev. withdrawnDividendOfView the amount of funds that an address has withdrawn."
      }
    },
    "notice": "This contract, unlike its parent contract, is entirely instantiated by the `constructor`. Therefore this contract may NOT be used with a proxy that `delegatecall`s it.",
    "version": 1
  }
}