Token PHOENIX

NFT  
 

Overview [ERC-20]

Max Total Supply:
500,000,000 PHOENIX

Holders:
72 (0.00%)

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Phoenix is a ERC-20 utility token used to access the most exclusive NFT content in the animal kingdom. Phoenix has an aggressive stakeholder centric tokenomics and fully locked liquidity and well audited codebase.

# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PHOENIX

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-02
*/

/*
 * Insert info about your project here
 *
 * 
 * ****USING FTPAntiBot**** 
 *
 * 
 * Visit FairTokenProject.com/#antibot to learn how to use AntiBot with your project
 * Your contract must hold 5Bil $GOLD(ProjektGold) or 5Bil $GREEN(ProjektGreen) in order to make calls on mainnet
 * Calls on kovan testnet require > 1 $GOLD or $GREEN
 * FairTokenProject is giving away 500Bil $GREEN to projects on a first come first serve basis for use of AntiBot
 */ 

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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;
    }
}

contract Ownable is Context {
    address private m_Owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        m_Owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return m_Owner;
    }

    modifier onlyOwner() {
        require(_msgSender() == m_Owner, "Ownable: caller is not the owner");
        _;
    }                                                                                           // You will notice there is no renounceOwnership() This is an unsafe and unnecessary practice
}                                                                                               // By renouncing ownership you lose control over your coin and open it up to potential attacks 
                                                                                                // This practice only came about because of the lack of understanding on how contracts work
