{
  "_format": "hh-sol-artifact-1",
  "contractName": "TestERC20Votes",
  "sourceName": "contracts/soma/SecurityTokens/extensions/tests/TestERC20Votes.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "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": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "fromDelegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "toDelegate",
          "type": "address"
        }
      ],
      "name": "DelegateChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBalance",
          "type": "uint256"
        }
      ],
      "name": "DelegateVotesChanged",
      "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": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "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": "uint32",
          "name": "pos",
          "type": "uint32"
        }
      ],
      "name": "checkpoints",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "fromBlock",
              "type": "uint32"
            },
            {
              "internalType": "uint224",
              "name": "votes",
              "type": "uint224"
            }
          ],
          "internalType": "struct ERC20Votes.Checkpoint",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "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": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "delegateBySig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "delegates",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPastTotalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPastVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getVotes",
      "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": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "numCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "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": "amount",
          "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": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101406040523480156200001257600080fd5b5060405162001f9e38038062001f9e8339810160408190526200003591620001d3565b6040805180820190915260018152603160f81b60208201528290819081846003620000618382620002cc565b506004620000708282620002cc565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c05261012052506200039895505050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013657600080fd5b81516001600160401b03808211156200015357620001536200010e565b604051601f8301601f19908116603f011681019082821181831017156200017e576200017e6200010e565b816040528381526020925086838588010111156200019b57600080fd5b600091505b83821015620001bf5785820183015181830184015290820190620001a0565b600093810190920192909252949350505050565b60008060408385031215620001e757600080fd5b82516001600160401b0380821115620001ff57600080fd5b6200020d8683870162000124565b935060208501519150808211156200022457600080fd5b50620002338582860162000124565b9150509250929050565b600181811c908216806200025257607f821691505b6020821081036200027357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c757600081815260208120601f850160051c81016020861015620002a25750805b601f850160051c820191505b81811015620002c357828155600101620002ae565b5050505b505050565b81516001600160401b03811115620002e857620002e86200010e565b6200030081620002f984546200023d565b8462000279565b602080601f8311600181146200033857600084156200031f5750858301515b600019600386901b1c1916600185901b178555620002c3565b600085815260208120601f198616915b82811015620003695788860151825594840194600190910190840162000348565b5085821015620003885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051611bb6620003e86000396000610e2a01526000610e7901526000610e5401526000610dad01526000610dd701526000610e010152611bb66000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80636fcfff45116100c3578063a457c2d71161007c578063a457c2d7146102f3578063a9059cbb14610306578063c3cda52014610319578063d505accf1461032c578063dd62ed3e1461033f578063f1127ed81461035257600080fd5b80636fcfff451461026157806370a08231146102895780637ecebe00146102b25780638e539e8c146102c557806395d89b41146102d85780639ab24eb0146102e057600080fd5b80633644e515116101155780633644e515146101c757806339509351146101cf5780633a46b1a8146101e257806340c10f19146101f5578063587cde1e1461020a5780635c19a95c1461024e57600080fd5b806306fdde0314610152578063095ea7b31461017057806318160ddd1461019357806323b872dd146101a5578063313ce567146101b8575b600080fd5b61015a61038f565b60405161016791906118a1565b60405180910390f35b61018361017e36600461190b565b610421565b6040519015158152602001610167565b6002545b604051908152602001610167565b6101836101b3366004611935565b61043b565b60405160128152602001610167565b61019761045f565b6101836101dd36600461190b565b61046e565b6101976101f036600461190b565b610490565b61020861020336600461190b565b61050f565b005b610236610218366004611971565b6001600160a01b039081166000908152600760205260409020541690565b6040516001600160a01b039091168152602001610167565b61020861025c366004611971565b61051d565b61027461026f366004611971565b61052a565b60405163ffffffff9091168152602001610167565b610197610297366004611971565b6001600160a01b031660009081526020819052604090205490565b6101976102c0366004611971565b61054c565b6101976102d336600461198c565b61056a565b61015a6105c6565b6101976102ee366004611971565b6105d5565b61018361030136600461190b565b61065c565b61018361031436600461190b565b6106d7565b6102086103273660046119b6565b6106e5565b61020861033a366004611a0e565b61081b565b61019761034d366004611a78565b61097f565b610365610360366004611aab565b6109aa565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610167565b60606003805461039e90611aeb565b80601f01602080910402602001604051908101604052809291908181526020018280546103ca90611aeb565b80156104175780601f106103ec57610100808354040283529160200191610417565b820191906000526020600020905b8154815290600101906020018083116103fa57829003601f168201915b5050505050905090565b60003361042f818585610a2e565b60019150505b92915050565b600033610449858285610b52565b610454858585610bcc565b506001949350505050565b6000610469610da0565b905090565b60003361042f818585610481838361097f565b61048b9190611b35565b610a2e565b60004382106104e65760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064015b60405180910390fd5b6001600160a01b03831660009081526008602052604090206105089083610ec7565b9392505050565b6105198282610f84565b5050565b610527338261100e565b50565b6001600160a01b03811660009081526008602052604081205461043590611087565b6001600160a01b038116600090815260056020526040812054610435565b60004382106105bb5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016104dd565b610435600983610ec7565b60606004805461039e90611aeb565b6001600160a01b0381166000908152600860205260408120548015610649576001600160a01b0383166000908152600860205260409020610617600183611b48565b8154811061062757610627611b5b565b60009182526020909120015464010000000090046001600160e01b031661064c565b60005b6001600160e01b03169392505050565b6000338161066a828661097f565b9050838110156106ca5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104dd565b6104548286868403610a2e565b60003361042f818585610bcc565b834211156107355760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016104dd565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906107af906107a79060a001604051602081830303815290604052805190602001206110f0565b85858561113e565b90506107ba81611166565b86146108085760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016104dd565b610812818861100e565b50505050505050565b8342111561086b5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104dd565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861089a8c611166565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108f5826110f0565b905060006109058287878761113e565b9050896001600160a01b0316816001600160a01b0316146109685760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104dd565b6109738a8a8a610a2e565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60408051808201909152600080825260208201526001600160a01b0383166000908152600860205260409020805463ffffffff84169081106109ee576109ee611b5b565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6001600160a01b038316610a905760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104dd565b6001600160a01b038216610af15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104dd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610b5e848461097f565b90506000198114610bc65781811015610bb95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104dd565b610bc68484848403610a2e565b50505050565b6001600160a01b038316610c305760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104dd565b6001600160a01b038216610c925760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104dd565b6001600160a01b03831660009081526020819052604090205481811015610d0a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104dd565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610d41908490611b35565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d8d91815260200190565b60405180910390a3610bc6848484611193565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610df957507f000000000000000000000000000000000000000000000000000000000000000046145b15610e2357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b8154600090815b81811015610f2b576000610ee282846111c5565b905084868281548110610ef757610ef7611b5b565b60009182526020909120015463ffffffff161115610f1757809250610f25565b610f22816001611b35565b91505b50610ece565b8115610f6f5784610f3d600184611b48565b81548110610f4d57610f4d611b5b565b60009182526020909120015464010000000090046001600160e01b0316610f72565b60005b6001600160e01b031695945050505050565b610f8e82826111e0565b6002546001600160e01b0310156110005760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016104dd565b610bc660096112c7836112d3565b6001600160a01b038281166000818152600760208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610bc682848361144c565b600063ffffffff8211156110ec5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016104dd565b5090565b60006104356110fd610da0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061114f87878787611589565b9150915061115c81611676565b5095945050505050565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b505050565b6001600160a01b0383811660009081526007602052604080822054858416835291205461118e9291821691168361144c565b60006111d46002848418611b71565b61050890848416611b35565b6001600160a01b0382166112365760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104dd565b80600260008282546112489190611b35565b90915550506001600160a01b03821660009081526020819052604081208054839290611275908490611b35565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361051960008383611193565b60006105088284611b35565b82546000908190801561131e57856112ec600183611b48565b815481106112fc576112fc611b5b565b60009182526020909120015464010000000090046001600160e01b0316611321565b60005b6001600160e01b0316925061133a83858763ffffffff16565b915060008111801561137857504386611354600184611b48565b8154811061136457611364611b5b565b60009182526020909120015463ffffffff16145b156113d8576113868261182c565b86611392600184611b48565b815481106113a2576113a2611b5b565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b03160217905550611443565b8560405180604001604052806113ed43611087565b63ffffffff1681526020016114018561182c565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b816001600160a01b0316836001600160a01b03161415801561146e5750600081115b1561118e576001600160a01b038316156114fc576001600160a01b038316600090815260086020526040812081906114a990611895856112d3565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516114f1929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161561118e576001600160a01b03821660009081526008602052604081208190611532906112c7856112d3565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161157a929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156115c0575060009050600361166d565b8460ff16601b141580156115d857508460ff16601c14155b156115e9575060009050600461166d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561163d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166116665760006001925092505061166d565b9150600090505b94509492505050565b600081600481111561168a5761168a611b93565b036116925750565b60018160048111156116a6576116a6611b93565b036116f35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104dd565b600281600481111561170757611707611b93565b036117545760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104dd565b600381600481111561176857611768611b93565b036117c05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104dd565b60048160048111156117d4576117d4611b93565b036105275760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104dd565b60006001600160e01b038211156110ec5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016104dd565b60006105088284611b48565b600060208083528351808285015260005b818110156118ce578581018301518582016040015282016118b2565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461190657600080fd5b919050565b6000806040838503121561191e57600080fd5b611927836118ef565b946020939093013593505050565b60008060006060848603121561194a57600080fd5b611953846118ef565b9250611961602085016118ef565b9150604084013590509250925092565b60006020828403121561198357600080fd5b610508826118ef565b60006020828403121561199e57600080fd5b5035919050565b803560ff8116811461190657600080fd5b60008060008060008060c087890312156119cf57600080fd5b6119d8876118ef565b955060208701359450604087013593506119f4606088016119a5565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611a2957600080fd5b611a32886118ef565b9650611a40602089016118ef565b95506040880135945060608801359350611a5c608089016119a5565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611a8b57600080fd5b611a94836118ef565b9150611aa2602084016118ef565b90509250929050565b60008060408385031215611abe57600080fd5b611ac7836118ef565b9150602083013563ffffffff81168114611ae057600080fd5b809150509250929050565b600181811c90821680611aff57607f821691505b60208210810361118857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561043557610435611b1f565b8181038181111561043557610435611b1f565b634e487b7160e01b600052603260045260246000fd5b600082611b8e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80636fcfff45116100c3578063a457c2d71161007c578063a457c2d7146102f3578063a9059cbb14610306578063c3cda52014610319578063d505accf1461032c578063dd62ed3e1461033f578063f1127ed81461035257600080fd5b80636fcfff451461026157806370a08231146102895780637ecebe00146102b25780638e539e8c146102c557806395d89b41146102d85780639ab24eb0146102e057600080fd5b80633644e515116101155780633644e515146101c757806339509351146101cf5780633a46b1a8146101e257806340c10f19146101f5578063587cde1e1461020a5780635c19a95c1461024e57600080fd5b806306fdde0314610152578063095ea7b31461017057806318160ddd1461019357806323b872dd146101a5578063313ce567146101b8575b600080fd5b61015a61038f565b60405161016791906118a1565b60405180910390f35b61018361017e36600461190b565b610421565b6040519015158152602001610167565b6002545b604051908152602001610167565b6101836101b3366004611935565b61043b565b60405160128152602001610167565b61019761045f565b6101836101dd36600461190b565b61046e565b6101976101f036600461190b565b610490565b61020861020336600461190b565b61050f565b005b610236610218366004611971565b6001600160a01b039081166000908152600760205260409020541690565b6040516001600160a01b039091168152602001610167565b61020861025c366004611971565b61051d565b61027461026f366004611971565b61052a565b60405163ffffffff9091168152602001610167565b610197610297366004611971565b6001600160a01b031660009081526020819052604090205490565b6101976102c0366004611971565b61054c565b6101976102d336600461198c565b61056a565b61015a6105c6565b6101976102ee366004611971565b6105d5565b61018361030136600461190b565b61065c565b61018361031436600461190b565b6106d7565b6102086103273660046119b6565b6106e5565b61020861033a366004611a0e565b61081b565b61019761034d366004611a78565b61097f565b610365610360366004611aab565b6109aa565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610167565b60606003805461039e90611aeb565b80601f01602080910402602001604051908101604052809291908181526020018280546103ca90611aeb565b80156104175780601f106103ec57610100808354040283529160200191610417565b820191906000526020600020905b8154815290600101906020018083116103fa57829003601f168201915b5050505050905090565b60003361042f818585610a2e565b60019150505b92915050565b600033610449858285610b52565b610454858585610bcc565b506001949350505050565b6000610469610da0565b905090565b60003361042f818585610481838361097f565b61048b9190611b35565b610a2e565b60004382106104e65760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064015b60405180910390fd5b6001600160a01b03831660009081526008602052604090206105089083610ec7565b9392505050565b6105198282610f84565b5050565b610527338261100e565b50565b6001600160a01b03811660009081526008602052604081205461043590611087565b6001600160a01b038116600090815260056020526040812054610435565b60004382106105bb5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016104dd565b610435600983610ec7565b60606004805461039e90611aeb565b6001600160a01b0381166000908152600860205260408120548015610649576001600160a01b0383166000908152600860205260409020610617600183611b48565b8154811061062757610627611b5b565b60009182526020909120015464010000000090046001600160e01b031661064c565b60005b6001600160e01b03169392505050565b6000338161066a828661097f565b9050838110156106ca5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104dd565b6104548286868403610a2e565b60003361042f818585610bcc565b834211156107355760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016104dd565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906107af906107a79060a001604051602081830303815290604052805190602001206110f0565b85858561113e565b90506107ba81611166565b86146108085760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016104dd565b610812818861100e565b50505050505050565b8342111561086b5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104dd565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861089a8c611166565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108f5826110f0565b905060006109058287878761113e565b9050896001600160a01b0316816001600160a01b0316146109685760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104dd565b6109738a8a8a610a2e565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60408051808201909152600080825260208201526001600160a01b0383166000908152600860205260409020805463ffffffff84169081106109ee576109ee611b5b565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6001600160a01b038316610a905760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104dd565b6001600160a01b038216610af15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104dd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610b5e848461097f565b90506000198114610bc65781811015610bb95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104dd565b610bc68484848403610a2e565b50505050565b6001600160a01b038316610c305760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104dd565b6001600160a01b038216610c925760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104dd565b6001600160a01b03831660009081526020819052604090205481811015610d0a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104dd565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610d41908490611b35565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d8d91815260200190565b60405180910390a3610bc6848484611193565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610df957507f000000000000000000000000000000000000000000000000000000000000000046145b15610e2357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b8154600090815b81811015610f2b576000610ee282846111c5565b905084868281548110610ef757610ef7611b5b565b60009182526020909120015463ffffffff161115610f1757809250610f25565b610f22816001611b35565b91505b50610ece565b8115610f6f5784610f3d600184611b48565b81548110610f4d57610f4d611b5b565b60009182526020909120015464010000000090046001600160e01b0316610f72565b60005b6001600160e01b031695945050505050565b610f8e82826111e0565b6002546001600160e01b0310156110005760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016104dd565b610bc660096112c7836112d3565b6001600160a01b038281166000818152600760208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610bc682848361144c565b600063ffffffff8211156110ec5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016104dd565b5090565b60006104356110fd610da0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061114f87878787611589565b9150915061115c81611676565b5095945050505050565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b505050565b6001600160a01b0383811660009081526007602052604080822054858416835291205461118e9291821691168361144c565b60006111d46002848418611b71565b61050890848416611b35565b6001600160a01b0382166112365760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104dd565b80600260008282546112489190611b35565b90915550506001600160a01b03821660009081526020819052604081208054839290611275908490611b35565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361051960008383611193565b60006105088284611b35565b82546000908190801561131e57856112ec600183611b48565b815481106112fc576112fc611b5b565b60009182526020909120015464010000000090046001600160e01b0316611321565b60005b6001600160e01b0316925061133a83858763ffffffff16565b915060008111801561137857504386611354600184611b48565b8154811061136457611364611b5b565b60009182526020909120015463ffffffff16145b156113d8576113868261182c565b86611392600184611b48565b815481106113a2576113a2611b5b565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b03160217905550611443565b8560405180604001604052806113ed43611087565b63ffffffff1681526020016114018561182c565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b816001600160a01b0316836001600160a01b03161415801561146e5750600081115b1561118e576001600160a01b038316156114fc576001600160a01b038316600090815260086020526040812081906114a990611895856112d3565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516114f1929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161561118e576001600160a01b03821660009081526008602052604081208190611532906112c7856112d3565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161157a929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156115c0575060009050600361166d565b8460ff16601b141580156115d857508460ff16601c14155b156115e9575060009050600461166d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561163d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166116665760006001925092505061166d565b9150600090505b94509492505050565b600081600481111561168a5761168a611b93565b036116925750565b60018160048111156116a6576116a6611b93565b036116f35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104dd565b600281600481111561170757611707611b93565b036117545760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104dd565b600381600481111561176857611768611b93565b036117c05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104dd565b60048160048111156117d4576117d4611b93565b036105275760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104dd565b60006001600160e01b038211156110ec5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016104dd565b60006105088284611b48565b600060208083528351808285015260005b818110156118ce578581018301518582016040015282016118b2565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461190657600080fd5b919050565b6000806040838503121561191e57600080fd5b611927836118ef565b946020939093013593505050565b60008060006060848603121561194a57600080fd5b611953846118ef565b9250611961602085016118ef565b9150604084013590509250925092565b60006020828403121561198357600080fd5b610508826118ef565b60006020828403121561199e57600080fd5b5035919050565b803560ff8116811461190657600080fd5b60008060008060008060c087890312156119cf57600080fd5b6119d8876118ef565b955060208701359450604087013593506119f4606088016119a5565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611a2957600080fd5b611a32886118ef565b9650611a40602089016118ef565b95506040880135945060608801359350611a5c608089016119a5565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611a8b57600080fd5b611a94836118ef565b9150611aa2602084016118ef565b90509250929050565b60008060408385031215611abe57600080fd5b611ac7836118ef565b9150602083013563ffffffff81168114611ae057600080fd5b809150509250929050565b600181811c90821680611aff57607f821691505b60208210810361118857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561043557610435611b1f565b8181038181111561043557610435611b1f565b634e487b7160e01b600052603260045260246000fd5b600082611b8e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
