ETH Price: $2,600.23 (+0.96%)

Token

SlowBurn (SB)
 

Overview

Max Total Supply

9,125.31309885899848833 SB

Holders

7

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,335.289761692380759229 SB

Value
$0.00
0xad3d9cae7d2f6072854c56034df49f9b26e053ba
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SlowBurn

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-01-14
*/

// SPDX-License-Identifier: UNLICENSED
// SlowBurn contract
//
// Insert cool ASCII art here.
//
pragma solidity ^0.7.5;

// OpenZeppelin SafeMath.
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

  
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

interface IERC20 {
    function transfer(address recipient, uint256 amount) external returns (bool);
}

interface IUniswapV2Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IUniswapV2Router02 {
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Pair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

// OpenZeppelin implementation of ERC20 plus some additional logic:
// * During presale period, ether is collected in exchange for tokens.
// * Once presale ends, the collected ether is used to supply liquidity to a uniswap pool
//   with the initial token price set to the presale price.
// * From this point on anyone can call maybeReprice() once per day to adjust uniswap's
//   token balance so that the price is 20% higher than the previous day's.
// * Note that while the price is guaranteed to rise day after day, at some point sellers will
//   drain the pool of eth, making the high price meaningless since significant ether can no
//   longer be extracted. Choose your exit wisely!
contract SlowBurn {
    using SafeMath for uint256;
    
    address public developer;
    uint32 public presaleStartTime;
    uint32 public epoch;
    uint32 public lastRepriceTime;
    address public uniswapPair;
    
    // Presale period of 1 week.
    uint32 constant private kPresalePeriod = 604800;
    // Allow token reprices once per day.
    uint32 constant private kRepriceInterval = 86400;
    // Window during which maybeReprice can fail.
    uint32 constant private kRepriceWindow = 3600;
    // The token lister and successful maybeReprice callers will be rewarded with freshly minted tokens with
    // value 0.1 eth to offset any gas costs incurred.
    uint constant private kRewardWei = 10 ** 17;
    // Upon listing, developer receives 5% of uniswap's initial token balance.  
    uint constant private kDeveloperTokenCut = 5;
    // Initial token price of ~ $0.01
    uint constant private kPresaleTokensPerEth = 90000;
    // Don't allow individual users to mint more than 1 eth's worth of tokens during presale.
    uint constant private kMaxPresaleTokensPerAccount = kPresaleTokensPerEth * (10 ** 18);
    // Don't allow presale to raise more than 200 Eth
    uint constant private kPresaleHardCap = 200 * (10 ** 18);
    // Token price increases by 20% each day.
    uint constant private kTokenPriceBump = 20;

    address constant private kWeth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IUniswapV2Factory constant private kUniswapFactory = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
    IUniswapV2Router02 constant private kUniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    
    // ********* Start of boring old ERC20 stuff **********************

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    constructor () {
        _name = "SlowBurn";
        _symbol = "SB";
        _decimals = 18;
        developer = msg.sender;
        presaleStartTime = uint32(block.timestamp);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    // ********* And now for the good stuff! **********************
    
    // Contract accepts ether during the presale period, minting the corresponding amount
    // of tokens for the sender.
    // The first caller after the presale period ends (or if the hard cap has been hit)
    // will have their ether returned and will receive a small token reward in exchange
    // for creating the uniswap pair for this token.
    // Subsequent calls will fail.
    receive() external payable {
        if (msg.sender == address(kUniswapRouter)) {
            // Failsafe. Just in case we screwed something up in listToken() and don't manage to
            // supply our full balance, let the router return the excess funds (otherwise pool creation
            // fails and we're all screwed!) Since any funds left in this contract will be unrecoverable,
            // we send to the developer who will fix the mistake and deposit in the uniswap pool.
            // Don't worry though, we didn't screw up the math!
            payable(developer).transfer(msg.value);
            return;
        }
        uint presaleEndTime = presaleStartTime + kPresalePeriod;
        if (block.timestamp < presaleEndTime && address(this).balance - msg.value < kPresaleHardCap) {
            uint tokens = msg.value.mul(kPresaleTokensPerEth);
            require(_balances[msg.sender].add(tokens) <= kMaxPresaleTokensPerAccount, "Exceeded the presale limit");
            _mint(msg.sender, tokens);
            return;
        }
        require(uniswapPair == address(0), "Presale has ended");
        msg.sender.transfer(msg.value);
        listToken();
        payReward();
    }
    
    // To make everyone's lives just a little more interesting, reprices will be separated
    // by roughly one day, but the exact timing is subject to the vicissitudes of fate.
    // If the token has not yet been listed, or if the last reprice took place less than
    // 23.5 hours ago, this function will fail.
    // If the last reprice was between 23.5 and 24.5 hours ago, this function will succeed
    // probabilistically, with the chance increasing from 0 to 1 linearly over the range.
    // If the last reprice was more than 24.5 hours ago, this function will succeed.
    // Upon success, the token is repriced and the caller is issued a small token reward.
    function maybeReprice() public {
        require(uniswapPair != address(0), "Token hasn't been listed yet");
        require(block.timestamp >= lastRepriceTime + kRepriceInterval - kRepriceWindow / 2, "Too soon since last reprice");
        if (block.timestamp < lastRepriceTime + kRepriceInterval + kRepriceWindow / 2) {
            uint hash = uint(keccak256(abi.encodePacked(msg.sender, block.timestamp))).mod(kRepriceWindow);
            uint mods = block.timestamp.sub(lastRepriceTime + kRepriceInterval - kRepriceWindow / 2);
            require(hash < mods, "The gods frown upon you");
        }
        epoch++;
        lastRepriceTime = uint32(block.timestamp);
        adjustPrice();
        payReward();
    }
    
    // Create uniswap pair for this token, add liquidity, and mint the developer's token cut.
    function listToken() internal {
        require(uniswapPair == address(0), "Token already listed.");
        _approve(address(this), address(kUniswapRouter), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        uint tokens = kPresaleTokensPerEth.mul(address(this).balance);
        _mint(developer, tokens.mul(kDeveloperTokenCut).div(100));
        uniswapPair = kUniswapFactory.getPair(address(this), kWeth);
        if (uniswapPair == address(0)) {
            _mint(address(this), tokens);
            kUniswapRouter.addLiquidityETH{value:address(this).balance}(address(this), tokens, 0, 0, address(this), block.timestamp);
            uniswapPair = kUniswapFactory.getPair(address(this), kWeth);
        } else {
            // Sigh, someone has already pointlessly created the pair. Now we have to do some math :(
            (uint reserveA, uint reserveB,) = IUniswapV2Pair(uniswapPair).getReserves();
            if (address(this) < kWeth) {
                // Round up tokens to ensure that all of the eth will be taken by the router.
                tokens = reserveA.mul(address(this).balance).add(reserveB).sub(1).div(reserveB);
            } else {
                // Round up tokens to ensure that all of the eth will be taken by the router.
                tokens = reserveB.mul(address(this).balance).add(reserveA).sub(1).div(reserveA);
            }
            _mint(address(this), tokens);
            kUniswapRouter.addLiquidityETH{value:address(this).balance}(address(this), tokens, 0, 0, address(this), block.timestamp);
            // Adjust price to match presale.
            adjustPrice();
            // Might have a very small amount of tokens left in our contract. Tidy up.
            uint leftoverTokens = balanceOf(address(this));
            if (leftoverTokens > 0) {
                _burn(address(this), leftoverTokens);
            }
        }
        // Don't think these can fail, but just in case ...
        require(uniswapPair != address(0));
        // Set lastRepriceTime to nearest day since presaleStartTime to avoid reprices
        // occurring at some horrible time in the middle of the night.
        lastRepriceTime = presaleStartTime + ((uint32(block.timestamp) - presaleStartTime + 43200) / 86400) * 86400;
    }
    
    // Adjust token balance of uniswapPair so that token price = 1.2^epoch * presale token price.
    function adjustPrice() internal {
        require(uniswapPair != address(0), "Token hasn't been listed.");
        (uint reserveTokens, uint reserveEth,) = IUniswapV2Pair(uniswapPair).getReserves();
        if (address(this) > kWeth) {
            uint temp = reserveTokens;
            reserveTokens = reserveEth;
            reserveEth = temp;
        }
        uint tokens = reserveEth.mul(kPresaleTokensPerEth);
        for (uint e = 0; e < epoch; e++) {
            tokens = tokens.mul(100).div(100+kTokenPriceBump);
        }
        if (tokens > reserveTokens) {
            _mint(uniswapPair, tokens.sub(reserveTokens));
            IUniswapV2Pair(uniswapPair).sync();
        } else if (tokens < reserveTokens) {
            _burn(uniswapPair, reserveTokens.sub(tokens));
            IUniswapV2Pair(uniswapPair).sync();
        }
    }
    
    // Mint tokens for msg.sender with value equal to kRewardWei.
    function payReward() internal {
    	uint currentTokensPerEth = kPresaleTokensPerEth;
    	for (uint e = 0; e < epoch; e++) {
    	    currentTokensPerEth = currentTokensPerEth.mul(100).div(100+kTokenPriceBump);
    	}
    	_mint(msg.sender, kRewardWei.mul(currentTokensPerEth));
    }
    
    // Just in case people do something stupid like send WETH instead of ETH to presale,
    // allow for recovery by devs.
    function transferERC(address token, address recipient, uint amount) public {
        require(msg.sender == developer, "Nice try non-dev");
        require(token != uniswapPair && token != address(this), "Nice try dev, no rug pulls allowed");
        IERC20(token).transfer(recipient, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"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"},{"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":[],"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":"developer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":[],"name":"lastRepriceTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maybeReprice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStartTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferERC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040805180820190915260088082526729b637bba13ab93760c11b60209092019182526200004391600591620000b1565b506040805180820190915260028082526129a160f11b60209092019182526200006f91600691620000b1565b5060078054601260ff1990911617905560008054336001600160a01b03199091161763ffffffff60a01b1916600160a01b4263ffffffff16021790556200015d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620000e9576000855562000134565b82601f106200010457805160ff191683800117855562000134565b8280016001018555821562000134579182015b828111156200013457825182559160200191906001019062000117565b506200014292915062000146565b5090565b5b8082111562000142576000815560010162000147565b611cd7806200016d6000396000f3fe60806040526004361061010d5760003560e01c806385b34bc911610095578063a82524b211610064578063a82524b214610599578063a9059cbb146105ae578063c816841b146105e7578063ca4b208b14610618578063dd62ed3e1461062d576102d3565b806385b34bc914610508578063900cf0cf1461053657806395d89b411461054b578063a457c2d714610560576102d3565b806323b872dd116100dc57806323b872dd146103eb578063313ce5671461042e5780633950935114610459578063417956921461049257806370a08231146104d5576102d3565b806306fdde03146102d8578063095ea7b3146103625780631711e960146103af57806318160ddd146103c4576102d3565b366102d35733737a250d5630b4cf539739df2c5dacb4c659f2488d141561016e57600080546040516001600160a01b03909116913480156108fc02929091818181858888f19350505050158015610168573d6000803e3d6000fd5b506102d1565b60005463ffffffff600160a01b909104811662093a800116428111801561019f5750680ad78ebc5ac6200000344703105b156102405760006101b33462015f90610668565b3360009081526002602052604090205490915069130ee8e7179044400000906101dc90836106ca565b111561022f576040805162461bcd60e51b815260206004820152601a60248201527f4578636565646564207468652070726573616c65206c696d6974000000000000604482015290519081900360640190fd5b6102393382610724565b50506102d1565b6001546001600160a01b031615610292576040805162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a185cc8195b991959607a1b604482015290519081900360640190fd5b60405133903480156108fc02916000818181858888f193505050501580156102be573d6000803e3d6000fd5b506102c761080a565b6102cf610d04565b505b005b600080fd5b3480156102e457600080fd5b506102ed610d56565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032757818101518382015260200161030f565b50505050905090810190601f1680156103545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036e57600080fd5b5061039b6004803603604081101561038557600080fd5b506001600160a01b038135169060200135610dec565b604080519115158252519081900360200190f35b3480156103bb57600080fd5b506102d1610e02565b3480156103d057600080fd5b506103d961100b565b60408051918252519081900360200190f35b3480156103f757600080fd5b5061039b6004803603606081101561040e57600080fd5b506001600160a01b03813581169160208101359091169060400135611011565b34801561043a57600080fd5b5061044361107a565b6040805160ff9092168252519081900360200190f35b34801561046557600080fd5b5061039b6004803603604081101561047c57600080fd5b506001600160a01b038135169060200135611083565b34801561049e57600080fd5b506102d1600480360360608110156104b557600080fd5b506001600160a01b038135811691602081013590911690604001356110b9565b3480156104e157600080fd5b506103d9600480360360208110156104f857600080fd5b50356001600160a01b03166111f5565b34801561051457600080fd5b5061051d611210565b6040805163ffffffff9092168252519081900360200190f35b34801561054257600080fd5b5061051d611223565b34801561055757600080fd5b506102ed611236565b34801561056c57600080fd5b5061039b6004803603604081101561058357600080fd5b506001600160a01b038135169060200135611297565b3480156105a557600080fd5b5061051d6112e6565b3480156105ba57600080fd5b5061039b600480360360408110156105d157600080fd5b506001600160a01b0381351690602001356112f9565b3480156105f357600080fd5b506105fc611306565b604080516001600160a01b039092168252519081900360200190f35b34801561062457600080fd5b506105fc611315565b34801561063957600080fd5b506103d96004803603604081101561065057600080fd5b506001600160a01b0381358116916020013516611324565b600082610677575060006106c4565b8282028284828161068457fe5b04146106c15760405162461bcd60e51b8152600401808060200182810382526021815260200180611bca6021913960400191505060405180910390fd5b90505b92915050565b6000828201838110156106c1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b03821661077f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60045461078c90826106ca565b6004556001600160a01b0382166000908152600260205260409020546107b290826106ca565b6001600160a01b03831660008181526002602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001546001600160a01b031615610860576040805162461bcd60e51b81526020600482015260156024820152742a37b5b2b71030b63932b0b23c903634b9ba32b21760591b604482015290519081900360640190fd5b61088130737a250d5630b4cf539739df2c5dacb4c659f2488d60001961134f565b600061089062015f9047610668565b6000549091506108be906001600160a01b03166108b960646108b3856005610668565b9061143b565b610724565b6040805163e6a4390560e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201529051735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a43905916044808301926020929190829003018186803b15801561092957600080fd5b505afa15801561093d573d6000803e3d6000fd5b505050506040513d602081101561095357600080fd5b5051600180546001600160a01b0319166001600160a01b03928316179081905516610ae1576109823082610724565b6040805163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163f305d71991479160c48082019260609290919082900301818588803b1580156109f957600080fd5b505af1158015610a0d573d6000803e3d6000fd5b50505050506040513d6060811015610a2457600080fd5b50506040805163e6a4390560e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201529051735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a43905916044808301926020929190829003018186803b158015610a9157600080fd5b505afa158015610aa5573d6000803e3d6000fd5b505050506040513d6020811015610abb57600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055610cad565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b505050506040513d6060811015610b5c57600080fd5b5080516020909101516001600160701b03918216935016905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2301015610bbb57610bb4816108b36001610bae83610ba88847610668565b906106ca565b9061147d565b9250610bd5565b610bd2826108b36001610bae83610ba88747610668565b92505b610bdf3084610724565b6040805163f305d71960e01b8152306004820181905260248201869052600060448301819052606483015260848201524260a48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163f305d71991479160c48082019260609290919082900301818588803b158015610c5657600080fd5b505af1158015610c6a573d6000803e3d6000fd5b50505050506040513d6060811015610c8157600080fd5b50610c8c90506114bf565b6000610c97306111f5565b90508015610ca957610ca93082611738565b5050505b6001546001600160a01b0316610cc257600080fd5b506000805462015180600160a01b820463ffffffff9081164281900361a8c001821683900490920290910116600160e01b026001600160e01b03909116179055565b62015f9060005b600054600160c01b900463ffffffff16811015610d3c57610d3260786108b3846064610668565b9150600101610d0b565b50610d53336108b967016345785d8a000084610668565b50565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610de25780601f10610db757610100808354040283529160200191610de2565b820191906000526020600020905b815481529060010190602001808311610dc557829003601f168201915b5050505050905090565b6000610df933848461134f565b50600192915050565b6001546001600160a01b0316610e5f576040805162461bcd60e51b815260206004820152601c60248201527f546f6b656e206861736e2774206265656e206c69737465642079657400000000604482015290519081900360640190fd5b60005463ffffffff600160e01b909104811662014a780116421015610ecb576040805162461bcd60e51b815260206004820152601b60248201527f546f6f20736f6f6e2073696e6365206c61737420726570726963650000000000604482015290519081900360640190fd5b6000546201588863ffffffff600160e01b90920482160116421015610fb657604080513360601b602080830191909152426034808401919091528351808403909101815260549092019092528051910120600090610f2b90610e10611828565b90506000610f5d6002610e10600054429290910463ffffffff600160e01b909204821603620151800181169061147d16565b9050808210610fb3576040805162461bcd60e51b815260206004820152601760248201527f54686520676f64732066726f776e2075706f6e20796f75000000000000000000604482015290519081900360640190fd5b50505b6000805463ffffffff60c01b198116600160c01b9182900463ffffffff9081166001018116909202176001600160e01b0316600160e01b4292909216919091021790556110016114bf565b611009610d04565b565b60045490565b600061101e84848461186a565b611070843361106b85604051806060016040528060288152602001611beb602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906119bc565b61134f565b5060019392505050565b60075460ff1690565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610df991859061106b90866106ca565b6000546001600160a01b0316331461110b576040805162461bcd60e51b815260206004820152601060248201526f2734b1b2903a393c903737b716b232bb60811b604482015290519081900360640190fd5b6001546001600160a01b0384811691161480159061113257506001600160a01b0383163014155b61116d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611ba86022913960400191505060405180910390fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156111c457600080fd5b505af11580156111d8573d6000803e3d6000fd5b505050506040513d60208110156111ee57600080fd5b5050505050565b6001600160a01b031660009081526002602052604090205490565b600054600160e01b900463ffffffff1681565b600054600160c01b900463ffffffff1681565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610de25780601f10610db757610100808354040283529160200191610de2565b6000610df9338461106b85604051806060016040528060258152602001611c7d602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906119bc565b600054600160a01b900463ffffffff1681565b6000610df933848461186a565b6001546001600160a01b031681565b6000546001600160a01b031681565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6001600160a01b0383166113945760405162461bcd60e51b8152600401808060200182810382526024815260200180611c596024913960400191505060405180910390fd5b6001600160a01b0382166113d95760405162461bcd60e51b8152600401808060200182810382526022815260200180611b606022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60006106c183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611a53565b60006106c183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119bc565b6001546001600160a01b031661151c576040805162461bcd60e51b815260206004820152601960248201527f546f6b656e206861736e2774206265656e206c69737465642e00000000000000604482015290519081900360640190fd5b600080600160009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561156d57600080fd5b505afa158015611581573d6000803e3d6000fd5b505050506040513d606081101561159757600080fd5b5080516020909101516001600160701b03918216935016905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23011156115ce57905b60006115dd8262015f90610668565b905060005b600054600160c01b900463ffffffff168110156116135761160960786108b3846064610668565b91506001016115e2565b50828111156116a357600154611636906001600160a01b03166108b9838661147d565b600160009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168657600080fd5b505af115801561169a573d6000803e3d6000fd5b50505050611733565b82811015611733576001546116ca906001600160a01b03166116c5858461147d565b611738565b600160009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561171a57600080fd5b505af115801561172e573d6000803e3d6000fd5b505050505b505050565b6001600160a01b03821661177d5760405162461bcd60e51b8152600401808060200182810382526021815260200180611c136021913960400191505060405180910390fd5b6117ba81604051806060016040528060228152602001611b3e602291396001600160a01b03851660009081526002602052604090205491906119bc565b6001600160a01b0383166000908152600260205260409020556004546117e0908261147d565b6004556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60006106c183836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611ab8565b6001600160a01b0383166118af5760405162461bcd60e51b8152600401808060200182810382526025815260200180611c346025913960400191505060405180910390fd5b6001600160a01b0382166118f45760405162461bcd60e51b8152600401808060200182810382526023815260200180611b1b6023913960400191505060405180910390fd5b61193181604051806060016040528060268152602001611b82602691396001600160a01b03861660009081526002602052604090205491906119bc565b6001600160a01b03808516600090815260026020526040808220939093559084168152205461196090826106ca565b6001600160a01b0380841660008181526002602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a4b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a105781810151838201526020016119f8565b50505050905090810190601f168015611a3d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611aa25760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611a105781810151838201526020016119f8565b506000838581611aae57fe5b0495945050505050565b60008183611b075760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611a105781810151838201526020016119f8565b50828481611b1157fe5b0694935050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e69636520747279206465762c206e6f207275672070756c6c7320616c6c6f776564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028013bab387efaa7539f6ed47a127c0b71df7d5313448a490d11ba020514856c64736f6c63430007050033

Deployed Bytecode

0x60806040526004361061010d5760003560e01c806385b34bc911610095578063a82524b211610064578063a82524b214610599578063a9059cbb146105ae578063c816841b146105e7578063ca4b208b14610618578063dd62ed3e1461062d576102d3565b806385b34bc914610508578063900cf0cf1461053657806395d89b411461054b578063a457c2d714610560576102d3565b806323b872dd116100dc57806323b872dd146103eb578063313ce5671461042e5780633950935114610459578063417956921461049257806370a08231146104d5576102d3565b806306fdde03146102d8578063095ea7b3146103625780631711e960146103af57806318160ddd146103c4576102d3565b366102d35733737a250d5630b4cf539739df2c5dacb4c659f2488d141561016e57600080546040516001600160a01b03909116913480156108fc02929091818181858888f19350505050158015610168573d6000803e3d6000fd5b506102d1565b60005463ffffffff600160a01b909104811662093a800116428111801561019f5750680ad78ebc5ac6200000344703105b156102405760006101b33462015f90610668565b3360009081526002602052604090205490915069130ee8e7179044400000906101dc90836106ca565b111561022f576040805162461bcd60e51b815260206004820152601a60248201527f4578636565646564207468652070726573616c65206c696d6974000000000000604482015290519081900360640190fd5b6102393382610724565b50506102d1565b6001546001600160a01b031615610292576040805162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a185cc8195b991959607a1b604482015290519081900360640190fd5b60405133903480156108fc02916000818181858888f193505050501580156102be573d6000803e3d6000fd5b506102c761080a565b6102cf610d04565b505b005b600080fd5b3480156102e457600080fd5b506102ed610d56565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032757818101518382015260200161030f565b50505050905090810190601f1680156103545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036e57600080fd5b5061039b6004803603604081101561038557600080fd5b506001600160a01b038135169060200135610dec565b604080519115158252519081900360200190f35b3480156103bb57600080fd5b506102d1610e02565b3480156103d057600080fd5b506103d961100b565b60408051918252519081900360200190f35b3480156103f757600080fd5b5061039b6004803603606081101561040e57600080fd5b506001600160a01b03813581169160208101359091169060400135611011565b34801561043a57600080fd5b5061044361107a565b6040805160ff9092168252519081900360200190f35b34801561046557600080fd5b5061039b6004803603604081101561047c57600080fd5b506001600160a01b038135169060200135611083565b34801561049e57600080fd5b506102d1600480360360608110156104b557600080fd5b506001600160a01b038135811691602081013590911690604001356110b9565b3480156104e157600080fd5b506103d9600480360360208110156104f857600080fd5b50356001600160a01b03166111f5565b34801561051457600080fd5b5061051d611210565b6040805163ffffffff9092168252519081900360200190f35b34801561054257600080fd5b5061051d611223565b34801561055757600080fd5b506102ed611236565b34801561056c57600080fd5b5061039b6004803603604081101561058357600080fd5b506001600160a01b038135169060200135611297565b3480156105a557600080fd5b5061051d6112e6565b3480156105ba57600080fd5b5061039b600480360360408110156105d157600080fd5b506001600160a01b0381351690602001356112f9565b3480156105f357600080fd5b506105fc611306565b604080516001600160a01b039092168252519081900360200190f35b34801561062457600080fd5b506105fc611315565b34801561063957600080fd5b506103d96004803603604081101561065057600080fd5b506001600160a01b0381358116916020013516611324565b600082610677575060006106c4565b8282028284828161068457fe5b04146106c15760405162461bcd60e51b8152600401808060200182810382526021815260200180611bca6021913960400191505060405180910390fd5b90505b92915050565b6000828201838110156106c1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b03821661077f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60045461078c90826106ca565b6004556001600160a01b0382166000908152600260205260409020546107b290826106ca565b6001600160a01b03831660008181526002602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001546001600160a01b031615610860576040805162461bcd60e51b81526020600482015260156024820152742a37b5b2b71030b63932b0b23c903634b9ba32b21760591b604482015290519081900360640190fd5b61088130737a250d5630b4cf539739df2c5dacb4c659f2488d60001961134f565b600061089062015f9047610668565b6000549091506108be906001600160a01b03166108b960646108b3856005610668565b9061143b565b610724565b6040805163e6a4390560e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201529051735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a43905916044808301926020929190829003018186803b15801561092957600080fd5b505afa15801561093d573d6000803e3d6000fd5b505050506040513d602081101561095357600080fd5b5051600180546001600160a01b0319166001600160a01b03928316179081905516610ae1576109823082610724565b6040805163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163f305d71991479160c48082019260609290919082900301818588803b1580156109f957600080fd5b505af1158015610a0d573d6000803e3d6000fd5b50505050506040513d6060811015610a2457600080fd5b50506040805163e6a4390560e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201529051735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a43905916044808301926020929190829003018186803b158015610a9157600080fd5b505afa158015610aa5573d6000803e3d6000fd5b505050506040513d6020811015610abb57600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055610cad565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b505050506040513d6060811015610b5c57600080fd5b5080516020909101516001600160701b03918216935016905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2301015610bbb57610bb4816108b36001610bae83610ba88847610668565b906106ca565b9061147d565b9250610bd5565b610bd2826108b36001610bae83610ba88747610668565b92505b610bdf3084610724565b6040805163f305d71960e01b8152306004820181905260248201869052600060448301819052606483015260848201524260a48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163f305d71991479160c48082019260609290919082900301818588803b158015610c5657600080fd5b505af1158015610c6a573d6000803e3d6000fd5b50505050506040513d6060811015610c8157600080fd5b50610c8c90506114bf565b6000610c97306111f5565b90508015610ca957610ca93082611738565b5050505b6001546001600160a01b0316610cc257600080fd5b506000805462015180600160a01b820463ffffffff9081164281900361a8c001821683900490920290910116600160e01b026001600160e01b03909116179055565b62015f9060005b600054600160c01b900463ffffffff16811015610d3c57610d3260786108b3846064610668565b9150600101610d0b565b50610d53336108b967016345785d8a000084610668565b50565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610de25780601f10610db757610100808354040283529160200191610de2565b820191906000526020600020905b815481529060010190602001808311610dc557829003601f168201915b5050505050905090565b6000610df933848461134f565b50600192915050565b6001546001600160a01b0316610e5f576040805162461bcd60e51b815260206004820152601c60248201527f546f6b656e206861736e2774206265656e206c69737465642079657400000000604482015290519081900360640190fd5b60005463ffffffff600160e01b909104811662014a780116421015610ecb576040805162461bcd60e51b815260206004820152601b60248201527f546f6f20736f6f6e2073696e6365206c61737420726570726963650000000000604482015290519081900360640190fd5b6000546201588863ffffffff600160e01b90920482160116421015610fb657604080513360601b602080830191909152426034808401919091528351808403909101815260549092019092528051910120600090610f2b90610e10611828565b90506000610f5d6002610e10600054429290910463ffffffff600160e01b909204821603620151800181169061147d16565b9050808210610fb3576040805162461bcd60e51b815260206004820152601760248201527f54686520676f64732066726f776e2075706f6e20796f75000000000000000000604482015290519081900360640190fd5b50505b6000805463ffffffff60c01b198116600160c01b9182900463ffffffff9081166001018116909202176001600160e01b0316600160e01b4292909216919091021790556110016114bf565b611009610d04565b565b60045490565b600061101e84848461186a565b611070843361106b85604051806060016040528060288152602001611beb602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906119bc565b61134f565b5060019392505050565b60075460ff1690565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610df991859061106b90866106ca565b6000546001600160a01b0316331461110b576040805162461bcd60e51b815260206004820152601060248201526f2734b1b2903a393c903737b716b232bb60811b604482015290519081900360640190fd5b6001546001600160a01b0384811691161480159061113257506001600160a01b0383163014155b61116d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611ba86022913960400191505060405180910390fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156111c457600080fd5b505af11580156111d8573d6000803e3d6000fd5b505050506040513d60208110156111ee57600080fd5b5050505050565b6001600160a01b031660009081526002602052604090205490565b600054600160e01b900463ffffffff1681565b600054600160c01b900463ffffffff1681565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610de25780601f10610db757610100808354040283529160200191610de2565b6000610df9338461106b85604051806060016040528060258152602001611c7d602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906119bc565b600054600160a01b900463ffffffff1681565b6000610df933848461186a565b6001546001600160a01b031681565b6000546001600160a01b031681565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6001600160a01b0383166113945760405162461bcd60e51b8152600401808060200182810382526024815260200180611c596024913960400191505060405180910390fd5b6001600160a01b0382166113d95760405162461bcd60e51b8152600401808060200182810382526022815260200180611b606022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60006106c183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611a53565b60006106c183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119bc565b6001546001600160a01b031661151c576040805162461bcd60e51b815260206004820152601960248201527f546f6b656e206861736e2774206265656e206c69737465642e00000000000000604482015290519081900360640190fd5b600080600160009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561156d57600080fd5b505afa158015611581573d6000803e3d6000fd5b505050506040513d606081101561159757600080fd5b5080516020909101516001600160701b03918216935016905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23011156115ce57905b60006115dd8262015f90610668565b905060005b600054600160c01b900463ffffffff168110156116135761160960786108b3846064610668565b91506001016115e2565b50828111156116a357600154611636906001600160a01b03166108b9838661147d565b600160009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168657600080fd5b505af115801561169a573d6000803e3d6000fd5b50505050611733565b82811015611733576001546116ca906001600160a01b03166116c5858461147d565b611738565b600160009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561171a57600080fd5b505af115801561172e573d6000803e3d6000fd5b505050505b505050565b6001600160a01b03821661177d5760405162461bcd60e51b8152600401808060200182810382526021815260200180611c136021913960400191505060405180910390fd5b6117ba81604051806060016040528060228152602001611b3e602291396001600160a01b03851660009081526002602052604090205491906119bc565b6001600160a01b0383166000908152600260205260409020556004546117e0908261147d565b6004556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60006106c183836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611ab8565b6001600160a01b0383166118af5760405162461bcd60e51b8152600401808060200182810382526025815260200180611c346025913960400191505060405180910390fd5b6001600160a01b0382166118f45760405162461bcd60e51b8152600401808060200182810382526023815260200180611b1b6023913960400191505060405180910390fd5b61193181604051806060016040528060268152602001611b82602691396001600160a01b03861660009081526002602052604090205491906119bc565b6001600160a01b03808516600090815260026020526040808220939093559084168152205461196090826106ca565b6001600160a01b0380841660008181526002602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a4b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a105781810151838201526020016119f8565b50505050905090810190601f168015611a3d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611aa25760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611a105781810151838201526020016119f8565b506000838581611aae57fe5b0495945050505050565b60008183611b075760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611a105781810151838201526020016119f8565b50828481611b1157fe5b0694935050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e69636520747279206465762c206e6f207275672070756c6c7320616c6c6f776564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028013bab387efaa7539f6ed47a127c0b71df7d5313448a490d11ba020514856c64736f6c63430007050033

Deployed Bytecode Sourcemap

3053:12974:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9207:10;4698:42;9207:37;9203:603;;;9743:9;;;9735:38;;-1:-1:-1;;;;;9743:9:0;;;;9763;9735:38;;;;;9763:9;;9735:38;9743:9;9735:38;9763:9;9743;9735:38;;;;;;;;;;;;;;;;;;;;;9788:7;;9203:603;9816:19;9838:16;;-1:-1:-1;;;9838:16:0;;;;;3361:6;9838:33;9816:55;9886:15;:32;-1:-1:-1;9886:87:0;;;;;4302:16;9946:9;9922:21;:33;:51;9886:87;9882:348;;;9990:11;10004:35;:9;4008:5;10004:13;:35::i;:::-;10072:10;10062:21;;;;:9;:21;;;;;;9990:49;;-1:-1:-1;4167:33:0;;10062;;9990:49;10062:25;:33::i;:::-;:64;;10054:103;;;;;-1:-1:-1;;;10054:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10172:25;10178:10;10190:6;10172:5;:25::i;:::-;10212:7;;;;9882:348;10248:11;;-1:-1:-1;;;;;10248:11:0;:25;10240:55;;;;;-1:-1:-1;;;10240:55:0;;;;;;;;;;;;-1:-1:-1;;;10240:55:0;;;;;;;;;;;;;;;10306:30;;:10;;10326:9;10306:30;;;;;;;;;10326:9;10306:10;:30;;;;;;;;;;;;;;;;;;;;;10347:11;:9;:11::i;:::-;10369;:9;:11::i;:::-;9165:1223;;3053:12974;;;;;5451:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6251:150;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6251:150:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;11080:732;;;;;;;;;;;;;:::i;5728:91::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;6409:300;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6409:300:0;;;;;;;;;;;;;;;;;:::i;5637:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6717:206;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6717:206:0;;;;;;;;:::i;15722:302::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15722:302:0;;;;;;;;;;;;;;;;;:::i;5827:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5827:110:0;-1:-1:-1;;;;;5827:110:0;;:::i;3211:29::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3185:19;;;;;;;;;;;;;:::i;5542:87::-;;;;;;;;;;;;;:::i;6931:257::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6931:257:0;;;;;;;;:::i;3148:30::-;;;;;;;;;;;;;:::i;5945:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5945:156:0;;;;;;;;:::i;3247:26::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3247:26:0;;;;;;;;;;;;;;3117:24;;;;;;;;;;;;;:::i;6109:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6109:134:0;;;;;;;;;;:::i;717:250::-;775:7;799:6;795:47;;-1:-1:-1;829:1:0;822:8;;795:47;866:5;;;870:1;866;:5;:1;890:5;;;;;:10;882:56;;;;-1:-1:-1;;;882:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;958:1;-1:-1:-1;717:250:0;;;;;:::o;180:181::-;238:7;270:5;;;294:6;;;;286:46;;;;;-1:-1:-1;;;286:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7675:308;-1:-1:-1;;;;;7751:21:0;;7743:65;;;;;-1:-1:-1;;;7743:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7836:12;;:24;;7853:6;7836:16;:24::i;:::-;7821:12;:39;-1:-1:-1;;;;;7892:18:0;;;;;;:9;:18;;;;;;:30;;7915:6;7892:22;:30::i;:::-;-1:-1:-1;;;;;7871:18:0;;;;;;:9;:18;;;;;;;;:51;;;;7938:37;;;;;;;7871:18;;;;7938:37;;;;;;;;;;7675:308;;:::o;11919:2321::-;11968:11;;-1:-1:-1;;;;;11968:11:0;:25;11960:59;;;;;-1:-1:-1;;;11960:59:0;;;;;;;;;;;;-1:-1:-1;;;11960:59:0;;;;;;;;;;;;;;;12030:116;12047:4;4698:42;-1:-1:-1;;12030:8:0;:116::i;:::-;12157:11;12171:47;4008:5;12196:21;12171:24;:47::i;:::-;12235:9;;12157:61;;-1:-1:-1;12229:57:0;;-1:-1:-1;;;;;12235:9:0;12246:39;12281:3;12246:30;12157:61;3916:1;12246:10;:30::i;:::-;:34;;:39::i;:::-;12229:5;:57::i;:::-;12311:45;;;-1:-1:-1;;;12311:45:0;;12343:4;12311:45;;;;4456:42;12311:45;;;;;;4576:42;;12311:23;;:45;;;;;;;;;;;;;;4576:42;12311:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12311:45:0;12297:11;:59;;-1:-1:-1;;;;;;12297:59:0;-1:-1:-1;;;;;12297:59:0;;;;;;;;12371:11;12367:1482;;12413:28;12427:4;12434:6;12413:5;:28::i;:::-;12456:120;;;-1:-1:-1;;;12456:120:0;;12524:4;12456:120;;;;;;;;;;;;12539:1;12456:120;;;;;;;;;;;;;;12560:15;12456:120;;;;;;4698:42;;12456:30;;12493:21;;12456:120;;;;;;;;;;;;;;;12493:21;4698:42;12456:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12456:120:0;12605:45;;-1:-1:-1;;;12605:45:0;;12637:4;12605:45;;;;4456:42;12605:45;;;;;;4576:42;;12605:23;;:45;;;;;12456:120;;12605:45;;;;;;;4576:42;12605:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12605:45:0;12591:11;:59;;-1:-1:-1;;;;;;12591:59:0;-1:-1:-1;;;;;12591:59:0;;;;;;;;;12367:1482;;;12787:13;12802;12835:11;;;;;;;;;-1:-1:-1;;;;;12835:11:0;-1:-1:-1;;;;;12820:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12820:41:0;;;;;;;-1:-1:-1;;;;;12786:75:0;;;;-1:-1:-1;12786:75:0;;-1:-1:-1;4456:42:0;12888:4;12880:21;12876:451;;;13026:70;13087:8;13026:56;13080:1;13026:49;13087:8;13026:35;:8;13039:21;13026:12;:35::i;:::-;:39;;:49::i;:::-;:53;;:56::i;:70::-;13017:79;;12876:451;;;13241:70;13302:8;13241:56;13295:1;13241:49;13302:8;13241:35;:8;13254:21;13241:12;:35::i;:70::-;13232:79;;12876:451;13341:28;13355:4;13362:6;13341:5;:28::i;:::-;13384:120;;;-1:-1:-1;;;13384:120:0;;13452:4;13384:120;;;;;;;;;;;;13467:1;13384:120;;;;;;;;;;;;;;13488:15;13384:120;;;;;;4698:42;;13384:30;;13421:21;;13384:120;;;;;;;;;;;;;;;13421:21;4698:42;13384:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13566:13:0;;-1:-1:-1;13566:11:0;:13::i;:::-;13682:19;13704:24;13722:4;13704:9;:24::i;:::-;13682:46;-1:-1:-1;13747:18:0;;13743:95;;13786:36;13800:4;13807:14;13786:5;:36::i;:::-;12367:1482;;;;13928:11;;-1:-1:-1;;;;;13928:11:0;13920:34;;;;;;-1:-1:-1;14190:16:0;;;14218:5;-1:-1:-1;;;14190:16:0;;;;;;14171:15;14164:42;;;14209:5;14164:50;14163:60;;;;;14162:70;;;14143:89;;;14125:107;-1:-1:-1;;;14125:107:0;-1:-1:-1;;;;;14125:107:0;;;;;;11919:2321::o;15293:291::-;4008:5;15331:24;15386:129;15407:5;;-1:-1:-1;;;15407:5:0;;;;15403:9;;15386:129;;;15453:53;15486:19;15453:28;:19;15486:3;15453:23;:28::i;:53::-;15431:75;-1:-1:-1;15414:3:0;;15386:129;;;-1:-1:-1;15522:54:0;15528:10;15540:35;3776:8;15555:19;15540:14;:35::i;15522:54::-;15293:291;:::o;5451:83::-;5521:5;5514:12;;;;;;;;-1:-1:-1;;5514:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5488:13;;5514:12;;5521:5;;5514:12;;5521:5;5514:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5451:83;:::o;6251:150::-;6317:4;6334:37;6343:10;6355:7;6364:6;6334:8;:37::i;:::-;-1:-1:-1;6389:4:0;6251:150;;;;:::o;11080:732::-;11130:11;;-1:-1:-1;;;;;11130:11:0;11122:66;;;;;-1:-1:-1;;;11122:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11226:15;;;-1:-1:-1;;;11226:15:0;;;;;:55;;11207:74;:15;:74;;11199:114;;;;;-1:-1:-1;;;11199:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11346:15;;:55;:15;-1:-1:-1;;;11346:15:0;;;;;:55;11328:73;:15;:73;11324:365;;;11445:45;;;11462:10;11445:45;;;;;;;;;;11474:15;11445:45;;;;;;;;;;;;;;;;;;;;;;;;;11435:56;;;;;11418:9;;11430:82;;3564:4;11430:66;:82::i;:::-;11418:94;-1:-1:-1;11527:9:0;11539:76;11613:1;3564:4;11559:15;;11539;;11596:18;;;11559:15;-1:-1:-1;;;11559:15:0;;;;;:55;3460:5;11559:55;11539:76;;;:19;:76;:::i;:::-;11527:88;;11645:4;11638;:11;11630:47;;;;;-1:-1:-1;;;11630:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11324:365;;;11699:5;:7;;-1:-1:-1;;;;11699:7:0;;-1:-1:-1;;;11699:7:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11717:41:0;-1:-1:-1;;;11742:15:0;11717:41;;;;;;;;;;;11769:13;:11;:13::i;:::-;11793:11;:9;:11::i;:::-;11080:732::o;5728:91::-;5799:12;;5728:91;:::o;6409:300::-;6498:4;6515:36;6525:6;6533:9;6544:6;6515:9;:36::i;:::-;6562:117;6571:6;6579:10;6591:87;6627:6;6591:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6591:19:0;;;;;;:11;:19;;;;;;;;6611:10;6591:31;;;;;;;;;:87;:35;:87::i;:::-;6562:8;:117::i;:::-;-1:-1:-1;6697:4:0;6409:300;;;;;:::o;5637:83::-;5703:9;;;;5637:83;:::o;6717:206::-;6823:10;6797:4;6844:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;6844:32:0;;;;;;;;;;6797:4;;6814:79;;6835:7;;6844:48;;6881:10;6844:36;:48::i;15722:302::-;15830:9;;-1:-1:-1;;;;;15830:9:0;15816:10;:23;15808:52;;;;;-1:-1:-1;;;15808:52:0;;;;;;;;;;;;-1:-1:-1;;;15808:52:0;;;;;;;;;;;;;;;15888:11;;-1:-1:-1;;;;;15879:20:0;;;15888:11;;15879:20;;;;:46;;-1:-1:-1;;;;;;15903:22:0;;15920:4;15903:22;;15879:46;15871:93;;;;-1:-1:-1;;;15871:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15982:5;-1:-1:-1;;;;;15975:22:0;;15998:9;16009:6;15975:41;;;;;;;;;;;;;-1:-1:-1;;;;;15975:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15722:302:0:o;5827:110::-;-1:-1:-1;;;;;5911:18:0;5884:7;5911:18;;;:9;:18;;;;;;;5827:110::o;3211:29::-;;;-1:-1:-1;;;3211:29:0;;;;;:::o;3185:19::-;;;-1:-1:-1;;;3185:19:0;;;;;:::o;5542:87::-;5614:7;5607:14;;;;;;;;-1:-1:-1;;5607:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:13;;5607:14;;5614:7;;5607:14;;5614:7;5607:14;;;;;;;;;;;;;;;;;;;;;;;;6931:257;7016:4;7033:125;7042:10;7054:7;7063:94;7100:15;7063:94;;;;;;;;;;;;;;;;;7075:10;7063:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;7063:32:0;;;;;;;;;;;:94;:36;:94::i;3148:30::-;;;-1:-1:-1;;;3148:30:0;;;;;:::o;5945:156::-;6014:4;6031:40;6041:10;6053:9;6064:6;6031:9;:40::i;3247:26::-;;;-1:-1:-1;;;;;3247:26:0;;:::o;3117:24::-;;;-1:-1:-1;;;;;3117:24:0;;:::o;6109:134::-;-1:-1:-1;;;;;6208:18:0;;;6181:7;6208:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6109:134::o;8347:338::-;-1:-1:-1;;;;;8441:19:0;;8433:68;;;;-1:-1:-1;;;8433:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8520:21:0;;8512:68;;;;-1:-1:-1;;;8512:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8593:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8645:32;;;;;;;;;;;;;;;;;8347:338;;;:::o;975:132::-;1033:7;1060:39;1064:1;1067;1060:39;;;;;;;;;;;;;;;;;:3;:39::i;369:136::-;427:7;454:43;458:1;461;454:43;;;;;;;;;;;;;;;;;:3;:43::i;14351:863::-;14402:11;;-1:-1:-1;;;;;14402:11:0;14394:63;;;;;-1:-1:-1;;;14394:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14469:18;14489:15;14524:11;;;;;;;;;-1:-1:-1;;;;;14524:11:0;-1:-1:-1;;;;;14509:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14509:41:0;;;;;;;-1:-1:-1;;;;;14468:82:0;;;;-1:-1:-1;14468:82:0;;-1:-1:-1;4456:42:0;14573:4;14565:21;14561:152;;;14659:10;14561:152;14723:11;14737:36;:10;4008:5;14737:14;:36::i;:::-;14723:50;;14789:6;14784:109;14805:5;;-1:-1:-1;;;14805:5:0;;;;14801:9;;14784:109;;;14841:40;14861:19;14841:15;:6;14861:3;14841:10;:15::i;:40::-;14832:49;-1:-1:-1;14812:3:0;;14784:109;;;;14916:13;14907:6;:22;14903:304;;;14952:11;;14946:45;;-1:-1:-1;;;;;14952:11:0;14965:25;:6;14976:13;14965:10;:25::i;14946:45::-;15021:11;;;;;;;;;-1:-1:-1;;;;;15021:11:0;-1:-1:-1;;;;;15006:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14903:304;;;15071:13;15062:6;:22;15058:149;;;15107:11;;15101:45;;-1:-1:-1;;;;;15107:11:0;15120:25;:13;15138:6;15120:17;:25::i;:::-;15101:5;:45::i;:::-;15176:11;;;;;;;;;-1:-1:-1;;;;;15176:11:0;-1:-1:-1;;;;;15161:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15058:149;14351:863;;;:::o;7991:348::-;-1:-1:-1;;;;;8067:21:0;;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8160:68;8183:6;8160:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8160:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;8139:18:0;;;;;;:9;:18;;;;;:89;8254:12;;:24;;8271:6;8254:16;:24::i;:::-;8239:12;:39;8294:37;;;;;;;;8320:1;;-1:-1:-1;;;;;8294:37:0;;;;;;;;;;;;7991:348;;:::o;1314:130::-;1372:7;1399:37;1403:1;1406;1399:37;;;;;;;;;;;;;;;;;:3;:37::i;7196:471::-;-1:-1:-1;;;;;7294:20:0;;7286:70;;;;-1:-1:-1;;;7286:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7375:23:0;;7367:71;;;;-1:-1:-1;;;7367:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7471;7493:6;7471:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7471:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7451:17:0;;;;;;;:9;:17;;;;;;:91;;;;7576:20;;;;;;;:32;;7601:6;7576:24;:32::i;:::-;-1:-1:-1;;;;;7553:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;7624:35;;;;;;;7553:20;;7624:35;;;;;;;;;;;;;7196:471;;;:::o;517:192::-;603:7;639:12;631:6;;;;623:29;;;;-1:-1:-1;;;623:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;675:5:0;;;517:192::o;1115:191::-;1201:7;1236:12;1229:5;1221:28;;;;-1:-1:-1;;;1221:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1260:9;1276:1;1272;:5;;;;;;;1115:191;-1:-1:-1;;;;;1115:191:0:o;1452:166::-;1538:7;1574:12;1566:6;1558:29;;;;-1:-1:-1;;;1558:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1609:1;1605;:5;;;;;;;1452:166;-1:-1:-1;;;;1452:166:0:o

Swarm Source

ipfs://28013bab387efaa7539f6ed47a127c0b71df7d5313448a490d11ba020514856c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.