interface IUniswapV2Factory {                                                                   // We advise not using a renounceOwnership() function. You can look up hacks of address(0) contracts.
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface FTPAntiBot {                                                                          // Here we create the interface to interact with AntiBot
    function scanAddress(address _address, address _safeAddress, address _origin) external returns (bool);
    function registerBlock(address _recipient, address _sender) external;
}

contract PHOENIX is Context, IERC20, Ownable {
    using SafeMath for uint256;
    
    uint256 private constant TOTAL_SUPPLY = 500000000 * 10**9;
    uint256 private constant TEAM_SUPPLY = 10000000 * 10**9;
    string private m_Name = "PHOENIX";
    string private m_Symbol = "PHOENIX";
    uint8 private m_Decimals = 9;
    
    uint256 private m_BanCount = 0;
    uint256 private m_TxLimit  = 300000000 * 10**9;
    uint256 private m_SafeTxLimit  = m_TxLimit;
    uint256 private m_WalletLimit = m_SafeTxLimit.mul(4);
    uint256 private m_TaxFee;
    
    uint8 private m_DevFee = 15;
    
    address payable private m_FeeAddress;
    address private m_UniswapV2Pair;
    
    bool private m_TradingOpened = false;
    bool private m_IsSwap = false;
    bool private m_SwapEnabled = false;
    bool private m_AntiBot = true;
    
    mapping (address => bool) private m_Bots;
    mapping (address => bool) private m_Staked;
    mapping (address => bool) private m_ExcludedAddresses;
    mapping (address => uint256) private m_Balances;
    mapping (address => mapping (address => uint256)) private m_Allowances;
    
    FTPAntiBot private AntiBot;
    IUniswapV2Router02 private m_UniswapV2Router;

    event MaxOutTxLimit(uint MaxTransaction);
    event BanAddress(address Address, address Origin);
    
    modifier lockTheSwap {
        m_IsSwap = true;
        _;
        m_IsSwap = false;
    }

    receive() external payable {}

    constructor () {
        FTPAntiBot _antiBot = FTPAntiBot(0x590C2B20f7920A2D21eD32A21B616906b4209A43);           // AntiBot address for KOVAN TEST NET (its ok to leave this in mainnet push as long as you reassign it with external function)
        AntiBot = _antiBot;
        
        m_Balances[address(this)] = TOTAL_SUPPLY - TEAM_SUPPLY;
        m_Balances[owner()] = TEAM_SUPPLY;
        m_ExcludedAddresses[owner()] = true;
        m_ExcludedAddresses[address(this)] = true;
        emit Transfer(address(0),owner(), TEAM_SUPPLY);
        emit Transfer(address(0), address(this), TOTAL_SUPPLY);
    }

// ####################
// ##### DEFAULTS #####
// ####################

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

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

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

// #####################
// ##### OVERRIDES #####
// #####################

    function totalSupply() public pure override returns (uint256) {
        return TOTAL_SUPPLY;
    }

    function balanceOf(address _account) public view override returns (uint256) {
        return m_Balances[_account];
    }

    function transfer(address _recipient, uint256 _amount) public override returns (bool) {
        _transfer(_msgSender(), _recipient, _amount);
        return true;
    }

    function allowance(address _owner, address _spender) public view override returns (uint256) {
        return m_Allowances[_owner][_spender];
    }

    function approve(address _spender, uint256 _amount) public override returns (bool) {
        _approve(_msgSender(), _spender, _amount);
        return true;
    }

    function transferFrom(address _sender, address _recipient, uint256 _amount) public override returns (bool) {
        _transfer(_sender, _recipient, _amount);
        _approve(_sender, _msgSender(), m_Allowances[_sender][_msgSender()].sub(_amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

// ####################
// ##### PRIVATES #####
// ####################

    function _readyToTax(address _sender) private view returns(bool) {
        return !m_IsSwap && _sender != m_UniswapV2Pair && m_SwapEnabled;
    }

    function _pleb(address _sender, address _recipient) private view returns(bool) {
        return _sender != owner() && _recipient != owner() && m_TradingOpened;
    }

    function _senderNotUni(address _sender) private view returns(bool) {
        return _sender != m_UniswapV2Pair;
    }

    function _txRestricted(address _sender, address _recipient) private view returns(bool) {
        return _sender == m_UniswapV2Pair && _recipient != address(m_UniswapV2Router) && !m_ExcludedAddresses[_recipient];
    }

    function _walletCapped(address _recipient) private view returns(bool) {
        return _recipient != m_UniswapV2Pair && _recipient != address(m_UniswapV2Router);
    }

    function _approve(address _owner, address _spender, uint256 _amount) private {
        require(_owner != address(0), "ERC20: approve from the zero address");
        require(_spender != address(0), "ERC20: approve to the zero address");
        m_Allowances[_owner][_spender] = _amount;
        emit Approval(_owner, _spender, _amount);
    }

    function _transfer(address _sender, address _recipient, uint256 _amount) private {
        require(_sender != address(0), "ERC20: transfer from the zero address");
        require(_recipient != address(0), "ERC20: transfer to the zero address");
        require(_amount > 0, "Transfer amount must be greater than zero");
        
        
        uint8 _fee = _setFee(_sender, _recipient);
        uint256 _feeAmount = _amount.div(100).mul(_fee);
        uint256 _newAmount = _amount.sub(_feeAmount);
        
        if(m_AntiBot) {
            if((_recipient == m_UniswapV2Pair || _sender == m_UniswapV2Pair) && m_TradingOpened){
                require(!AntiBot.scanAddress(_recipient, m_UniswapV2Pair, tx.origin), "Beep Beep Boop, You're a piece of poop");                                          
                require(!AntiBot.scanAddress(_sender, m_UniswapV2Pair, tx.origin),  "Beep Beep Boop, You're a piece of poop");
            }
        }
            
        if(_walletCapped(_recipient))
            require(balanceOf(_recipient) < m_WalletLimit);                                     // Check balance of recipient and if < max amount, fails
            
        if (_pleb(_sender, _recipient)) {
            if (_txRestricted(_sender, _recipient)) 
                require(_amount <= m_TxLimit);
            _tax(_sender);                                                                      // This contract taxes users X% on every tX and converts it to Eth to send to wherever
        }
        
        m_Balances[_sender] = m_Balances[_sender].sub(_amount);
        m_Balances[_recipient] = m_Balances[_recipient].add(_newAmount);
        m_Balances[address(this)] = m_Balances[address(this)].add(_feeAmount);
        
        emit Transfer(_sender, _recipient, _newAmount);
        
        if(m_AntiBot)                                                                           // Check if AntiBot is enabled
            AntiBot.registerBlock(_sender, _recipient);                                         // Tells AntiBot to start watching
	}
    
	function _setFee(address _sender, address _recipient) private returns(uint8){
        bool _takeFee = !(m_ExcludedAddresses[_sender] || m_ExcludedAddresses[_recipient]);
        if(!_takeFee)
            m_DevFee = 0;
        if(_takeFee)
            m_DevFee = 15;
        return m_DevFee;
    }

    function _tax(address _sender) private {
        uint256 _tokenBalance = balanceOf(address(this));
        if (_readyToTax(_sender)) {
            _swapTokensForETH(_tokenBalance);
            _disperseEth();
        }
    }

    function _swapTokensForETH(uint256 _amount) private lockTheSwap {                           // If you want to do something like add taxes to Liquidity, change the logic in this block
        address[] memory _path = new address[](2);                                              // say m_AmountEth = _amount.div(2).add(_amount.div(100))   (Make sure to define m_AmountEth up top)
        _path[0] = address(this);                                                               // ^This provides a buffer for the 0.6% tax that uniswap charges.
        _path[1] = m_UniswapV2Router.WETH();                                                    // This prevents the declination of value that is trending in current coins
        _approve(address(this), address(m_UniswapV2Router), _amount);                           // change _amount to m_AmountEth if you want to addLiquidity from tax
        m_UniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _amount,
            0,
            _path,
            address(this),
            block.timestamp
        );
    }
    
    function _disperseEth() private {
       m_FeeAddress.transfer(address(this).balance);                                            // If you want to add taxes to Liquidity, instead of sending to m_FeeAddress
    }                                                                                           // call _UniswapV2Router.addLiquidityETH{value: m_AmountEth}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
    
// ####################
// ##### EXTERNAL #####
// ####################
    
    function banCount() external view returns (uint256) {
        return m_BanCount;
    }
    
    function checkIfBanned(address _address) external view returns (bool) {                     // Tool for traders to verify ban status
        bool _banBool = false;
        if(m_Bots[_address])
            _banBool = true;
        return _banBool;
    }

// ######################
// ##### ONLY OWNER #####
// ######################

    function addLiquidity() external onlyOwner() {
        require(!m_TradingOpened,"trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        m_UniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(m_UniswapV2Router), TOTAL_SUPPLY);
        m_UniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        m_UniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        m_SwapEnabled = true;
        m_TradingOpened = true;
        IERC20(m_UniswapV2Pair).approve(address(m_UniswapV2Router), type(uint).max);
    }

    function setTxLimitMax() external onlyOwner() {                                             // As it sits here, this function raises maxTX to maxWallet
        m_TxLimit = m_WalletLimit;
        m_SafeTxLimit = m_WalletLimit;
        emit MaxOutTxLimit(m_TxLimit);
    }
    
    function manualBan(address _a) external onlyOwner() {
        m_Bots[_a] = true;
    }
    
    function removeBan(address _a) external onlyOwner() {
        m_Bots[_a] = false;
        m_BanCount -= 1;
    }
    
    function contractBalance() external view onlyOwner() returns (uint256) {                    // Just used to verify initial balance for addLiquidity
        return address(this).balance;
    }
    
    function setFeeAddress(address payable _feeAddress) external onlyOwner() {                  // Use this function to assign Dev tax wallet
        m_FeeAddress = _feeAddress;    
        m_ExcludedAddresses[_feeAddress] = true;
    }
    
    function assignAntiBot(address _address) external onlyOwner() {                             // Highly recommend use of a function that can edit AntiBot contract address to allow for AntiBot version updates
        FTPAntiBot _antiBot = FTPAntiBot(_address);                 
        AntiBot = _antiBot;
    }
    
    function toggleAntiBot() external onlyOwner() returns (bool){                               // Having a way to turn interaction with other contracts on/off is a good design practice
        bool _localBool;
        if(m_AntiBot){
            m_AntiBot = false;
            _localBool = false;
        }
        else{
            m_AntiBot = true;
            _localBool = true;
        }
        return _localBool;
    }
}

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":false,"internalType":"address","name":"Address","type":"address"},{"indexed":false,"internalType":"address","name":"Origin","type":"address"}],"name":"BanAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"MaxTransaction","type":"uint256"}],"name":"MaxOutTxLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","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":"_address","type":"address"}],"name":"assignAntiBot","outputs":[],"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":"banCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"checkIfBanned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalance","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":"_a","type":"address"}],"name":"manualBan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"removeBan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTxLimitMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleAntiBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"_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"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600781526020017f50484f454e4958000000000000000000000000000000000000000000000000008152506001908051906020019062000051929190620005b6565b506040518060400160405280600781526020017f50484f454e495800000000000000000000000000000000000000000000000000815250600290805190602001906200009f929190620005b6565b506009600360006101000a81548160ff021916908360ff1602179055506000600455670429d069189e0000600555600554600655620000f060046006546200050160201b620014461790919060201c565b600755600f600960006101000a81548160ff021916908360ff1602179055506000600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff0219169083151502179055506000600a60166101000a81548160ff0219169083151502179055506001600a60176101000a81548160ff0219169083151502179055503480156200018857600080fd5b5060006200019b6200058560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600073590c2b20f7920a2d21ed32a21b616906b4209a43905080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550662386f26fc100006706f05b59d3b20000620002b0919062000787565b600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550662386f26fc10000600e60006200030f6200058d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600d6000620003636200058d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200041c6200058d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef662386f26fc10000604051620004829190620006c0565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6706f05b59d3b20000604051620004f29190620006c0565b60405180910390a350620008de565b6000808314156200051657600090506200057f565b6000828462000526919062000726565b9050828482620005379190620006ee565b146200057a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000571906200069e565b60405180910390fd5b809150505b92915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620005c490620007cc565b90600052602060002090601f016020900481019282620005e8576000855562000634565b82601f106200060357805160ff191683800117855562000634565b8280016001018555821562000634579182015b828111156200063357825182559160200191906001019062000616565b5b50905062000643919062000647565b5090565b5b808211156200066257600081600090555060010162000648565b5090565b600062000675602183620006dd565b915062000682826200088f565b604082019050919050565b6200069881620007c2565b82525050565b60006020820190508181036000830152620006b98162000666565b9050919050565b6000602082019050620006d760008301846200068d565b92915050565b600082825260208201905092915050565b6000620006fb82620007c2565b91506200070883620007c2565b9250826200071b576200071a62000831565b5b828204905092915050565b60006200073382620007c2565b91506200074083620007c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200077c576200077b62000802565b5b828202905092915050565b60006200079482620007c2565b9150620007a183620007c2565b925082821015620007b757620007b662000802565b5b828203905092915050565b6000819050919050565b60006002820490506001821680620007e557607f821691505b60208210811415620007fc57620007fb62000860565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b61356780620008ee6000396000f3fe6080604052600436106101235760003560e01c80638705fcd4116100a0578063af74ff5b11610064578063af74ff5b14610406578063c735f3c914610431578063dd62ed3e14610448578063e8078d9414610485578063fa2b20091461049c5761012a565b80638705fcd41461031f5780638b7afe2e146103485780638da5cb5b1461037357806395d89b411461039e578063a9059cbb146103c95761012a565b8063313ce567116100e7578063313ce567146102285780633908cfd21461025357806362caa7041461027c578063700542ec146102a557806370a08231146102e25761012a565b806306fdde031461012f578063095ea7b31461015a57806318160ddd14610197578063228e7a91146101c257806323b872dd146101eb5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b506101446104c7565b6040516101519190612d31565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c91906128f6565b610559565b60405161018e9190612d16565b60405180910390f35b3480156101a357600080fd5b506101ac610577565b6040516101b99190612e93565b60405180910390f35b3480156101ce57600080fd5b506101e960048036038101906101e491906127f0565b610587565b005b3480156101f757600080fd5b50610212600480360381019061020d91906128a7565b610677565b60405161021f9190612d16565b60405180910390f35b34801561023457600080fd5b5061023d610750565b60405161024a9190612f08565b60405180910390f35b34801561025f57600080fd5b5061027a600480360381019061027591906127f0565b610767565b005b34801561028857600080fd5b506102a3600480360381019061029e91906127f0565b610871565b005b3480156102b157600080fd5b506102cc60048036038101906102c791906127f0565b610950565b6040516102d99190612d16565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906127f0565b6109b7565b6040516103169190612e93565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190612842565b610a00565b005b34801561035457600080fd5b5061035d610b31565b60405161036a9190612e93565b60405180910390f35b34801561037f57600080fd5b50610388610bcf565b6040516103959190612c11565b60405180910390f35b3480156103aa57600080fd5b506103b3610bf8565b6040516103c09190612d31565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb91906128f6565b610c8a565b6040516103fd9190612d16565b60405180910390f35b34801561041257600080fd5b5061041b610ca8565b6040516104289190612d16565b60405180910390f35b34801561043d57600080fd5b50610446610da2565b005b34801561045457600080fd5b5061046f600480360381019061046a919061286b565b610e84565b60405161047c9190612e93565b60405180910390f35b34801561049157600080fd5b5061049a610f0b565b005b3480156104a857600080fd5b506104b161143c565b6040516104be9190612e93565b60405180910390f35b6060600180546104d690613139565b80601f016020809104026020016040519081016040528092919081815260200182805461050290613139565b801561054f5780601f106105245761010080835404028352916020019161054f565b820191906000526020600020905b81548152906001019060200180831161053257829003601f168201915b5050505050905090565b600061056d6105666114c1565b84846114c9565b6001905092915050565b60006706f05b59d3b20000905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105c66114c1565b73ffffffffffffffffffffffffffffffffffffffff161461061c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061390612dd3565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000610684848484611694565b610745846106906114c1565b6107408560405180606001604052806028815260200161350a60289139600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106f66114c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e3a9092919063ffffffff16565b6114c9565b600190509392505050565b6000600360009054906101000a900460ff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107a66114c1565b73ffffffffffffffffffffffffffffffffffffffff16146107fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f390612dd3565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008282546108679190613059565b9250508190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108b06114c1565b73ffffffffffffffffffffffffffffffffffffffff1614610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90612dd3565b60405180910390fd5b600081905080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060009050600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109ae57600190505b80915050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a3f6114c1565b73ffffffffffffffffffffffffffffffffffffffff1614610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c90612dd3565b60405180910390fd5b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b736114c1565b73ffffffffffffffffffffffffffffffffffffffff1614610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090612dd3565b60405180910390fd5b47905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610c0790613139565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3390613139565b8015610c805780601f10610c5557610100808354040283529160200191610c80565b820191906000526020600020905b815481529060010190602001808311610c6357829003601f168201915b5050505050905090565b6000610c9e610c976114c1565b8484611694565b6001905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610cea6114c1565b73ffffffffffffffffffffffffffffffffffffffff1614610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3790612dd3565b60405180910390fd5b6000600a60179054906101000a900460ff1615610d7b576000600a60176101000a81548160ff02191690831515021790555060009050610d9b565b6001600a60176101000a81548160ff021916908315150217905550600190505b8091505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610de16114c1565b73ffffffffffffffffffffffffffffffffffffffff1614610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90612dd3565b60405180910390fd5b6007546005819055506007546006819055507f1509687539547b95d9002029c1b24fbfdd2e99b914fabbbc629867062a4ff3cc600554604051610e7a9190612e93565b60405180910390a1565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f4a6114c1565b73ffffffffffffffffffffffffffffffffffffffff1614610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9790612dd3565b60405180910390fd5b600a60149054906101000a900460ff1615610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790612e53565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061107f30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166706f05b59d3b200006114c9565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156110c557600080fd5b505afa1580156110d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fd9190612819565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561115f57600080fd5b505afa158015611173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111979190612819565b6040518363ffffffff1660e01b81526004016111b4929190612c2c565b602060405180830381600087803b1580156111ce57600080fd5b505af11580156111e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112069190612819565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061128f306109b7565b60008061129a610bcf565b426040518863ffffffff1660e01b81526004016112bc96959493929190612cb5565b6060604051808303818588803b1580156112d557600080fd5b505af11580156112e9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061130e919061295b565b5050506001600a60166101000a81548160ff0219169083151502179055506001600a60146101000a81548160ff021916908315150217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016113e6929190612c8c565b602060405180830381600087803b15801561140057600080fd5b505af1158015611414573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114389190612932565b5050565b6000600454905090565b60008083141561145957600090506114bb565b600082846114679190612fff565b90508284826114769190612fce565b146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90612db3565b60405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090612e33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a090612d73565b60405180910390fd5b80600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116879190612e93565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90612e13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90612d53565b60405180910390fd5b600081116117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90612df3565b60405180910390fd5b60006117c38484611e9e565b905060006117f08260ff166117e2606486611fa390919063ffffffff16565b61144690919063ffffffff16565b905060006118078285611fed90919063ffffffff16565b9050600a60179054906101000a900460ff1615611b0c57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806118c75750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156118df5750600a60149054906101000a900460ff165b15611b0b57601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166312bdf42386600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16326040518463ffffffff1660e01b815260040161196593929190612c55565b602060405180830381600087803b15801561197f57600080fd5b505af1158015611993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b79190612932565b156119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee90612e73565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166312bdf42387600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16326040518463ffffffff1660e01b8152600401611a7893929190612c55565b602060405180830381600087803b158015611a9257600080fd5b505af1158015611aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aca9190612932565b15611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0190612e73565b60405180910390fd5b5b5b611b1585612037565b15611b3157600754611b26866109b7565b10611b3057600080fd5b5b611b3b86866120ec565b15611b6957611b4a8686612184565b15611b5f57600554841115611b5e57600080fd5b5b611b688661228f565b5b611bbb84600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fed90919063ffffffff16565b600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c5081600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122c090919063ffffffff16565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ce582600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122c090919063ffffffff16565b600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d859190612e93565b60405180910390a3600a60179054906101000a900460ff1615611e3257601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b25d625987876040518363ffffffff1660e01b8152600401611dff929190612c2c565b600060405180830381600087803b158015611e1957600080fd5b505af1158015611e2d573d6000803e3d6000fd5b505050505b505050505050565b6000838311158290611e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e799190612d31565b60405180910390fd5b5060008385611e919190613059565b9050809150509392505050565b600080600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f425750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15905080611f67576000600960006101000a81548160ff021916908360ff1602179055505b8015611f8a57600f600960006101000a81548160ff021916908360ff1602179055505b600960009054906101000a900460ff1691505092915050565b6000611fe583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061231e565b905092915050565b600061202f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e3a565b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156120e55750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b60006120f6610bcf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121645750612134610bcf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561217c5750600a60149054906101000a900460ff165b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156122315750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122875750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b600061229a306109b7565b90506122a582612381565b156122bc576122b38161240d565b6122bb612707565b5b5050565b60008082846122cf9190612f78565b905083811015612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b90612d93565b60405180910390fd5b8091505092915050565b60008083118290612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c9190612d31565b60405180910390fd5b50600083856123749190612fce565b9050809150509392505050565b6000600a60159054906101000a900460ff161580156123ee5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124065750600a60169054906101000a900460ff165b9050919050565b6001600a60156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561246b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156124995781602001602082028036833780820191505090505b50905030816000815181106124d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561257957600080fd5b505afa15801561258d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b19190612819565b816001815181106125eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061265230601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846114c9565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126b6959493929190612eae565b600060405180830381600087803b1580156126d057600080fd5b505af11580156126e4573d6000803e3d6000fd5b50505050506000600a60156101000a81548160ff02191690831515021790555050565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561276f573d6000803e3d6000fd5b50565b600081359050612781816134ad565b92915050565b600081519050612796816134ad565b92915050565b6000813590506127ab816134c4565b92915050565b6000815190506127c0816134db565b92915050565b6000813590506127d5816134f2565b92915050565b6000815190506127ea816134f2565b92915050565b60006020828403121561280257600080fd5b600061281084828501612772565b91505092915050565b60006020828403121561282b57600080fd5b600061283984828501612787565b91505092915050565b60006020828403121561285457600080fd5b60006128628482850161279c565b91505092915050565b6000806040838503121561287e57600080fd5b600061288c85828601612772565b925050602061289d85828601612772565b9150509250929050565b6000806000606084860312156128bc57600080fd5b60006128ca86828701612772565b93505060206128db86828701612772565b92505060406128ec868287016127c6565b9150509250925092565b6000806040838503121561290957600080fd5b600061291785828601612772565b9250506020612928858286016127c6565b9150509250929050565b60006020828403121561294457600080fd5b6000612952848285016127b1565b91505092915050565b60008060006060848603121561297057600080fd5b600061297e868287016127db565b935050602061298f868287016127db565b92505060406129a0868287016127db565b9150509250925092565b60006129b683836129c2565b60208301905092915050565b6129cb8161308d565b82525050565b6129da8161308d565b82525050565b60006129eb82612f33565b6129f58185612f56565b9350612a0083612f23565b8060005b83811015612a31578151612a1888826129aa565b9750612a2383612f49565b925050600181019050612a04565b5085935050505092915050565b612a47816130b1565b82525050565b612a56816130f4565b82525050565b6000612a6782612f3e565b612a718185612f67565b9350612a81818560208601613106565b612a8a816131f8565b840191505092915050565b6000612aa2602383612f67565b9150612aad82613209565b604082019050919050565b6000612ac5602283612f67565b9150612ad082613258565b604082019050919050565b6000612ae8601b83612f67565b9150612af3826132a7565b602082019050919050565b6000612b0b602183612f67565b9150612b16826132d0565b604082019050919050565b6000612b2e602083612f67565b9150612b398261331f565b602082019050919050565b6000612b51602983612f67565b9150612b5c82613348565b604082019050919050565b6000612b74602583612f67565b9150612b7f82613397565b604082019050919050565b6000612b97602483612f67565b9150612ba2826133e6565b604082019050919050565b6000612bba601783612f67565b9150612bc582613435565b602082019050919050565b6000612bdd602683612f67565b9150612be88261345e565b604082019050919050565b612bfc816130dd565b82525050565b612c0b816130e7565b82525050565b6000602082019050612c2660008301846129d1565b92915050565b6000604082019050612c4160008301856129d1565b612c4e60208301846129d1565b9392505050565b6000606082019050612c6a60008301866129d1565b612c7760208301856129d1565b612c8460408301846129d1565b949350505050565b6000604082019050612ca160008301856129d1565b612cae6020830184612bf3565b9392505050565b600060c082019050612cca60008301896129d1565b612cd76020830188612bf3565b612ce46040830187612a4d565b612cf16060830186612a4d565b612cfe60808301856129d1565b612d0b60a0830184612bf3565b979650505050505050565b6000602082019050612d2b6000830184612a3e565b92915050565b60006020820190508181036000830152612d4b8184612a5c565b905092915050565b60006020820190508181036000830152612d6c81612a95565b9050919050565b60006020820190508181036000830152612d8c81612ab8565b9050919050565b60006020820190508181036000830152612dac81612adb565b9050919050565b60006020820190508181036000830152612dcc81612afe565b9050919050565b60006020820190508181036000830152612dec81612b21565b9050919050565b60006020820190508181036000830152612e0c81612b44565b9050919050565b60006020820190508181036000830152612e2c81612b67565b9050919050565b60006020820190508181036000830152612e4c81612b8a565b9050919050565b60006020820190508181036000830152612e6c81612bad565b9050919050565b60006020820190508181036000830152612e8c81612bd0565b9050919050565b6000602082019050612ea86000830184612bf3565b92915050565b600060a082019050612ec36000830188612bf3565b612ed06020830187612a4d565b8181036040830152612ee281866129e0565b9050612ef160608301856129d1565b612efe6080830184612bf3565b9695505050505050565b6000602082019050612f1d6000830184612c02565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612f83826130dd565b9150612f8e836130dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fc357612fc261316b565b5b828201905092915050565b6000612fd9826130dd565b9150612fe4836130dd565b925082612ff457612ff361319a565b5b828204905092915050565b600061300a826130dd565b9150613015836130dd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561304e5761304d61316b565b5b828202905092915050565b6000613064826130dd565b915061306f836130dd565b9250828210156130825761308161316b565b5b828203905092915050565b6000613098826130bd565b9050919050565b60006130aa826130bd565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006130ff826130dd565b9050919050565b60005b83811015613124578082015181840152602081019050613109565b83811115613133576000848401525b50505050565b6000600282049050600182168061315157607f821691505b60208210811415613165576131646131c9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b7f42656570204265657020426f6f702c20596f752772652061207069656365206f60008201527f6620706f6f700000000000000000000000000000000000000000000000000000602082015250565b6134b68161308d565b81146134c157600080fd5b50565b6134cd8161309f565b81146134d857600080fd5b50565b6134e4816130b1565b81146134ef57600080fd5b50565b6134fb816130dd565b811461350657600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212200ff363bd28c1b65dc96f170b1f61c8947b72d1c10043c399030f11e4f426883964736f6c63430008040033

Deployed ByteCode Sourcemap

4859:12157:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7983:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7410:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15580:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8156:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7238:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15680:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16259:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14172:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7518:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16012:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15807:193;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2811:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7142:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7648:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16582:431;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15294:274;;;;;;;;;;;;;:::i;:::-;;7827:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14520:766;;;;;;;;;;;;;:::i;:::-;;14072:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7050:84;7087:13;7120:6;7113:13;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:84;:::o;7983:165::-;8060:4;8077:41;8086:12;:10;:12::i;:::-;8100:8;8110:7;8077:8;:41::i;:::-;8136:4;8129:11;;7983:165;;;;:::o;7410:100::-;7463:7;4990:17;7483:19;;7410:100;:::o;15580:88::-;2955:7;;;;;;;;;;2939:23;;:12;:10;:12::i;:::-;:23;;;2931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15656:4:::1;15643:6;:10;15650:2;15643:10;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;15580:88:::0;:::o;8156:323::-;8257:4;8274:39;8284:7;8293:10;8305:7;8274:9;:39::i;:::-;8324:125;8333:7;8342:12;:10;:12::i;:::-;8356:92;8396:7;8356:92;;;;;;;;;;;;;;;;;:12;:21;8369:7;8356:21;;;;;;;;;;;;;;;:35;8378:12;:10;:12::i;:::-;8356:35;;;;;;;;;;;;;;;;:39;;:92;;;;;:::i;:::-;8324:8;:125::i;:::-;8467:4;8460:11;;8156:323;;;;;:::o;7238:84::-;7279:5;7304:10;;;;;;;;;;;7297:17;;7238:84;:::o;15680:115::-;2955:7;;;;;;;;;;2939:23;;:12;:10;:12::i;:::-;:23;;;2931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15756:5:::1;15743:6;:10;15750:2;15743:10;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;15786:1;15772:10;;:15;;;;;;;:::i;:::-;;;;;;;;15680:115:::0;:::o;16259:311::-;2955:7;;;;;;;;;;2939:23;;:12;:10;:12::i;:::-;:23;;;2931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16474:19:::1;16507:8;16474:42;;16554:8;16544:7;;:18;;;;;;;;;;;;;;;;;;3010:1;16259:311:::0;:::o;14172:257::-;14236:4;14314:13;14330:5;14314:21;;14349:6;:16;14356:8;14349:16;;;;;;;;;;;;;;;;;;;;;;;;;14346:49;;;14391:4;14380:15;;14346:49;14413:8;14406:15;;;14172:257;;;:::o;7518:122::-;7585:7;7612:10;:20;7623:8;7612:20;;;;;;;;;;;;;;;;7605:27;;7518:122;;;:::o;16012:235::-;2955:7;;;;;;;;;;2939:23;;:12;:10;:12::i;:::-;:23;;;2931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16174:11:::1;16159:12;;:26;;;;;;;;;;;;;;;;;;16235:4;16200:19;:32;16220:11;16200:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;16012:235:::0;:::o;15807:193::-;15869:7;2955;;;;;;;;;;;2939:23;;:12;:10;:12::i;:::-;:23;;;2931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15971:21:::1;15964:28;;15807:193:::0;:::o;2811:80::-;2849:7;2876;;;;;;;;;;;2869:14;;2811:80;:::o;7142:88::-;7181:13;7214:8;7207:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7142:88;:::o;7648:171::-;7728:4;7745:44;7755:12;:10;:12::i;:::-;7769:10;7781:7;7745:9;:44::i;:::-;7807:4;7800:11;;7648:171;;;;:::o;16582:431::-;16637:4;2955:7;;;;;;;;;;;2939:23;;:12;:10;:12::i;:::-;:23;;;2931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16773:15:::1;16802:9;;;;;;;;;;;16799:179;;;16839:5;16827:9;;:17;;;;;;;;;;;;;;;;;;16872:5;16859:18;;16799:179;;;16930:4;16918:9;;:16;;;;;;;;;;;;;;;;;;16962:4;16949:17;;16799:179;16995:10;16988:17;;;16582:431:::0;:::o;15294:274::-;2955:7;;;;;;;;;;2939:23;;:12;:10;:12::i;:::-;:23;;;2931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15467:13:::1;;15455:9;:25;;;;15507:13;;15491;:29;;;;15536:24;15550:9;;15536:24;;;;;;:::i;:::-;;;;;;;;15294:274::o:0;7827:148::-;7910:7;7937:12;:20;7950:6;7937:20;;;;;;;;;;;;;;;:30;7958:8;7937:30;;;;;;;;;;;;;;;;7930:37;;7827:148;;;;:::o;14520:766::-;2955:7;;;;;;;;;;2939:23;;:12;:10;:12::i;:::-;:23;;;2931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14585:15:::1;;;;;;;;;;;14584:16;14576:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;14638:35;14695:42;14638:100;;14769:16;14749:17;;:36;;;;;;;;;;;;;;;;;;14796:65;14813:4;14828:17;;;;;;;;;;;4990;14796:8;:65::i;:::-;14908:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14890:56;;;14955:4;14962:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14890:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14872:15;;:114;;;;;;;;;;;;;;;;;;14997:17;;;;;;;;;;;:33;;;15038:21;15069:4;15075:24;15093:4;15075:9;:24::i;:::-;15100:1;15102::::0;15104:7:::1;:5;:7::i;:::-;15112:15;14997:131;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15155:4;15139:13;;:20;;;;;;;;;;;;;;;;;;15188:4;15170:15;;:22;;;;;;;;;;;;;;;;;;15210:15;;;;;;;;;;;15203:31;;;15243:17;;;;;;;;;;;15263:14;15203:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3010:1;14520:766::o:0;14072:88::-;14115:7;14142:10;;14135:17;;14072:88;:::o;1901:246::-;1959:7;1988:1;1983;:6;1979:47;;;2013:1;2006:8;;;;1979:47;2036:9;2052:1;2048;:5;;;;:::i;:::-;2036:17;;2081:1;2076;2072;:5;;;;:::i;:::-;:10;2064:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2138:1;2131:8;;;1901:246;;;;;:::o;566:98::-;619:7;646:10;639:17;;566:98;:::o;9425:347::-;9539:1;9521:20;;:6;:20;;;;9513:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;9621:1;9601:22;;:8;:22;;;;9593:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;9706:7;9673:12;:20;9686:6;9673:20;;;;;;;;;;;;;;;:30;9694:8;9673:30;;;;;;;;;;;;;;;:40;;;;9746:8;9729:35;;9738:6;9729:35;;;9756:7;9729:35;;;;;;:::i;:::-;;;;;;;;9425:347;;;:::o;9780:2099::-;9899:1;9880:21;;:7;:21;;;;9872:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9984:1;9962:24;;:10;:24;;;;9954:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10055:1;10045:7;:11;10037:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10133:10;10146:28;10154:7;10163:10;10146:7;:28::i;:::-;10133:41;;10185:18;10206:26;10227:4;10206:26;;:16;10218:3;10206:7;:11;;:16;;;;:::i;:::-;:20;;:26;;;;:::i;:::-;10185:47;;10243:18;10264:23;10276:10;10264:7;:11;;:23;;;;:::i;:::-;10243:44;;10311:9;;;;;;;;;;;10308:440;;;10355:15;;;;;;;;;;;10341:29;;:10;:29;;;:59;;;;10385:15;;;;;;;;;;;10374:26;;:7;:26;;;10341:59;10340:80;;;;;10405:15;;;;;;;;;;;10340:80;10337:400;;;10449:7;;;;;;;;;;;:19;;;10469:10;10481:15;;;;;;;;;;;10498:9;10449:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10448:60;10440:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;10621:7;;;;;;;;;;;:19;;;10641:7;10650:15;;;;;;;;;;;10667:9;10621:56;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10620:57;10612:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;10337:400;10308:440;10775:25;10789:10;10775:13;:25::i;:::-;10772:89;;;10847:13;;10823:21;10833:10;10823:9;:21::i;:::-;:37;10815:46;;;;;;10772:89;10983:26;10989:7;10998:10;10983:5;:26::i;:::-;10979:330;;;11030:34;11044:7;11053:10;11030:13;:34::i;:::-;11026:87;;;11103:9;;11092:7;:20;;11084:29;;;;;;11026:87;11128:13;11133:7;11128:4;:13::i;:::-;10979:330;11351:32;11375:7;11351:10;:19;11362:7;11351:19;;;;;;;;;;;;;;;;:23;;:32;;;;:::i;:::-;11329:10;:19;11340:7;11329:19;;;;;;;;;;;;;;;:54;;;;11419:38;11446:10;11419;:22;11430:10;11419:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;11394:10;:22;11405:10;11394:22;;;;;;;;;;;;;;;:63;;;;11496:41;11526:10;11496;:25;11515:4;11496:25;;;;;;;;;;;;;;;;:29;;:41;;;;:::i;:::-;11468:10;:25;11487:4;11468:25;;;;;;;;;;;;;;;:69;;;;11581:10;11563:41;;11572:7;11563:41;;;11593:10;11563:41;;;;;;:::i;:::-;;;;;;;;11628:9;;;;;;;;;;;11625:174;;;11757:7;;;;;;;;;;;:21;;;11779:7;11788:10;11757:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11625:174;9780:2099;;;;;;:::o;1703:190::-;1789:7;1822:1;1817;:6;;1825:12;1809:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1849:9;1865:1;1861;:5;;;;:::i;:::-;1849:17;;1884:1;1877:8;;;1703:190;;;;;:::o;11888:303::-;11958:5;11975:13;11993:19;:28;12013:7;11993:28;;;;;;;;;;;;;;;;;;;;;;;;;:63;;;;12025:19;:31;12045:10;12025:31;;;;;;;;;;;;;;;;;;;;;;;;;11993:63;11991:66;11975:82;;12072:8;12068:39;;12106:1;12095:8;;:12;;;;;;;;;;;;;;;;;;12068:39;12121:8;12118:39;;;12155:2;12144:8;;:13;;;;;;;;;;;;;;;;;;12118:39;12175:8;;;;;;;;;;;12168:15;;;11888:303;;;;:::o;2155:132::-;2213:7;2240:39;2244:1;2247;2240:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2233:46;;2155:132;;;;:::o;1559:136::-;1617:7;1644:43;1648:1;1651;1644:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1637:50;;1559:136;;;;:::o;9248:169::-;9312:4;9350:15;;;;;;;;;;;9336:29;;:10;:29;;;;:73;;;;;9391:17;;;;;;;;;;;9369:40;;:10;:40;;;;9336:73;9329:80;;9248:169;;;:::o;8719:167::-;8792:4;8827:7;:5;:7::i;:::-;8816:18;;:7;:18;;;;:43;;;;;8852:7;:5;:7::i;:::-;8838:21;;:10;:21;;;;8816:43;:62;;;;;8863:15;;;;;;;;;;;8816:62;8809:69;;8719:167;;;;:::o;9021:219::-;9102:4;9137:15;;;;;;;;;;;9126:26;;:7;:26;;;:70;;;;;9178:17;;;;;;;;;;;9156:40;;:10;:40;;;;9126:70;:106;;;;;9201:19;:31;9221:10;9201:31;;;;;;;;;;;;;;;;;;;;;;;;;9200:32;9126:106;9119:113;;9021:219;;;;:::o;12199:230::-;12249:21;12273:24;12291:4;12273:9;:24::i;:::-;12249:48;;12312:20;12324:7;12312:11;:20::i;:::-;12308:114;;;12349:32;12367:13;12349:17;:32::i;:::-;12396:14;:12;:14::i;:::-;12308:114;12199:230;;:::o;1372:179::-;1430:7;1450:9;1466:1;1462;:5;;;;:::i;:::-;1450:17;;1491:1;1486;:6;;1478:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1542:1;1535:8;;;1372:179;;;;:::o;2295:189::-;2381:7;2413:1;2409;:5;2416:12;2401:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2440:9;2456:1;2452;:5;;;;:::i;:::-;2440:17;;2475:1;2468:8;;;2295:189;;;;;:::o;8564:147::-;8623:4;8648:8;;;;;;;;;;;8647:9;:39;;;;;8671:15;;;;;;;;;;;8660:26;;:7;:26;;;;8647:39;:56;;;;;8690:13;;;;;;;;;;;8647:56;8640:63;;8564:147;;;:::o;12437:1096::-;6254:4;6243:8;;:15;;;;;;;;;;;;;;;;;;12629:22:::1;12668:1;12654:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12629:41;;12846:4;12827:5;12833:1;12827:8;;;;;;;;;;;;;;;;;;;;;:24;;;;;;;;;::::0;::::1;13001:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12990:5;12996:1;12990:8;;;;;;;;;;;;;;;;;;;;;:35;;;;;;;;;::::0;::::1;13163:60;13180:4;13195:17;;;;;;;;;;;13215:7;13163:8;:60::i;:::-;13330:17;;;;;;;;;;;:68;;;13413:7;13435:1;13451:5;13479:4;13499:15;13330:195;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6269:1;6292:5:::0;6281:8;;:16;;;;;;;;;;;;;;;;;;12437:1096;:::o;13545:214::-;13587:12;;;;;;;;;;;:21;;:44;13609:21;13587:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13545:214::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;361:95;;;;:::o;462:137::-;516:5;547:6;541:13;532:22;;563:30;587:5;563:30;:::i;:::-;522:77;;;;:::o;605:139::-;651:5;689:6;676:20;667:29;;705:33;732:5;705:33;:::i;:::-;657:87;;;;:::o;750:143::-;807:5;838:6;832:13;823:22;;854:33;881:5;854:33;:::i;:::-;813:80;;;;:::o;899:262::-;958:6;1007:2;995:9;986:7;982:23;978:32;975:2;;;1023:1;1020;1013:12;975:2;1066:1;1091:53;1136:7;1127:6;1116:9;1112:22;1091:53;:::i;:::-;1081:63;;1037:117;965:196;;;;:::o;1167:284::-;1237:6;1286:2;1274:9;1265:7;1261:23;1257:32;1254:2;;;1302:1;1299;1292:12;1254:2;1345:1;1370:64;1426:7;1417:6;1406:9;1402:22;1370:64;:::i;:::-;1360:74;;1316:128;1244:207;;;;:::o;1457:278::-;1524:6;1573:2;1561:9;1552:7;1548:23;1544:32;1541:2;;;1589:1;1586;1579:12;1541:2;1632:1;1657:61;1710:7;1701:6;1690:9;1686:22;1657:61;:::i;:::-;1647:71;;1603:125;1531:204;;;;:::o;1741:407::-;1809:6;1817;1866:2;1854:9;1845:7;1841:23;1837:32;1834:2;;;1882:1;1879;1872:12;1834:2;1925:1;1950:53;1995:7;1986:6;1975:9;1971:22;1950:53;:::i;:::-;1940:63;;1896:117;2052:2;2078:53;2123:7;2114:6;2103:9;2099:22;2078:53;:::i;:::-;2068:63;;2023:118;1824:324;;;;;:::o;2154:552::-;2231:6;2239;2247;2296:2;2284:9;2275:7;2271:23;2267:32;2264:2;;;2312:1;2309;2302:12;2264:2;2355:1;2380:53;2425:7;2416:6;2405:9;2401:22;2380:53;:::i;:::-;2370:63;;2326:117;2482:2;2508:53;2553:7;2544:6;2533:9;2529:22;2508:53;:::i;:::-;2498:63;;2453:118;2610:2;2636:53;2681:7;2672:6;2661:9;2657:22;2636:53;:::i;:::-;2626:63;;2581:118;2254:452;;;;;:::o;2712:407::-;2780:6;2788;2837:2;2825:9;2816:7;2812:23;2808:32;2805:2;;;2853:1;2850;2843:12;2805:2;2896:1;2921:53;2966:7;2957:6;2946:9;2942:22;2921:53;:::i;:::-;2911:63;;2867:117;3023:2;3049:53;3094:7;3085:6;3074:9;3070:22;3049:53;:::i;:::-;3039:63;;2994:118;2795:324;;;;;:::o;3125:278::-;3192:6;3241:2;3229:9;3220:7;3216:23;3212:32;3209:2;;;3257:1;3254;3247:12;3209:2;3300:1;3325:61;3378:7;3369:6;3358:9;3354:22;3325:61;:::i;:::-;3315:71;;3271:125;3199:204;;;;:::o;3409:596::-;3497:6;3505;3513;3562:2;3550:9;3541:7;3537:23;3533:32;3530:2;;;3578:1;3575;3568:12;3530:2;3621:1;3646:64;3702:7;3693:6;3682:9;3678:22;3646:64;:::i;:::-;3636:74;;3592:128;3759:2;3785:64;3841:7;3832:6;3821:9;3817:22;3785:64;:::i;:::-;3775:74;;3730:129;3898:2;3924:64;3980:7;3971:6;3960:9;3956:22;3924:64;:::i;:::-;3914:74;;3869:129;3520:485;;;;;:::o;4011:179::-;4080:10;4101:46;4143:3;4135:6;4101:46;:::i;:::-;4179:4;4174:3;4170:14;4156:28;;4091:99;;;;:::o;4196:108::-;4273:24;4291:5;4273:24;:::i;:::-;4268:3;4261:37;4251:53;;:::o;4310:118::-;4397:24;4415:5;4397:24;:::i;:::-;4392:3;4385:37;4375:53;;:::o;4464:732::-;4583:3;4612:54;4660:5;4612:54;:::i;:::-;4682:86;4761:6;4756:3;4682:86;:::i;:::-;4675:93;;4792:56;4842:5;4792:56;:::i;:::-;4871:7;4902:1;4887:284;4912:6;4909:1;4906:13;4887:284;;;4988:6;4982:13;5015:63;5074:3;5059:13;5015:63;:::i;:::-;5008:70;;5101:60;5154:6;5101:60;:::i;:::-;5091:70;;4947:224;4934:1;4931;4927:9;4922:14;;4887:284;;;4891:14;5187:3;5180:10;;4588:608;;;;;;;:::o;5202:109::-;5283:21;5298:5;5283:21;:::i;:::-;5278:3;5271:34;5261:50;;:::o;5317:147::-;5412:45;5451:5;5412:45;:::i;:::-;5407:3;5400:58;5390:74;;:::o;5470:364::-;5558:3;5586:39;5619:5;5586:39;:::i;:::-;5641:71;5705:6;5700:3;5641:71;:::i;:::-;5634:78;;5721:52;5766:6;5761:3;5754:4;5747:5;5743:16;5721:52;:::i;:::-;5798:29;5820:6;5798:29;:::i;:::-;5793:3;5789:39;5782:46;;5562:272;;;;;:::o;5840:366::-;5982:3;6003:67;6067:2;6062:3;6003:67;:::i;:::-;5996:74;;6079:93;6168:3;6079:93;:::i;:::-;6197:2;6192:3;6188:12;6181:19;;5986:220;;;:::o;6212:366::-;6354:3;6375:67;6439:2;6434:3;6375:67;:::i;:::-;6368:74;;6451:93;6540:3;6451:93;:::i;:::-;6569:2;6564:3;6560:12;6553:19;;6358:220;;;:::o;6584:366::-;6726:3;6747:67;6811:2;6806:3;6747:67;:::i;:::-;6740:74;;6823:93;6912:3;6823:93;:::i;:::-;6941:2;6936:3;6932:12;6925:19;;6730:220;;;:::o;6956:366::-;7098:3;7119:67;7183:2;7178:3;7119:67;:::i;:::-;7112:74;;7195:93;7284:3;7195:93;:::i;:::-;7313:2;7308:3;7304:12;7297:19;;7102:220;;;:::o;7328:366::-;7470:3;7491:67;7555:2;7550:3;7491:67;:::i;:::-;7484:74;;7567:93;7656:3;7567:93;:::i;:::-;7685:2;7680:3;7676:12;7669:19;;7474:220;;;:::o;7700:366::-;7842:3;7863:67;7927:2;7922:3;7863:67;:::i;:::-;7856:74;;7939:93;8028:3;7939:93;:::i;:::-;8057:2;8052:3;8048:12;8041:19;;7846:220;;;:::o;8072:366::-;8214:3;8235:67;8299:2;8294:3;8235:67;:::i;:::-;8228:74;;8311:93;8400:3;8311:93;:::i;:::-;8429:2;8424:3;8420:12;8413:19;;8218:220;;;:::o;8444:366::-;8586:3;8607:67;8671:2;8666:3;8607:67;:::i;:::-;8600:74;;8683:93;8772:3;8683:93;:::i;:::-;8801:2;8796:3;8792:12;8785:19;;8590:220;;;:::o;8816:366::-;8958:3;8979:67;9043:2;9038:3;8979:67;:::i;:::-;8972:74;;9055:93;9144:3;9055:93;:::i;:::-;9173:2;9168:3;9164:12;9157:19;;8962:220;;;:::o;9188:366::-;9330:3;9351:67;9415:2;9410:3;9351:67;:::i;:::-;9344:74;;9427:93;9516:3;9427:93;:::i;:::-;9545:2;9540:3;9536:12;9529:19;;9334:220;;;:::o;9560:118::-;9647:24;9665:5;9647:24;:::i;:::-;9642:3;9635:37;9625:53;;:::o;9684:112::-;9767:22;9783:5;9767:22;:::i;:::-;9762:3;9755:35;9745:51;;:::o;9802:222::-;9895:4;9933:2;9922:9;9918:18;9910:26;;9946:71;10014:1;10003:9;9999:17;9990:6;9946:71;:::i;:::-;9900:124;;;;:::o;10030:332::-;10151:4;10189:2;10178:9;10174:18;10166:26;;10202:71;10270:1;10259:9;10255:17;10246:6;10202:71;:::i;:::-;10283:72;10351:2;10340:9;10336:18;10327:6;10283:72;:::i;:::-;10156:206;;;;;:::o;10368:442::-;10517:4;10555:2;10544:9;10540:18;10532:26;;10568:71;10636:1;10625:9;10621:17;10612:6;10568:71;:::i;:::-;10649:72;10717:2;10706:9;10702:18;10693:6;10649:72;:::i;:::-;10731;10799:2;10788:9;10784:18;10775:6;10731:72;:::i;:::-;10522:288;;;;;;:::o;10816:332::-;10937:4;10975:2;10964:9;10960:18;10952:26;;10988:71;11056:1;11045:9;11041:17;11032:6;10988:71;:::i;:::-;11069:72;11137:2;11126:9;11122:18;11113:6;11069:72;:::i;:::-;10942:206;;;;;:::o;11154:807::-;11403:4;11441:3;11430:9;11426:19;11418:27;;11455:71;11523:1;11512:9;11508:17;11499:6;11455:71;:::i;:::-;11536:72;11604:2;11593:9;11589:18;11580:6;11536:72;:::i;:::-;11618:80;11694:2;11683:9;11679:18;11670:6;11618:80;:::i;:::-;11708;11784:2;11773:9;11769:18;11760:6;11708:80;:::i;:::-;11798:73;11866:3;11855:9;11851:19;11842:6;11798:73;:::i;:::-;11881;11949:3;11938:9;11934:19;11925:6;11881:73;:::i;:::-;11408:553;;;;;;;;;:::o;11967:210::-;12054:4;12092:2;12081:9;12077:18;12069:26;;12105:65;12167:1;12156:9;12152:17;12143:6;12105:65;:::i;:::-;12059:118;;;;:::o;12183:313::-;12296:4;12334:2;12323:9;12319:18;12311:26;;12383:9;12377:4;12373:20;12369:1;12358:9;12354:17;12347:47;12411:78;12484:4;12475:6;12411:78;:::i;:::-;12403:86;;12301:195;;;;:::o;12502:419::-;12668:4;12706:2;12695:9;12691:18;12683:26;;12755:9;12749:4;12745:20;12741:1;12730:9;12726:17;12719:47;12783:131;12909:4;12783:131;:::i;:::-;12775:139;;12673:248;;;:::o;12927:419::-;13093:4;13131:2;13120:9;13116:18;13108:26;;13180:9;13174:4;13170:20;13166:1;13155:9;13151:17;13144:47;13208:131;13334:4;13208:131;:::i;:::-;13200:139;;13098:248;;;:::o;13352:419::-;13518:4;13556:2;13545:9;13541:18;13533:26;;13605:9;13599:4;13595:20;13591:1;13580:9;13576:17;13569:47;13633:131;13759:4;13633:131;:::i;:::-;13625:139;;13523:248;;;:::o;13777:419::-;13943:4;13981:2;13970:9;13966:18;13958:26;;14030:9;14024:4;14020:20;14016:1;14005:9;14001:17;13994:47;14058:131;14184:4;14058:131;:::i;:::-;14050:139;;13948:248;;;:::o;14202:419::-;14368:4;14406:2;14395:9;14391:18;14383:26;;14455:9;14449:4;14445:20;14441:1;14430:9;14426:17;14419:47;14483:131;14609:4;14483:131;:::i;:::-;14475:139;;14373:248;;;:::o;14627:419::-;14793:4;14831:2;14820:9;14816:18;14808:26;;14880:9;14874:4;14870:20;14866:1;14855:9;14851:17;14844:47;14908:131;15034:4;14908:131;:::i;:::-;14900:139;;14798:248;;;:::o;15052:419::-;15218:4;15256:2;15245:9;15241:18;15233:26;;15305:9;15299:4;15295:20;15291:1;15280:9;15276:17;15269:47;15333:131;15459:4;15333:131;:::i;:::-;15325:139;;15223:248;;;:::o;15477:419::-;15643:4;15681:2;15670:9;15666:18;15658:26;;15730:9;15724:4;15720:20;15716:1;15705:9;15701:17;15694:47;15758:131;15884:4;15758:131;:::i;:::-;15750:139;;15648:248;;;:::o;15902:419::-;16068:4;16106:2;16095:9;16091:18;16083:26;;16155:9;16149:4;16145:20;16141:1;16130:9;16126:17;16119:47;16183:131;16309:4;16183:131;:::i;:::-;16175:139;;16073:248;;;:::o;16327:419::-;16493:4;16531:2;16520:9;16516:18;16508:26;;16580:9;16574:4;16570:20;16566:1;16555:9;16551:17;16544:47;16608:131;16734:4;16608:131;:::i;:::-;16600:139;;16498:248;;;:::o;16752:222::-;16845:4;16883:2;16872:9;16868:18;16860:26;;16896:71;16964:1;16953:9;16949:17;16940:6;16896:71;:::i;:::-;16850:124;;;;:::o;16980:831::-;17243:4;17281:3;17270:9;17266:19;17258:27;;17295:71;17363:1;17352:9;17348:17;17339:6;17295:71;:::i;:::-;17376:80;17452:2;17441:9;17437:18;17428:6;17376:80;:::i;:::-;17503:9;17497:4;17493:20;17488:2;17477:9;17473:18;17466:48;17531:108;17634:4;17625:6;17531:108;:::i;:::-;17523:116;;17649:72;17717:2;17706:9;17702:18;17693:6;17649:72;:::i;:::-;17731:73;17799:3;17788:9;17784:19;17775:6;17731:73;:::i;:::-;17248:563;;;;;;;;:::o;17817:214::-;17906:4;17944:2;17933:9;17929:18;17921:26;;17957:67;18021:1;18010:9;18006:17;17997:6;17957:67;:::i;:::-;17911:120;;;;:::o;18037:132::-;18104:4;18127:3;18119:11;;18157:4;18152:3;18148:14;18140:22;;18109:60;;;:::o;18175:114::-;18242:6;18276:5;18270:12;18260:22;;18249:40;;;:::o;18295:99::-;18347:6;18381:5;18375:12;18365:22;;18354:40;;;:::o;18400:113::-;18470:4;18502;18497:3;18493:14;18485:22;;18475:38;;;:::o;18519:184::-;18618:11;18652:6;18647:3;18640:19;18692:4;18687:3;18683:14;18668:29;;18630:73;;;;:::o;18709:169::-;18793:11;18827:6;18822:3;18815:19;18867:4;18862:3;18858:14;18843:29;;18805:73;;;;:::o;18884:305::-;18924:3;18943:20;18961:1;18943:20;:::i;:::-;18938:25;;18977:20;18995:1;18977:20;:::i;:::-;18972:25;;19131:1;19063:66;19059:74;19056:1;19053:81;19050:2;;;19137:18;;:::i;:::-;19050:2;19181:1;19178;19174:9;19167:16;;18928:261;;;;:::o;19195:185::-;19235:1;19252:20;19270:1;19252:20;:::i;:::-;19247:25;;19286:20;19304:1;19286:20;:::i;:::-;19281:25;;19325:1;19315:2;;19330:18;;:::i;:::-;19315:2;19372:1;19369;19365:9;19360:14;;19237:143;;;;:::o;19386:348::-;19426:7;19449:20;19467:1;19449:20;:::i;:::-;19444:25;;19483:20;19501:1;19483:20;:::i;:::-;19478:25;;19671:1;19603:66;19599:74;19596:1;19593:81;19588:1;19581:9;19574:17;19570:105;19567:2;;;19678:18;;:::i;:::-;19567:2;19726:1;19723;19719:9;19708:20;;19434:300;;;;:::o;19740:191::-;19780:4;19800:20;19818:1;19800:20;:::i;:::-;19795:25;;19834:20;19852:1;19834:20;:::i;:::-;19829:25;;19873:1;19870;19867:8;19864:2;;;19878:18;;:::i;:::-;19864:2;19923:1;19920;19916:9;19908:17;;19785:146;;;;:::o;19937:96::-;19974:7;20003:24;20021:5;20003:24;:::i;:::-;19992:35;;19982:51;;;:::o;20039:104::-;20084:7;20113:24;20131:5;20113:24;:::i;:::-;20102:35;;20092:51;;;:::o;20149:90::-;20183:7;20226:5;20219:13;20212:21;20201:32;;20191:48;;;:::o;20245:126::-;20282:7;20322:42;20315:5;20311:54;20300:65;;20290:81;;;:::o;20377:77::-;20414:7;20443:5;20432:16;;20422:32;;;:::o;20460:86::-;20495:7;20535:4;20528:5;20524:16;20513:27;;20503:43;;;:::o;20552:121::-;20610:9;20643:24;20661:5;20643:24;:::i;:::-;20630:37;;20620:53;;;:::o;20679:307::-;20747:1;20757:113;20771:6;20768:1;20765:13;20757:113;;;20856:1;20851:3;20847:11;20841:18;20837:1;20832:3;20828:11;20821:39;20793:2;20790:1;20786:10;20781:15;;20757:113;;;20888:6;20885:1;20882:13;20879:2;;;20968:1;20959:6;20954:3;20950:16;20943:27;20879:2;20728:258;;;;:::o;20992:320::-;21036:6;21073:1;21067:4;21063:12;21053:22;;21120:1;21114:4;21110:12;21141:18;21131:2;;21197:4;21189:6;21185:17;21175:27;;21131:2;21259;21251:6;21248:14;21228:18;21225:38;21222:2;;;21278:18;;:::i;:::-;21222:2;21043:269;;;;:::o;21318:180::-;21366:77;21363:1;21356:88;21463:4;21460:1;21453:15;21487:4;21484:1;21477:15;21504:180;21552:77;21549:1;21542:88;21649:4;21646:1;21639:15;21673:4;21670:1;21663:15;21690:180;21738:77;21735:1;21728:88;21835:4;21832:1;21825:15;21859:4;21856:1;21849:15;21876:102;21917:6;21968:2;21964:7;21959:2;21952:5;21948:14;21944:28;21934:38;;21924:54;;;:::o;21984:222::-;22124:34;22120:1;22112:6;22108:14;22101:58;22193:5;22188:2;22180:6;22176:15;22169:30;22090:116;:::o;22212:221::-;22352:34;22348:1;22340:6;22336:14;22329:58;22421:4;22416:2;22408:6;22404:15;22397:29;22318:115;:::o;22439:177::-;22579:29;22575:1;22567:6;22563:14;22556:53;22545:71;:::o;22622:220::-;22762:34;22758:1;22750:6;22746:14;22739:58;22831:3;22826:2;22818:6;22814:15;22807:28;22728:114;:::o;22848:182::-;22988:34;22984:1;22976:6;22972:14;22965:58;22954:76;:::o;23036:228::-;23176:34;23172:1;23164:6;23160:14;23153:58;23245:11;23240:2;23232:6;23228:15;23221:36;23142:122;:::o;23270:224::-;23410:34;23406:1;23398:6;23394:14;23387:58;23479:7;23474:2;23466:6;23462:15;23455:32;23376:118;:::o;23500:223::-;23640:34;23636:1;23628:6;23624:14;23617:58;23709:6;23704:2;23696:6;23692:15;23685:31;23606:117;:::o;23729:173::-;23869:25;23865:1;23857:6;23853:14;23846:49;23835:67;:::o;23908:225::-;24048:34;24044:1;24036:6;24032:14;24025:58;24117:8;24112:2;24104:6;24100:15;24093:33;24014:119;:::o;24139:122::-;24212:24;24230:5;24212:24;:::i;:::-;24205:5;24202:35;24192:2;;24251:1;24248;24241:12;24192:2;24182:79;:::o;24267:138::-;24348:32;24374:5;24348:32;:::i;:::-;24341:5;24338:43;24328:2;;24395:1;24392;24385:12;24328:2;24318:87;:::o;24411:116::-;24481:21;24496:5;24481:21;:::i;:::-;24474:5;24471:32;24461:2;;24517:1;24514;24507:12;24461:2;24451:76;:::o;24533:122::-;24606:24;24624:5;24606:24;:::i;:::-;24599:5;24596:35;24586:2;;24645:1;24642;24635:12;24586:2;24576:79;:::o

Swarm Source

ipfs://0ff363bd28c1b65dc96f170b1f61c8947b72d1c10043c399030f11e4f4268839

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.