ETH Price: $3,385.25 (-1.80%)
Gas: 3 Gwei

Token

NGMI ($NGMI)
 

Overview

Max Total Supply

1,000,000 $NGMI

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
18,810 $NGMI

Value
$0.00
0xe8d3861316f5732c96559ecff25701c7adc7ca7b
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:
NGMI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-30
*/

// https://t.me/NGMIArmy
// https://notgonamakeit.com/
// https://twitter.com/ngmisir

// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.17;
 
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
    );
}
 
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
 
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    function owner() public view returns (address) {
        return _owner;
    }
 
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
 
}
 
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;
    }
}
 
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}
 
interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
 
    function factory() external pure returns (address);
 
    function WETH() external pure returns (address);
 
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
}
 
contract NGMI is Context, IERC20, Ownable {
 
    using SafeMath for uint256;
 
    string private constant _name = "NGMI";
    string private constant _symbol = "$NGMI";
    uint8 private constant _decimals = 9;
 
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant MAX = ~uint256(0);

    uint256 private constant _tTotal = 1000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
 
    //Buy Fee
    uint256 private _redisFeeOnBuy = 0;  
    uint256 private _taxFeeOnBuy = 5;   
 
    //Sell Fee
    uint256 private _redisFeeOnSell = 0; 
    uint256 private _taxFeeOnSell = 5;  

    uint256 public totalFees;
 
    //Original Fee
    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;
 
    uint256 private _previousredisFee = _redisFee;
    uint256 private _previoustaxFee = _taxFee;
 
    mapping(address => uint256) private cooldown;
 
    address payable private _developmentAddress = payable(0x5B4314D1e9347Eda89604cc7E7300051f633f5B7);
    address payable private _marketingAddress = payable(0x5B4314D1e9347Eda89604cc7E7300051f633f5B7);
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = true;
 
    uint256 public _maxTxAmount = 20000 * 10**9; 
    uint256 public _maxWalletSize = 1000000 * 10**9; 
    uint256 public _swapTokensAtAmount = 10000 * 10**9; 
 
    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
 
    constructor() {
 
        _rOwned[_msgSender()] = _rTotal;
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);//
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
 
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_developmentAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;
 
 
        emit Transfer(address(0), _msgSender(), _tTotal);
    }
 
    function name() public pure returns (string memory) {
        return _name;
    }
 
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
 
    function decimals() public pure returns (uint8) {
        return _decimals;
    }
 
    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }
 
    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[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 _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(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }
 
    function tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }
 
    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;
 
        _previousredisFee = _redisFee;
        _previoustaxFee = _taxFee;
 
        _redisFee = 0;
        _taxFee = 0;
    }
 
    function restoreAllFee() private {
        _redisFee = _previousredisFee;
        _taxFee = _previoustaxFee;
    }
 
    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");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
 
        if (from != owner() && to != owner()) {
 
            //Trade start check
            if (!tradingOpen) {
                require(from == owner(), "TOKEN: This account cannot send tokens until trading is enabled");
            }
 
            require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit");
 
            if(to != uniswapV2Pair) {
                require(balanceOf(to) + amount < _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
            }
 
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
 
            if(contractTokenBalance >= _maxTxAmount)
            {
                contractTokenBalance = _maxTxAmount;
            }
 
            if (canSwap && !inSwap && from != uniswapV2Pair && swapEnabled && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }
 
        bool takeFee = true;
 
        //Transfer Tokens
        if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
            takeFee = false;
        } else {
 
            //Set Fee for Buys
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }
 
            //Set Fee for Sells
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }
 
        }
 
        _tokenTransfer(from, to, amount, takeFee);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
 
    function sendETHToFee(uint256 amount) private {
        _developmentAddress.transfer(amount.div(2));
        _marketingAddress.transfer(amount.div(2));
    }
 
    function setTrading(bool _tradingOpen) public onlyOwner {
        tradingOpen = _tradingOpen;
    }
 
    function manualswap() external {
        require(_msgSender() == _developmentAddress || _msgSender() == _marketingAddress);
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }
 
    function manualsend() external {
        require(_msgSender() == _developmentAddress || _msgSender() == _marketingAddress);
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }
 
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) restoreAllFee();
    }
 
    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
 
    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }
 
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
 
    receive() external payable {}
 
    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) =
            _getTValues(tAmount, _redisFee, _taxFee);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) =
            _getRValues(tAmount, tFee, tTeam, currentRate);
 
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }
 
    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
 
        return (tTransferAmount, tFee, tTeam);
    }
 
    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
 
        return (rAmount, rTransferAmount, rFee);
    }
 
    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
 
        return rSupply.div(tSupply);
    }
 
    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
 
        return (rSupply, tSupply);
    }
 
    function reduceFee(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
        totalFees = _redisFeeOnBuy + _redisFeeOnSell + _taxFeeOnBuy + _taxFeeOnSell;
        require(totalFees <= 100, "Fees must be lower than 10%");
    }
 
    //Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(uint256 swapTokensAtAmount) public onlyOwner {
        _swapTokensAtAmount = swapTokensAtAmount;
    }
 
    //Set minimum tokens required to swap.
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }
 
 
    //Set max buy amount 
    function setMaxTxnAmount(uint256 maxTxAmount) public onlyOwner {
        _maxTxAmount = maxTxAmount;
    }

    //Set max wallet amount 
    // function setMaxWalletSize(uint256 maxWalletSize) public onlyOwner {
        // _maxWalletSize = maxWalletSize;
    // }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }

    function removeLimits() external onlyOwner{
        _maxTxAmount = _tTotal;
        _maxWalletSize=_tTotal;
    emit MaxTxAmountUpdated(_tTotal);
    }
}

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":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"reduceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405266038d7ea4c680006000196200001b91906200070b565b6000196200002a919062000772565b600655600060085560056009556000600a556005600b55600a54600d55600b54600e55600d54600f55600e54601055735b4314d1e9347eda89604cc7e7300051f633f5b7601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735b4314d1e9347eda89604cc7e7300051f633f5b7601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006015806101000a81548160ff0219169083151502179055506001601560166101000a81548160ff0219169083151502179055506512309ce5400060165566038d7ea4c680006017556509184e72a0006018553480156200016457600080fd5b50600062000177620006a160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600654600260006200022c620006a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000310573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000336919062000817565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000817565b6040518363ffffffff1660e01b8152600401620003e39291906200085a565b6020604051808303816000875af115801562000403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000429919062000817565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560006200047f620006a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200062c620006a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef66038d7ea4c6800060405162000692919062000898565b60405180910390a350620008b5565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200071882620006d2565b91506200072583620006d2565b925082620007385762000737620006dc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200077f82620006d2565b91506200078c83620006d2565b9250828203905081811115620007a757620007a662000743565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007df82620007b2565b9050919050565b620007f181620007d2565b8114620007fd57600080fd5b50565b6000815190506200081181620007e6565b92915050565b60006020828403121562000830576200082f620007ad565b5b6000620008408482850162000800565b91505092915050565b6200085481620007d2565b82525050565b600060408201905062000871600083018562000849565b62000880602083018462000849565b9392505050565b6200089281620006d2565b82525050565b6000602082019050620008af600083018462000887565b92915050565b61393a80620008c56000396000f3fe6080604052600436106101a05760003560e01c8063734a0a9f116100ec57806395d89b411161008a578063c3c8cd8011610064578063c3c8cd801461058b578063c492f046146105a2578063dd62ed3e146105cb578063f2fde38b14610608576101a7565b806395d89b41146104fa57806398a5c31514610525578063a9059cbb1461054e576101a7565b80637d1db4a5116100c65780637d1db4a5146104505780638da5cb5b1461047b5780638f70ccf7146104a65780638f9a55c0146104cf576101a7565b8063734a0a9f146103e757806374010ece14610410578063751039fc14610439576101a7565b80632fd689e3116101595780636d8aa8f8116101335780636d8aa8f8146103535780636fc3eaec1461037c57806370a0823114610393578063715018a6146103d0576101a7565b80632fd689e3146102d2578063313ce567146102fd57806349bd5a5e14610328576101a7565b806306fdde03146101ac578063095ea7b3146101d757806313114a9d146102145780631694505e1461023f57806318160ddd1461026a57806323b872dd14610295576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610631565b6040516101ce9190612957565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f99190612a17565b61066e565b60405161020b9190612a72565b60405180910390f35b34801561022057600080fd5b5061022961068c565b6040516102369190612a9c565b60405180910390f35b34801561024b57600080fd5b50610254610692565b6040516102619190612b16565b60405180910390f35b34801561027657600080fd5b5061027f6106b8565b60405161028c9190612a9c565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612b31565b6106c7565b6040516102c99190612a72565b60405180910390f35b3480156102de57600080fd5b506102e76107a0565b6040516102f49190612a9c565b60405180910390f35b34801561030957600080fd5b506103126107a6565b60405161031f9190612ba0565b60405180910390f35b34801561033457600080fd5b5061033d6107af565b60405161034a9190612bca565b60405180910390f35b34801561035f57600080fd5b5061037a60048036038101906103759190612c11565b6107d5565b005b34801561038857600080fd5b50610391610887565b005b34801561039f57600080fd5b506103ba60048036038101906103b59190612c3e565b610958565b6040516103c79190612a9c565b60405180910390f35b3480156103dc57600080fd5b506103e56109a9565b005b3480156103f357600080fd5b5061040e60048036038101906104099190612c6b565b610afc565b005b34801561041c57600080fd5b5061043760048036038101906104329190612cd2565b610c29565b005b34801561044557600080fd5b5061044e610cc8565b005b34801561045c57600080fd5b50610465610db9565b6040516104729190612a9c565b60405180910390f35b34801561048757600080fd5b50610490610dbf565b60405161049d9190612bca565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190612c11565b610de8565b005b3480156104db57600080fd5b506104e4610e9a565b6040516104f19190612a9c565b60405180910390f35b34801561050657600080fd5b5061050f610ea0565b60405161051c9190612957565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190612cd2565b610edd565b005b34801561055a57600080fd5b5061057560048036038101906105709190612a17565b610f7c565b6040516105829190612a72565b60405180910390f35b34801561059757600080fd5b506105a0610f9a565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190612d64565b611073565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190612dc4565b6111ad565b6040516105ff9190612a9c565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612c3e565b611234565b005b60606040518060400160405280600481526020017f4e474d4900000000000000000000000000000000000000000000000000000000815250905090565b600061068261067b6113f5565b84846113fd565b6001905092915050565b600c5481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600066038d7ea4c68000905090565b60006106d48484846115c6565b610795846106e06113f5565b610790856040518060600160405280602881526020016138dd60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107466113f5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d669092919063ffffffff16565b6113fd565b600190509392505050565b60185481565b60006009905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6107dd6113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190612e50565b60405180910390fd5b80601560166101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108c86113f5565b73ffffffffffffffffffffffffffffffffffffffff16148061093e5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109266113f5565b73ffffffffffffffffffffffffffffffffffffffff16145b61094757600080fd5b600047905061095581611dca565b50565b60006109a2600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ec5565b9050919050565b6109b16113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590612e50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610b046113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8890612e50565b60405180910390fd5b8360088190555082600a819055508160098190555080600b81905550600b54600954600a54600854610bc39190612e9f565b610bcd9190612e9f565b610bd79190612e9f565b600c819055506064600c541115610c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1a90612f1f565b60405180910390fd5b50505050565b610c316113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590612e50565b60405180910390fd5b8060168190555050565b610cd06113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5490612e50565b60405180910390fd5b66038d7ea4c6800060168190555066038d7ea4c680006017819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf66038d7ea4c68000604051610daf9190612a9c565b60405180910390a1565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610df06113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490612e50565b60405180910390fd5b80601560146101000a81548160ff02191690831515021790555050565b60175481565b60606040518060400160405280600581526020017f244e474d49000000000000000000000000000000000000000000000000000000815250905090565b610ee56113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990612e50565b60405180910390fd5b8060188190555050565b6000610f90610f896113f5565b84846115c6565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610fdb6113f5565b73ffffffffffffffffffffffffffffffffffffffff1614806110515750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110396113f5565b73ffffffffffffffffffffffffffffffffffffffff16145b61105a57600080fd5b600061106530610958565b905061107081611f33565b50565b61107b6113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ff90612e50565b60405180910390fd5b60005b838390508110156111a757816005600086868581811061112e5761112d612f3f565b5b90506020020160208101906111439190612c3e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061119f90612f6e565b91505061110b565b50505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61123c6113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090612e50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90613028565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361146c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611463906130ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d29061314c565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115b99190612a9c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906131de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90613270565b60405180910390fd5b600081116116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90613302565b60405180910390fd5b6116ef610dbf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561175d575061172d610dbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a6557601560149054906101000a900460ff166117ec5761177e610dbf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290613394565b60405180910390fd5b5b601654811115611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890613400565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146118de576017548161189384610958565b61189d9190612e9f565b106118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d490613492565b60405180910390fd5b5b60006118e930610958565b90506000601854821015905060165482106119045760165491505b80801561191c575060158054906101000a900460ff16155b80156119765750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561198e5750601560169054906101000a900460ff165b80156119e45750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a3a5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a6257611a4882611f33565b60004790506000811115611a6057611a5f47611dca565b5b505b50505b600060019050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b0c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611bbf5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611bbe5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611bcd5760009050611d54565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611c785750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611c9057600854600d81905550600954600e819055505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611d3b5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611d5357600a54600d81905550600b54600e819055505b5b611d60848484846121aa565b50505050565b6000838311158290611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da59190612957565b60405180910390fd5b5060008385611dbd91906134b2565b9050809150509392505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611e1a6002846121d790919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611e45573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611e966002846121d790919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611ec1573d6000803e3d6000fd5b5050565b6000600654821115611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390613558565b60405180910390fd5b6000611f16612221565b9050611f2b81846121d790919063ffffffff16565b915050919050565b60016015806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611f6a57611f69613578565b5b604051908082528060200260200182016040528015611f985781602001602082028036833780820191505090505b5090503081600081518110611fb057611faf612f3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207b91906135bc565b8160018151811061208f5761208e612f3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506120f630601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846113fd565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161215a9594939291906136e2565b600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505050505060006015806101000a81548160ff02191690831515021790555050565b806121b8576121b761224c565b5b6121c3848484612289565b806121d1576121d0612454565b5b50505050565b600061221983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612468565b905092915050565b600080600061222e6124cb565b9150915061224581836121d790919063ffffffff16565b9250505090565b6000600d5414801561226057506000600e54145b61228757600d54600f81905550600e546010819055506000600d819055506000600e819055505b565b60008060008060008061229b87612527565b9550955095509550955095506122f986600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258f90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061238e85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125d990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123da81612637565b6123e484836126f4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516124419190612a9c565b60405180910390a3505050505050505050565b600f54600d81905550601054600e81905550565b600080831182906124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a69190612957565b60405180910390fd5b50600083856124be919061376b565b9050809150509392505050565b60008060006006549050600066038d7ea4c6800090506124fd66038d7ea4c680006006546121d790919063ffffffff16565b82101561251a5760065466038d7ea4c68000935093505050612523565b81819350935050505b9091565b60008060008060008060008060006125448a600d54600e5461272e565b9250925092506000612554612221565b905060008060006125678e8787876127c4565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60006125d183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d66565b905092915050565b60008082846125e89190612e9f565b90508381101561262d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612624906137e8565b60405180910390fd5b8091505092915050565b6000612641612221565b90506000612658828461284d90919063ffffffff16565b90506126ac81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125d990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6127098260065461258f90919063ffffffff16565b600681905550612724816007546125d990919063ffffffff16565b6007819055505050565b60008060008061275a606461274c888a61284d90919063ffffffff16565b6121d790919063ffffffff16565b905060006127846064612776888b61284d90919063ffffffff16565b6121d790919063ffffffff16565b905060006127ad8261279f858c61258f90919063ffffffff16565b61258f90919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806127dd858961284d90919063ffffffff16565b905060006127f4868961284d90919063ffffffff16565b9050600061280b878961284d90919063ffffffff16565b9050600061283482612826858761258f90919063ffffffff16565b61258f90919063ffffffff16565b9050838184965096509650505050509450945094915050565b600080830361285f57600090506128c1565b6000828461286d9190613808565b905082848261287c919061376b565b146128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b3906138bc565b60405180910390fd5b809150505b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129015780820151818401526020810190506128e6565b60008484015250505050565b6000601f19601f8301169050919050565b6000612929826128c7565b61293381856128d2565b93506129438185602086016128e3565b61294c8161290d565b840191505092915050565b60006020820190508181036000830152612971818461291e565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129ae82612983565b9050919050565b6129be816129a3565b81146129c957600080fd5b50565b6000813590506129db816129b5565b92915050565b6000819050919050565b6129f4816129e1565b81146129ff57600080fd5b50565b600081359050612a11816129eb565b92915050565b60008060408385031215612a2e57612a2d612979565b5b6000612a3c858286016129cc565b9250506020612a4d85828601612a02565b9150509250929050565b60008115159050919050565b612a6c81612a57565b82525050565b6000602082019050612a876000830184612a63565b92915050565b612a96816129e1565b82525050565b6000602082019050612ab16000830184612a8d565b92915050565b6000819050919050565b6000612adc612ad7612ad284612983565b612ab7565b612983565b9050919050565b6000612aee82612ac1565b9050919050565b6000612b0082612ae3565b9050919050565b612b1081612af5565b82525050565b6000602082019050612b2b6000830184612b07565b92915050565b600080600060608486031215612b4a57612b49612979565b5b6000612b58868287016129cc565b9350506020612b69868287016129cc565b9250506040612b7a86828701612a02565b9150509250925092565b600060ff82169050919050565b612b9a81612b84565b82525050565b6000602082019050612bb56000830184612b91565b92915050565b612bc4816129a3565b82525050565b6000602082019050612bdf6000830184612bbb565b92915050565b612bee81612a57565b8114612bf957600080fd5b50565b600081359050612c0b81612be5565b92915050565b600060208284031215612c2757612c26612979565b5b6000612c3584828501612bfc565b91505092915050565b600060208284031215612c5457612c53612979565b5b6000612c62848285016129cc565b91505092915050565b60008060008060808587031215612c8557612c84612979565b5b6000612c9387828801612a02565b9450506020612ca487828801612a02565b9350506040612cb587828801612a02565b9250506060612cc687828801612a02565b91505092959194509250565b600060208284031215612ce857612ce7612979565b5b6000612cf684828501612a02565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612d2457612d23612cff565b5b8235905067ffffffffffffffff811115612d4157612d40612d04565b5b602083019150836020820283011115612d5d57612d5c612d09565b5b9250929050565b600080600060408486031215612d7d57612d7c612979565b5b600084013567ffffffffffffffff811115612d9b57612d9a61297e565b5b612da786828701612d0e565b93509350506020612dba86828701612bfc565b9150509250925092565b60008060408385031215612ddb57612dda612979565b5b6000612de9858286016129cc565b9250506020612dfa858286016129cc565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e3a6020836128d2565b9150612e4582612e04565b602082019050919050565b60006020820190508181036000830152612e6981612e2d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612eaa826129e1565b9150612eb5836129e1565b9250828201905080821115612ecd57612ecc612e70565b5b92915050565b7f46656573206d757374206265206c6f776572207468616e203130250000000000600082015250565b6000612f09601b836128d2565b9150612f1482612ed3565b602082019050919050565b60006020820190508181036000830152612f3881612efc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612f79826129e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fab57612faa612e70565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130126026836128d2565b915061301d82612fb6565b604082019050919050565b6000602082019050818103600083015261304181613005565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130a46024836128d2565b91506130af82613048565b604082019050919050565b600060208201905081810360008301526130d381613097565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131366022836128d2565b9150613141826130da565b604082019050919050565b6000602082019050818103600083015261316581613129565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131c86025836128d2565b91506131d38261316c565b604082019050919050565b600060208201905081810360008301526131f7816131bb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061325a6023836128d2565b9150613265826131fe565b604082019050919050565b600060208201905081810360008301526132898161324d565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006132ec6029836128d2565b91506132f782613290565b604082019050919050565b6000602082019050818103600083015261331b816132df565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b600061337e603f836128d2565b915061338982613322565b604082019050919050565b600060208201905081810360008301526133ad81613371565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b60006133ea601c836128d2565b91506133f5826133b4565b602082019050919050565b60006020820190508181036000830152613419816133dd565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b600061347c6023836128d2565b915061348782613420565b604082019050919050565b600060208201905081810360008301526134ab8161346f565b9050919050565b60006134bd826129e1565b91506134c8836129e1565b92508282039050818111156134e0576134df612e70565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000613542602a836128d2565b915061354d826134e6565b604082019050919050565b6000602082019050818103600083015261357181613535565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506135b6816129b5565b92915050565b6000602082840312156135d2576135d1612979565b5b60006135e0848285016135a7565b91505092915050565b6000819050919050565b600061360e613609613604846135e9565b612ab7565b6129e1565b9050919050565b61361e816135f3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613659816129a3565b82525050565b600061366b8383613650565b60208301905092915050565b6000602082019050919050565b600061368f82613624565b613699818561362f565b93506136a483613640565b8060005b838110156136d55781516136bc888261365f565b97506136c783613677565b9250506001810190506136a8565b5085935050505092915050565b600060a0820190506136f76000830188612a8d565b6137046020830187613615565b81810360408301526137168186613684565b90506137256060830185612bbb565b6137326080830184612a8d565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613776826129e1565b9150613781836129e1565b9250826137915761379061373c565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006137d2601b836128d2565b91506137dd8261379c565b602082019050919050565b60006020820190508181036000830152613801816137c5565b9050919050565b6000613813826129e1565b915061381e836129e1565b925082820261382c816129e1565b9150828204841483151761384357613842612e70565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006138a66021836128d2565b91506138b18261384a565b604082019050919050565b600060208201905081810360008301526138d581613899565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e77ccb7b61655cecf0b5e5dec19ea7519830e1044d20b3047874925d45243a2464736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101a05760003560e01c8063734a0a9f116100ec57806395d89b411161008a578063c3c8cd8011610064578063c3c8cd801461058b578063c492f046146105a2578063dd62ed3e146105cb578063f2fde38b14610608576101a7565b806395d89b41146104fa57806398a5c31514610525578063a9059cbb1461054e576101a7565b80637d1db4a5116100c65780637d1db4a5146104505780638da5cb5b1461047b5780638f70ccf7146104a65780638f9a55c0146104cf576101a7565b8063734a0a9f146103e757806374010ece14610410578063751039fc14610439576101a7565b80632fd689e3116101595780636d8aa8f8116101335780636d8aa8f8146103535780636fc3eaec1461037c57806370a0823114610393578063715018a6146103d0576101a7565b80632fd689e3146102d2578063313ce567146102fd57806349bd5a5e14610328576101a7565b806306fdde03146101ac578063095ea7b3146101d757806313114a9d146102145780631694505e1461023f57806318160ddd1461026a57806323b872dd14610295576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610631565b6040516101ce9190612957565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f99190612a17565b61066e565b60405161020b9190612a72565b60405180910390f35b34801561022057600080fd5b5061022961068c565b6040516102369190612a9c565b60405180910390f35b34801561024b57600080fd5b50610254610692565b6040516102619190612b16565b60405180910390f35b34801561027657600080fd5b5061027f6106b8565b60405161028c9190612a9c565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612b31565b6106c7565b6040516102c99190612a72565b60405180910390f35b3480156102de57600080fd5b506102e76107a0565b6040516102f49190612a9c565b60405180910390f35b34801561030957600080fd5b506103126107a6565b60405161031f9190612ba0565b60405180910390f35b34801561033457600080fd5b5061033d6107af565b60405161034a9190612bca565b60405180910390f35b34801561035f57600080fd5b5061037a60048036038101906103759190612c11565b6107d5565b005b34801561038857600080fd5b50610391610887565b005b34801561039f57600080fd5b506103ba60048036038101906103b59190612c3e565b610958565b6040516103c79190612a9c565b60405180910390f35b3480156103dc57600080fd5b506103e56109a9565b005b3480156103f357600080fd5b5061040e60048036038101906104099190612c6b565b610afc565b005b34801561041c57600080fd5b5061043760048036038101906104329190612cd2565b610c29565b005b34801561044557600080fd5b5061044e610cc8565b005b34801561045c57600080fd5b50610465610db9565b6040516104729190612a9c565b60405180910390f35b34801561048757600080fd5b50610490610dbf565b60405161049d9190612bca565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190612c11565b610de8565b005b3480156104db57600080fd5b506104e4610e9a565b6040516104f19190612a9c565b60405180910390f35b34801561050657600080fd5b5061050f610ea0565b60405161051c9190612957565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190612cd2565b610edd565b005b34801561055a57600080fd5b5061057560048036038101906105709190612a17565b610f7c565b6040516105829190612a72565b60405180910390f35b34801561059757600080fd5b506105a0610f9a565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190612d64565b611073565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190612dc4565b6111ad565b6040516105ff9190612a9c565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612c3e565b611234565b005b60606040518060400160405280600481526020017f4e474d4900000000000000000000000000000000000000000000000000000000815250905090565b600061068261067b6113f5565b84846113fd565b6001905092915050565b600c5481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600066038d7ea4c68000905090565b60006106d48484846115c6565b610795846106e06113f5565b610790856040518060600160405280602881526020016138dd60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107466113f5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d669092919063ffffffff16565b6113fd565b600190509392505050565b60185481565b60006009905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6107dd6113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190612e50565b60405180910390fd5b80601560166101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108c86113f5565b73ffffffffffffffffffffffffffffffffffffffff16148061093e5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109266113f5565b73ffffffffffffffffffffffffffffffffffffffff16145b61094757600080fd5b600047905061095581611dca565b50565b60006109a2600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ec5565b9050919050565b6109b16113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590612e50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610b046113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8890612e50565b60405180910390fd5b8360088190555082600a819055508160098190555080600b81905550600b54600954600a54600854610bc39190612e9f565b610bcd9190612e9f565b610bd79190612e9f565b600c819055506064600c541115610c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1a90612f1f565b60405180910390fd5b50505050565b610c316113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590612e50565b60405180910390fd5b8060168190555050565b610cd06113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5490612e50565b60405180910390fd5b66038d7ea4c6800060168190555066038d7ea4c680006017819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf66038d7ea4c68000604051610daf9190612a9c565b60405180910390a1565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610df06113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490612e50565b60405180910390fd5b80601560146101000a81548160ff02191690831515021790555050565b60175481565b60606040518060400160405280600581526020017f244e474d49000000000000000000000000000000000000000000000000000000815250905090565b610ee56113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990612e50565b60405180910390fd5b8060188190555050565b6000610f90610f896113f5565b84846115c6565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610fdb6113f5565b73ffffffffffffffffffffffffffffffffffffffff1614806110515750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110396113f5565b73ffffffffffffffffffffffffffffffffffffffff16145b61105a57600080fd5b600061106530610958565b905061107081611f33565b50565b61107b6113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ff90612e50565b60405180910390fd5b60005b838390508110156111a757816005600086868581811061112e5761112d612f3f565b5b90506020020160208101906111439190612c3e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061119f90612f6e565b91505061110b565b50505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61123c6113f5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090612e50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90613028565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361146c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611463906130ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d29061314c565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115b99190612a9c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906131de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90613270565b60405180910390fd5b600081116116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90613302565b60405180910390fd5b6116ef610dbf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561175d575061172d610dbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a6557601560149054906101000a900460ff166117ec5761177e610dbf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290613394565b60405180910390fd5b5b601654811115611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890613400565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146118de576017548161189384610958565b61189d9190612e9f565b106118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d490613492565b60405180910390fd5b5b60006118e930610958565b90506000601854821015905060165482106119045760165491505b80801561191c575060158054906101000a900460ff16155b80156119765750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561198e5750601560169054906101000a900460ff165b80156119e45750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a3a5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a6257611a4882611f33565b60004790506000811115611a6057611a5f47611dca565b5b505b50505b600060019050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b0c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611bbf5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611bbe5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611bcd5760009050611d54565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611c785750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611c9057600854600d81905550600954600e819055505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611d3b5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611d5357600a54600d81905550600b54600e819055505b5b611d60848484846121aa565b50505050565b6000838311158290611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da59190612957565b60405180910390fd5b5060008385611dbd91906134b2565b9050809150509392505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611e1a6002846121d790919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611e45573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611e966002846121d790919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611ec1573d6000803e3d6000fd5b5050565b6000600654821115611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390613558565b60405180910390fd5b6000611f16612221565b9050611f2b81846121d790919063ffffffff16565b915050919050565b60016015806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611f6a57611f69613578565b5b604051908082528060200260200182016040528015611f985781602001602082028036833780820191505090505b5090503081600081518110611fb057611faf612f3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207b91906135bc565b8160018151811061208f5761208e612f3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506120f630601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846113fd565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161215a9594939291906136e2565b600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505050505060006015806101000a81548160ff02191690831515021790555050565b806121b8576121b761224c565b5b6121c3848484612289565b806121d1576121d0612454565b5b50505050565b600061221983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612468565b905092915050565b600080600061222e6124cb565b9150915061224581836121d790919063ffffffff16565b9250505090565b6000600d5414801561226057506000600e54145b61228757600d54600f81905550600e546010819055506000600d819055506000600e819055505b565b60008060008060008061229b87612527565b9550955095509550955095506122f986600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258f90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061238e85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125d990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123da81612637565b6123e484836126f4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516124419190612a9c565b60405180910390a3505050505050505050565b600f54600d81905550601054600e81905550565b600080831182906124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a69190612957565b60405180910390fd5b50600083856124be919061376b565b9050809150509392505050565b60008060006006549050600066038d7ea4c6800090506124fd66038d7ea4c680006006546121d790919063ffffffff16565b82101561251a5760065466038d7ea4c68000935093505050612523565b81819350935050505b9091565b60008060008060008060008060006125448a600d54600e5461272e565b9250925092506000612554612221565b905060008060006125678e8787876127c4565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60006125d183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d66565b905092915050565b60008082846125e89190612e9f565b90508381101561262d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612624906137e8565b60405180910390fd5b8091505092915050565b6000612641612221565b90506000612658828461284d90919063ffffffff16565b90506126ac81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125d990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6127098260065461258f90919063ffffffff16565b600681905550612724816007546125d990919063ffffffff16565b6007819055505050565b60008060008061275a606461274c888a61284d90919063ffffffff16565b6121d790919063ffffffff16565b905060006127846064612776888b61284d90919063ffffffff16565b6121d790919063ffffffff16565b905060006127ad8261279f858c61258f90919063ffffffff16565b61258f90919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806127dd858961284d90919063ffffffff16565b905060006127f4868961284d90919063ffffffff16565b9050600061280b878961284d90919063ffffffff16565b9050600061283482612826858761258f90919063ffffffff16565b61258f90919063ffffffff16565b9050838184965096509650505050509450945094915050565b600080830361285f57600090506128c1565b6000828461286d9190613808565b905082848261287c919061376b565b146128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b3906138bc565b60405180910390fd5b809150505b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129015780820151818401526020810190506128e6565b60008484015250505050565b6000601f19601f8301169050919050565b6000612929826128c7565b61293381856128d2565b93506129438185602086016128e3565b61294c8161290d565b840191505092915050565b60006020820190508181036000830152612971818461291e565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129ae82612983565b9050919050565b6129be816129a3565b81146129c957600080fd5b50565b6000813590506129db816129b5565b92915050565b6000819050919050565b6129f4816129e1565b81146129ff57600080fd5b50565b600081359050612a11816129eb565b92915050565b60008060408385031215612a2e57612a2d612979565b5b6000612a3c858286016129cc565b9250506020612a4d85828601612a02565b9150509250929050565b60008115159050919050565b612a6c81612a57565b82525050565b6000602082019050612a876000830184612a63565b92915050565b612a96816129e1565b82525050565b6000602082019050612ab16000830184612a8d565b92915050565b6000819050919050565b6000612adc612ad7612ad284612983565b612ab7565b612983565b9050919050565b6000612aee82612ac1565b9050919050565b6000612b0082612ae3565b9050919050565b612b1081612af5565b82525050565b6000602082019050612b2b6000830184612b07565b92915050565b600080600060608486031215612b4a57612b49612979565b5b6000612b58868287016129cc565b9350506020612b69868287016129cc565b9250506040612b7a86828701612a02565b9150509250925092565b600060ff82169050919050565b612b9a81612b84565b82525050565b6000602082019050612bb56000830184612b91565b92915050565b612bc4816129a3565b82525050565b6000602082019050612bdf6000830184612bbb565b92915050565b612bee81612a57565b8114612bf957600080fd5b50565b600081359050612c0b81612be5565b92915050565b600060208284031215612c2757612c26612979565b5b6000612c3584828501612bfc565b91505092915050565b600060208284031215612c5457612c53612979565b5b6000612c62848285016129cc565b91505092915050565b60008060008060808587031215612c8557612c84612979565b5b6000612c9387828801612a02565b9450506020612ca487828801612a02565b9350506040612cb587828801612a02565b9250506060612cc687828801612a02565b91505092959194509250565b600060208284031215612ce857612ce7612979565b5b6000612cf684828501612a02565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612d2457612d23612cff565b5b8235905067ffffffffffffffff811115612d4157612d40612d04565b5b602083019150836020820283011115612d5d57612d5c612d09565b5b9250929050565b600080600060408486031215612d7d57612d7c612979565b5b600084013567ffffffffffffffff811115612d9b57612d9a61297e565b5b612da786828701612d0e565b93509350506020612dba86828701612bfc565b9150509250925092565b60008060408385031215612ddb57612dda612979565b5b6000612de9858286016129cc565b9250506020612dfa858286016129cc565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e3a6020836128d2565b9150612e4582612e04565b602082019050919050565b60006020820190508181036000830152612e6981612e2d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612eaa826129e1565b9150612eb5836129e1565b9250828201905080821115612ecd57612ecc612e70565b5b92915050565b7f46656573206d757374206265206c6f776572207468616e203130250000000000600082015250565b6000612f09601b836128d2565b9150612f1482612ed3565b602082019050919050565b60006020820190508181036000830152612f3881612efc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612f79826129e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fab57612faa612e70565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130126026836128d2565b915061301d82612fb6565b604082019050919050565b6000602082019050818103600083015261304181613005565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130a46024836128d2565b91506130af82613048565b604082019050919050565b600060208201905081810360008301526130d381613097565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131366022836128d2565b9150613141826130da565b604082019050919050565b6000602082019050818103600083015261316581613129565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131c86025836128d2565b91506131d38261316c565b604082019050919050565b600060208201905081810360008301526131f7816131bb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061325a6023836128d2565b9150613265826131fe565b604082019050919050565b600060208201905081810360008301526132898161324d565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006132ec6029836128d2565b91506132f782613290565b604082019050919050565b6000602082019050818103600083015261331b816132df565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b600061337e603f836128d2565b915061338982613322565b604082019050919050565b600060208201905081810360008301526133ad81613371565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b60006133ea601c836128d2565b91506133f5826133b4565b602082019050919050565b60006020820190508181036000830152613419816133dd565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b600061347c6023836128d2565b915061348782613420565b604082019050919050565b600060208201905081810360008301526134ab8161346f565b9050919050565b60006134bd826129e1565b91506134c8836129e1565b92508282039050818111156134e0576134df612e70565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000613542602a836128d2565b915061354d826134e6565b604082019050919050565b6000602082019050818103600083015261357181613535565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506135b6816129b5565b92915050565b6000602082840312156135d2576135d1612979565b5b60006135e0848285016135a7565b91505092915050565b6000819050919050565b600061360e613609613604846135e9565b612ab7565b6129e1565b9050919050565b61361e816135f3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613659816129a3565b82525050565b600061366b8383613650565b60208301905092915050565b6000602082019050919050565b600061368f82613624565b613699818561362f565b93506136a483613640565b8060005b838110156136d55781516136bc888261365f565b97506136c783613677565b9250506001810190506136a8565b5085935050505092915050565b600060a0820190506136f76000830188612a8d565b6137046020830187613615565b81810360408301526137168186613684565b90506137256060830185612bbb565b6137326080830184612a8d565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613776826129e1565b9150613781836129e1565b9250826137915761379061373c565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006137d2601b836128d2565b91506137dd8261379c565b602082019050919050565b60006020820190508181036000830152613801816137c5565b9050919050565b6000613813826129e1565b915061381e836129e1565b925082820261382c816129e1565b9150828204841483151761384357613842612e70565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006138a66021836128d2565b91506138b18261384a565b604082019050919050565b600060208201905081810360008301526138d581613899565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e77ccb7b61655cecf0b5e5dec19ea7519830e1044d20b3047874925d45243a2464736f6c63430008110033

Deployed Bytecode Sourcemap

4189:13658:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6734:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7666:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5054:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5573:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7014:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7868:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5871:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6922:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5621:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17029:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12670:235;;;;;;;;;;;;;:::i;:::-;;7118:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1662:148;;;;;;;;;;;;;:::i;:::-;;16337:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17169:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17689:155;;;;;;;;;;;;;:::i;:::-;;5765:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1446:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12315:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5816:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6826:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16837:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7265:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12425:236;;;;;;;;;;;;;:::i;:::-;;17447:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7473:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1819:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6734:83;6771:13;6804:5;;;;;;;;;;;;;;;;;6797:12;;6734:83;:::o;7666:193::-;7768:4;7790:39;7799:12;:10;:12::i;:::-;7813:7;7822:6;7790:8;:39::i;:::-;7847:4;7840:11;;7666:193;;;;:::o;5054:24::-;;;;:::o;5573:41::-;;;;;;;;;;;;;:::o;7014:95::-;7067:7;4734:15;7087:14;;7014:95;:::o;7868:446::-;8000:4;8017:36;8027:6;8035:9;8046:6;8017:9;:36::i;:::-;8064:220;8087:6;8108:12;:10;:12::i;:::-;8135:138;8191:6;8135:138;;;;;;;;;;;;;;;;;:11;:19;8147:6;8135:19;;;;;;;;;;;;;;;:33;8155:12;:10;:12::i;:::-;8135:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;8064:8;:220::i;:::-;8302:4;8295:11;;7868:446;;;;;:::o;5871:50::-;;;;:::o;6922:83::-;6963:5;4405:1;6981:16;;6922:83;:::o;5621:28::-;;;;;;;;;;;;;:::o;17029:101::-;1584:12;:10;:12::i;:::-;1574:22;;:6;;;;;;;;;;:22;;;1566:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17110:12:::1;17096:11;;:26;;;;;;;;;;;;;;;;;;17029:101:::0;:::o;12670:235::-;12736:19;;;;;;;;;;;12720:35;;:12;:10;:12::i;:::-;:35;;;:72;;;;12775:17;;;;;;;;;;;12759:33;;:12;:10;:12::i;:::-;:33;;;12720:72;12712:81;;;;;;12804:26;12833:21;12804:50;;12865:32;12878:18;12865:12;:32::i;:::-;12701:204;12670:235::o;7118:138::-;7184:7;7211:37;7231:7;:16;7239:7;7231:16;;;;;;;;;;;;;;;;7211:19;:37::i;:::-;7204:44;;7118:138;;;:::o;1662:148::-;1584:12;:10;:12::i;:::-;1574:22;;:6;;;;;;;;;;:22;;;1566:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1769:1:::1;1732:40;;1753:6;::::0;::::1;;;;;;;;1732:40;;;;;;;;;;;;1800:1;1783:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1662:148::o:0;16337:447::-;1584:12;:10;:12::i;:::-;1574:22;;:6;;;;;;;;;;:22;;;1566:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16491:13:::1;16474:14;:30;;;;16533:14;16515:15;:32;;;;16573:11;16558:12;:26;;;;16611:12;16595:13;:28;;;;16696:13;;16681:12;;16663:15;;16646:14;;:32;;;;:::i;:::-;:47;;;;:::i;:::-;:63;;;;:::i;:::-;16634:9;:75;;;;16741:3;16728:9;;:16;;16720:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16337:447:::0;;;;:::o;17169:108::-;1584:12;:10;:12::i;:::-;1574:22;;:6;;;;;;;;;;:22;;;1566:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17258:11:::1;17243:12;:26;;;;17169:108:::0;:::o;17689:155::-;1584:12;:10;:12::i;:::-;1574:22;;:6;;;;;;;;;;:22;;;1566:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4734:15:::1;17742:12;:22;;;;4734:15;17775:14;:22;;;;17809:27;4734:15;17809:27;;;;;;:::i;:::-;;;;;;;;17689:155::o:0;5765:43::-;;;;:::o;1446:79::-;1484:7;1511:6;;;;;;;;;;;1504:13;;1446:79;:::o;12315:101::-;1584:12;:10;:12::i;:::-;1574:22;;:6;;;;;;;;;;:22;;;1566:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12396:12:::1;12382:11;;:26;;;;;;;;;;;;;;;;;;12315:101:::0;:::o;5816:47::-;;;;:::o;6826:87::-;6865:13;6898:7;;;;;;;;;;;;;;;;;6891:14;;6826:87;:::o;16837:139::-;1584:12;:10;:12::i;:::-;1574:22;;:6;;;;;;;;;;:22;;;1566:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16950:18:::1;16928:19;:40;;;;16837:139:::0;:::o;7265:199::-;7370:4;7392:42;7402:12;:10;:12::i;:::-;7416:9;7427:6;7392:9;:42::i;:::-;7452:4;7445:11;;7265:199;;;;:::o;12425:236::-;12491:19;;;;;;;;;;;12475:35;;:12;:10;:12::i;:::-;:35;;;:72;;;;12530:17;;;;;;;;;;;12514:33;;:12;:10;:12::i;:::-;:33;;;12475:72;12467:81;;;;;;12559:23;12585:24;12603:4;12585:9;:24::i;:::-;12559:50;;12620:33;12637:15;12620:16;:33::i;:::-;12456:205;12425:236::o;17447:234::-;1584:12;:10;:12::i;:::-;1574:22;;:6;;;;;;;;;;:22;;;1566:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17564:9:::1;17560:114;17583:8;;:15;;17579:1;:19;17560:114;;;17654:8;17620:18;:31;17639:8;;17648:1;17639:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;17620:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;17600:3;;;;;:::i;:::-;;;;17560:114;;;;17447:234:::0;;;:::o;7473:184::-;7590:7;7622:11;:18;7634:5;7622:18;;;;;;;;;;;;;;;:27;7641:7;7622:27;;;;;;;;;;;;;;;;7615:34;;7473:184;;;;:::o;1819:244::-;1584:12;:10;:12::i;:::-;1574:22;;:6;;;;;;;;;;:22;;;1566:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1928:1:::1;1908:22;;:8;:22;;::::0;1900:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2018:8;1989:38;;2010:6;::::0;::::1;;;;;;;;1989:38;;;;;;;;;;;;2047:8;2038:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1819:244:::0;:::o;195:98::-;248:7;275:10;268:17;;195:98;:::o;9011:369::-;9155:1;9138:19;;:5;:19;;;9130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9236:1;9217:21;;:7;:21;;;9209:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9318:6;9288:11;:18;9300:5;9288:18;;;;;;;;;;;;;;;:27;9307:7;9288:27;;;;;;;;;;;;;;;:36;;;;9356:7;9340:32;;9349:5;9340:32;;;9365:6;9340:32;;;;;;:::i;:::-;;;;;;;;9011:369;;;:::o;9389:2256::-;9527:1;9511:18;;:4;:18;;;9503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9604:1;9590:16;;:2;:16;;;9582:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9674:1;9665:6;:10;9657:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9747:7;:5;:7::i;:::-;9739:15;;:4;:15;;;;:32;;;;;9764:7;:5;:7::i;:::-;9758:13;;:2;:13;;;;9739:32;9735:1178;;;9829:11;;;;;;;;;;;9824:144;;9877:7;:5;:7::i;:::-;9869:15;;:4;:15;;;9861:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;9824:144;10003:12;;9993:6;:22;;9985:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;10075:13;;;;;;;;;;;10069:19;;:2;:19;;;10066:146;;10142:14;;10133:6;10117:13;10127:2;10117:9;:13::i;:::-;:22;;;;:::i;:::-;:39;10109:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;10066:146;10229:28;10260:24;10278:4;10260:9;:24::i;:::-;10229:55;;10299:12;10338:19;;10314:20;:43;;10299:58;;10402:12;;10378:20;:36;10375:124;;10471:12;;10448:35;;10375:124;10520:7;:18;;;;;10532:6;;;;;;;;;;10531:7;10520:18;:43;;;;;10550:13;;;;;;;;;;;10542:21;;:4;:21;;;;10520:43;:58;;;;;10567:11;;;;;;;;;;;10520:58;:87;;;;;10583:18;:24;10602:4;10583:24;;;;;;;;;;;;;;;;;;;;;;;;;10582:25;10520:87;:114;;;;;10612:18;:22;10631:2;10612:22;;;;;;;;;;;;;;;;;;;;;;;;;10611:23;10520:114;10516:386;;;10655:38;10672:20;10655:16;:38::i;:::-;10712:26;10741:21;10712:50;;10806:1;10785:18;:22;10781:106;;;10832:35;10845:21;10832:12;:35::i;:::-;10781:106;10636:266;10516:386;9773:1140;;9735:1178;10926:12;10941:4;10926:19;;10991:18;:24;11010:4;10991:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;11019:18;:22;11038:2;11019:22;;;;;;;;;;;;;;;;;;;;;;;;;10991:50;10990:102;;;;11055:13;;;;;;;;;;;11047:21;;:4;:21;;;;:44;;;;;11078:13;;;;;;;;;;;11072:19;;:2;:19;;;;11047:44;10990:102;10986:597;;;11119:5;11109:15;;10986:597;;;11203:13;;;;;;;;;;;11195:21;;:4;:21;;;:55;;;;;11234:15;;;;;;;;;;;11220:30;;:2;:30;;;;11195:55;11192:162;;;11283:14;;11271:9;:26;;;;11326:12;;11316:7;:22;;;;11192:162;11414:13;;;;;;;;;;;11408:19;;:2;:19;;;:55;;;;;11447:15;;;;;;;;;;;11431:32;;:4;:32;;;;11408:55;11404:165;;;11496:15;;11484:9;:27;;;;11540:13;;11530:7;:23;;;;11404:165;10986:597;11596:41;11611:4;11617:2;11621:6;11629:7;11596:14;:41::i;:::-;9492:2153;9389:2256;;;:::o;2431:224::-;2551:7;2584:1;2579;:6;;2587:12;2571:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2611:9;2627:1;2623;:5;;;;:::i;:::-;2611:17;;2646:1;2639:8;;;2431:224;;;;;:::o;12146:160::-;12203:19;;;;;;;;;;;:28;;:43;12232:13;12243:1;12232:6;:10;;:13;;;;:::i;:::-;12203:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12257:17;;;;;;;;;;;:26;;:41;12284:13;12295:1;12284:6;:10;;:13;;;;:::i;:::-;12257:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12146:160;:::o;8323:323::-;8418:7;8476;;8465;:18;;8443:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;8564:19;8586:10;:8;:10::i;:::-;8564:32;;8614:24;8626:11;8614:7;:11;;:24;;;;:::i;:::-;8607:31;;;8323:323;;;:::o;11654:483::-;6026:4;6017:6;;:13;;;;;;;;;;;;;;;;;;11732:21:::1;11770:1;11756:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11732:40;;11801:4;11783;11788:1;11783:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;11827:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11817:4;11822:1;11817:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;11860:62;11877:4;11892:15;;;;;;;;;;;11910:11;11860:8;:62::i;:::-;11933:15;;;;;;;;;;;:66;;;12014:11;12040:1;12056:4;12083;12103:15;11933:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11721:416;6062:5:::0;6053:6;;:14;;;;;;;;;;;;;;;;;;11654:483;:::o;12914:282::-;13070:7;13065:28;;13079:14;:12;:14::i;:::-;13065:28;13104:44;13122:6;13130:9;13141:6;13104:17;:44::i;:::-;13164:7;13159:29;;13173:15;:13;:15::i;:::-;13159:29;12914:282;;;;:::o;2919:132::-;2977:7;3004:39;3008:1;3011;3004:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2997:46;;2919:132;;;;:::o;15892:167::-;15934:7;15955:15;15972;15991:19;:17;:19::i;:::-;15954:56;;;;16031:20;16043:7;16031;:11;;:20;;;;:::i;:::-;16024:27;;;;15892:167;:::o;8655:221::-;8715:1;8702:9;;:14;:30;;;;;8731:1;8720:7;;:12;8702:30;8734:7;8698:43;8774:9;;8754:17;:29;;;;8812:7;;8794:15;:25;;;;8845:1;8833:9;:13;;;;8867:1;8857:7;:11;;;;8655:221;:::o;13205:610::-;13352:15;13382:23;13420:12;13447:23;13485:12;13512:13;13539:19;13550:7;13539:10;:19::i;:::-;13337:221;;;;;;;;;;;;13587:28;13607:7;13587;:15;13595:6;13587:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;13569:7;:15;13577:6;13569:15;;;;;;;;;;;;;;;:46;;;;13647:39;13670:15;13647:7;:18;13655:9;13647:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;13626:7;:18;13634:9;13626:18;;;;;;;;;;;;;;;:60;;;;13697:16;13707:5;13697:9;:16::i;:::-;13724:23;13736:4;13742;13724:11;:23::i;:::-;13780:9;13763:44;;13772:6;13763:44;;;13791:15;13763:44;;;;;;:::i;:::-;;;;;;;;13326:489;;;;;;13205:610;;;:::o;8885:117::-;8941:17;;8929:9;:29;;;;8979:15;;8969:7;:25;;;;8885:117::o;3060:223::-;3180:7;3212:1;3208;:5;3215:12;3200:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3239:9;3255:1;3251;:5;;;;:::i;:::-;3239:17;;3274:1;3267:8;;;3060:223;;;;;:::o;16068:260::-;16119:7;16128;16148:15;16166:7;;16148:25;;16184:15;4734;16184:25;;16234:20;4734:15;16234:7;;:11;;:20;;;;:::i;:::-;16224:7;:30;16220:61;;;16264:7;;4734:15;16256:25;;;;;;;;16220:61;16303:7;16312;16295:25;;;;;;16068:260;;;:::o;14238:618::-;14338:7;14360;14382;14404;14426;14448;14484:23;14509:12;14523:13;14553:40;14565:7;14574:9;;14585:7;;14553:11;:40::i;:::-;14483:110;;;;;;14604:19;14626:10;:8;:10::i;:::-;14604:32;;14648:15;14665:23;14690:12;14719:46;14731:7;14740:4;14746:5;14753:11;14719;:46::i;:::-;14647:118;;;;;;14787:7;14796:15;14813:4;14819:15;14836:4;14842:5;14779:69;;;;;;;;;;;;;;;;;;;14238:618;;;;;;;:::o;2286:136::-;2344:7;2371:43;2375:1;2378;2371:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2364:50;;2286:136;;;;:::o;2098:179::-;2156:7;2176:9;2192:1;2188;:5;;;;:::i;:::-;2176:17;;2217:1;2212;:6;;2204:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2268:1;2261:8;;;2098:179;;;;:::o;13824:211::-;13877:19;13899:10;:8;:10::i;:::-;13877:32;;13920:13;13936:22;13946:11;13936:5;:9;;:22;;;;:::i;:::-;13920:38;;13994:33;14021:5;13994:7;:22;14010:4;13994:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;13969:7;:22;13985:4;13969:22;;;;;;;;;;;;;;;:58;;;;13866:169;;13824:211;:::o;14044:147::-;14122:17;14134:4;14122:7;;:11;;:17;;;;:::i;:::-;14112:7;:27;;;;14163:20;14178:4;14163:10;;:14;;:20;;;;:::i;:::-;14150:10;:33;;;;14044:147;;:::o;14865:472::-;15034:7;15056;15078;15113:12;15128:30;15154:3;15128:21;15140:8;15128:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;15113:45;;15169:13;15185:28;15209:3;15185:19;15197:6;15185:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;15169:44;;15224:23;15250:28;15272:5;15250:17;15262:4;15250:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;15224:54;;15300:15;15317:4;15323:5;15292:37;;;;;;;;;14865:472;;;;;;;:::o;15346:537::-;15540:7;15562;15584;15619:15;15637:24;15649:11;15637:7;:11;;:24;;;;:::i;:::-;15619:42;;15672:12;15687:21;15696:11;15687:4;:8;;:21;;;;:::i;:::-;15672:36;;15719:13;15735:22;15745:11;15735:5;:9;;:22;;;;:::i;:::-;15719:38;;15768:23;15794:28;15816:5;15794:17;15806:4;15794:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;15768:54;;15844:7;15853:15;15870:4;15836:39;;;;;;;;;;15346:537;;;;;;;;:::o;2664:246::-;2722:7;2751:1;2746;:6;2742:47;;2776:1;2769:8;;;;2742:47;2799:9;2815:1;2811;:5;;;;:::i;:::-;2799:17;;2844:1;2839;2835;:5;;;;:::i;:::-;:10;2827:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2901:1;2894:8;;;2664:246;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:118::-;5913:24;5931:5;5913:24;:::i;:::-;5908:3;5901:37;5826:118;;:::o;5950:222::-;6043:4;6081:2;6070:9;6066:18;6058:26;;6094:71;6162:1;6151:9;6147:17;6138:6;6094:71;:::i;:::-;5950:222;;;;:::o;6178:116::-;6248:21;6263:5;6248:21;:::i;:::-;6241:5;6238:32;6228:60;;6284:1;6281;6274:12;6228:60;6178:116;:::o;6300:133::-;6343:5;6381:6;6368:20;6359:29;;6397:30;6421:5;6397:30;:::i;:::-;6300:133;;;;:::o;6439:323::-;6495:6;6544:2;6532:9;6523:7;6519:23;6515:32;6512:119;;;6550:79;;:::i;:::-;6512:119;6670:1;6695:50;6737:7;6728:6;6717:9;6713:22;6695:50;:::i;:::-;6685:60;;6641:114;6439:323;;;;:::o;6768:329::-;6827:6;6876:2;6864:9;6855:7;6851:23;6847:32;6844:119;;;6882:79;;:::i;:::-;6844:119;7002:1;7027:53;7072:7;7063:6;7052:9;7048:22;7027:53;:::i;:::-;7017:63;;6973:117;6768:329;;;;:::o;7103:765::-;7189:6;7197;7205;7213;7262:3;7250:9;7241:7;7237:23;7233:33;7230:120;;;7269:79;;:::i;:::-;7230:120;7389:1;7414:53;7459:7;7450:6;7439:9;7435:22;7414:53;:::i;:::-;7404:63;;7360:117;7516:2;7542:53;7587:7;7578:6;7567:9;7563:22;7542:53;:::i;:::-;7532:63;;7487:118;7644:2;7670:53;7715:7;7706:6;7695:9;7691:22;7670:53;:::i;:::-;7660:63;;7615:118;7772:2;7798:53;7843:7;7834:6;7823:9;7819:22;7798:53;:::i;:::-;7788:63;;7743:118;7103:765;;;;;;;:::o;7874:329::-;7933:6;7982:2;7970:9;7961:7;7957:23;7953:32;7950:119;;;7988:79;;:::i;:::-;7950:119;8108:1;8133:53;8178:7;8169:6;8158:9;8154:22;8133:53;:::i;:::-;8123:63;;8079:117;7874:329;;;;:::o;8209:117::-;8318:1;8315;8308:12;8332:117;8441:1;8438;8431:12;8455:117;8564:1;8561;8554:12;8595:568;8668:8;8678:6;8728:3;8721:4;8713:6;8709:17;8705:27;8695:122;;8736:79;;:::i;:::-;8695:122;8849:6;8836:20;8826:30;;8879:18;8871:6;8868:30;8865:117;;;8901:79;;:::i;:::-;8865:117;9015:4;9007:6;9003:17;8991:29;;9069:3;9061:4;9053:6;9049:17;9039:8;9035:32;9032:41;9029:128;;;9076:79;;:::i;:::-;9029:128;8595:568;;;;;:::o;9169:698::-;9261:6;9269;9277;9326:2;9314:9;9305:7;9301:23;9297:32;9294:119;;;9332:79;;:::i;:::-;9294:119;9480:1;9469:9;9465:17;9452:31;9510:18;9502:6;9499:30;9496:117;;;9532:79;;:::i;:::-;9496:117;9645:80;9717:7;9708:6;9697:9;9693:22;9645:80;:::i;:::-;9627:98;;;;9423:312;9774:2;9800:50;9842:7;9833:6;9822:9;9818:22;9800:50;:::i;:::-;9790:60;;9745:115;9169:698;;;;;:::o;9873:474::-;9941:6;9949;9998:2;9986:9;9977:7;9973:23;9969:32;9966:119;;;10004:79;;:::i;:::-;9966:119;10124:1;10149:53;10194:7;10185:6;10174:9;10170:22;10149:53;:::i;:::-;10139:63;;10095:117;10251:2;10277:53;10322:7;10313:6;10302:9;10298:22;10277:53;:::i;:::-;10267:63;;10222:118;9873:474;;;;;:::o;10353:182::-;10493:34;10489:1;10481:6;10477:14;10470:58;10353:182;:::o;10541:366::-;10683:3;10704:67;10768:2;10763:3;10704:67;:::i;:::-;10697:74;;10780:93;10869:3;10780:93;:::i;:::-;10898:2;10893:3;10889:12;10882:19;;10541:366;;;:::o;10913:419::-;11079:4;11117:2;11106:9;11102:18;11094:26;;11166:9;11160:4;11156:20;11152:1;11141:9;11137:17;11130:47;11194:131;11320:4;11194:131;:::i;:::-;11186:139;;10913:419;;;:::o;11338:180::-;11386:77;11383:1;11376:88;11483:4;11480:1;11473:15;11507:4;11504:1;11497:15;11524:191;11564:3;11583:20;11601:1;11583:20;:::i;:::-;11578:25;;11617:20;11635:1;11617:20;:::i;:::-;11612:25;;11660:1;11657;11653:9;11646:16;;11681:3;11678:1;11675:10;11672:36;;;11688:18;;:::i;:::-;11672:36;11524:191;;;;:::o;11721:177::-;11861:29;11857:1;11849:6;11845:14;11838:53;11721:177;:::o;11904:366::-;12046:3;12067:67;12131:2;12126:3;12067:67;:::i;:::-;12060:74;;12143:93;12232:3;12143:93;:::i;:::-;12261:2;12256:3;12252:12;12245:19;;11904:366;;;:::o;12276:419::-;12442:4;12480:2;12469:9;12465:18;12457:26;;12529:9;12523:4;12519:20;12515:1;12504:9;12500:17;12493:47;12557:131;12683:4;12557:131;:::i;:::-;12549:139;;12276:419;;;:::o;12701:180::-;12749:77;12746:1;12739:88;12846:4;12843:1;12836:15;12870:4;12867:1;12860:15;12887:233;12926:3;12949:24;12967:5;12949:24;:::i;:::-;12940:33;;12995:66;12988:5;12985:77;12982:103;;13065:18;;:::i;:::-;12982:103;13112:1;13105:5;13101:13;13094:20;;12887:233;;;:::o;13126:225::-;13266:34;13262:1;13254:6;13250:14;13243:58;13335:8;13330:2;13322:6;13318:15;13311:33;13126:225;:::o;13357:366::-;13499:3;13520:67;13584:2;13579:3;13520:67;:::i;:::-;13513:74;;13596:93;13685:3;13596:93;:::i;:::-;13714:2;13709:3;13705:12;13698:19;;13357:366;;;:::o;13729:419::-;13895:4;13933:2;13922:9;13918:18;13910:26;;13982:9;13976:4;13972:20;13968:1;13957:9;13953:17;13946:47;14010:131;14136:4;14010:131;:::i;:::-;14002:139;;13729:419;;;:::o;14154:223::-;14294:34;14290:1;14282:6;14278:14;14271:58;14363:6;14358:2;14350:6;14346:15;14339:31;14154:223;:::o;14383:366::-;14525:3;14546:67;14610:2;14605:3;14546:67;:::i;:::-;14539:74;;14622:93;14711:3;14622:93;:::i;:::-;14740:2;14735:3;14731:12;14724:19;;14383:366;;;:::o;14755:419::-;14921:4;14959:2;14948:9;14944:18;14936:26;;15008:9;15002:4;14998:20;14994:1;14983:9;14979:17;14972:47;15036:131;15162:4;15036:131;:::i;:::-;15028:139;;14755:419;;;:::o;15180:221::-;15320:34;15316:1;15308:6;15304:14;15297:58;15389:4;15384:2;15376:6;15372:15;15365:29;15180:221;:::o;15407:366::-;15549:3;15570:67;15634:2;15629:3;15570:67;:::i;:::-;15563:74;;15646:93;15735:3;15646:93;:::i;:::-;15764:2;15759:3;15755:12;15748:19;;15407:366;;;:::o;15779:419::-;15945:4;15983:2;15972:9;15968:18;15960:26;;16032:9;16026:4;16022:20;16018:1;16007:9;16003:17;15996:47;16060:131;16186:4;16060:131;:::i;:::-;16052:139;;15779:419;;;:::o;16204:224::-;16344:34;16340:1;16332:6;16328:14;16321:58;16413:7;16408:2;16400:6;16396:15;16389:32;16204:224;:::o;16434:366::-;16576:3;16597:67;16661:2;16656:3;16597:67;:::i;:::-;16590:74;;16673:93;16762:3;16673:93;:::i;:::-;16791:2;16786:3;16782:12;16775:19;;16434:366;;;:::o;16806:419::-;16972:4;17010:2;16999:9;16995:18;16987:26;;17059:9;17053:4;17049:20;17045:1;17034:9;17030:17;17023:47;17087:131;17213:4;17087:131;:::i;:::-;17079:139;;16806:419;;;:::o;17231:222::-;17371:34;17367:1;17359:6;17355:14;17348:58;17440:5;17435:2;17427:6;17423:15;17416:30;17231:222;:::o;17459:366::-;17601:3;17622:67;17686:2;17681:3;17622:67;:::i;:::-;17615:74;;17698:93;17787:3;17698:93;:::i;:::-;17816:2;17811:3;17807:12;17800:19;;17459:366;;;:::o;17831:419::-;17997:4;18035:2;18024:9;18020:18;18012:26;;18084:9;18078:4;18074:20;18070:1;18059:9;18055:17;18048:47;18112:131;18238:4;18112:131;:::i;:::-;18104:139;;17831:419;;;:::o;18256:228::-;18396:34;18392:1;18384:6;18380:14;18373:58;18465:11;18460:2;18452:6;18448:15;18441:36;18256:228;:::o;18490:366::-;18632:3;18653:67;18717:2;18712:3;18653:67;:::i;:::-;18646:74;;18729:93;18818:3;18729:93;:::i;:::-;18847:2;18842:3;18838:12;18831:19;;18490:366;;;:::o;18862:419::-;19028:4;19066:2;19055:9;19051:18;19043:26;;19115:9;19109:4;19105:20;19101:1;19090:9;19086:17;19079:47;19143:131;19269:4;19143:131;:::i;:::-;19135:139;;18862:419;;;:::o;19287:250::-;19427:34;19423:1;19415:6;19411:14;19404:58;19496:33;19491:2;19483:6;19479:15;19472:58;19287:250;:::o;19543:366::-;19685:3;19706:67;19770:2;19765:3;19706:67;:::i;:::-;19699:74;;19782:93;19871:3;19782:93;:::i;:::-;19900:2;19895:3;19891:12;19884:19;;19543:366;;;:::o;19915:419::-;20081:4;20119:2;20108:9;20104:18;20096:26;;20168:9;20162:4;20158:20;20154:1;20143:9;20139:17;20132:47;20196:131;20322:4;20196:131;:::i;:::-;20188:139;;19915:419;;;:::o;20340:178::-;20480:30;20476:1;20468:6;20464:14;20457:54;20340:178;:::o;20524:366::-;20666:3;20687:67;20751:2;20746:3;20687:67;:::i;:::-;20680:74;;20763:93;20852:3;20763:93;:::i;:::-;20881:2;20876:3;20872:12;20865:19;;20524:366;;;:::o;20896:419::-;21062:4;21100:2;21089:9;21085:18;21077:26;;21149:9;21143:4;21139:20;21135:1;21124:9;21120:17;21113:47;21177:131;21303:4;21177:131;:::i;:::-;21169:139;;20896:419;;;:::o;21321:222::-;21461:34;21457:1;21449:6;21445:14;21438:58;21530:5;21525:2;21517:6;21513:15;21506:30;21321:222;:::o;21549:366::-;21691:3;21712:67;21776:2;21771:3;21712:67;:::i;:::-;21705:74;;21788:93;21877:3;21788:93;:::i;:::-;21906:2;21901:3;21897:12;21890:19;;21549:366;;;:::o;21921:419::-;22087:4;22125:2;22114:9;22110:18;22102:26;;22174:9;22168:4;22164:20;22160:1;22149:9;22145:17;22138:47;22202:131;22328:4;22202:131;:::i;:::-;22194:139;;21921:419;;;:::o;22346:194::-;22386:4;22406:20;22424:1;22406:20;:::i;:::-;22401:25;;22440:20;22458:1;22440:20;:::i;:::-;22435:25;;22484:1;22481;22477:9;22469:17;;22508:1;22502:4;22499:11;22496:37;;;22513:18;;:::i;:::-;22496:37;22346:194;;;;:::o;22546:229::-;22686:34;22682:1;22674:6;22670:14;22663:58;22755:12;22750:2;22742:6;22738:15;22731:37;22546:229;:::o;22781:366::-;22923:3;22944:67;23008:2;23003:3;22944:67;:::i;:::-;22937:74;;23020:93;23109:3;23020:93;:::i;:::-;23138:2;23133:3;23129:12;23122:19;;22781:366;;;:::o;23153:419::-;23319:4;23357:2;23346:9;23342:18;23334:26;;23406:9;23400:4;23396:20;23392:1;23381:9;23377:17;23370:47;23434:131;23560:4;23434:131;:::i;:::-;23426:139;;23153:419;;;:::o;23578:180::-;23626:77;23623:1;23616:88;23723:4;23720:1;23713:15;23747:4;23744:1;23737:15;23764:143;23821:5;23852:6;23846:13;23837:22;;23868:33;23895:5;23868:33;:::i;:::-;23764:143;;;;:::o;23913:351::-;23983:6;24032:2;24020:9;24011:7;24007:23;24003:32;24000:119;;;24038:79;;:::i;:::-;24000:119;24158:1;24183:64;24239:7;24230:6;24219:9;24215:22;24183:64;:::i;:::-;24173:74;;24129:128;23913:351;;;;:::o;24270:85::-;24315:7;24344:5;24333:16;;24270:85;;;:::o;24361:158::-;24419:9;24452:61;24470:42;24479:32;24505:5;24479:32;:::i;:::-;24470:42;:::i;:::-;24452:61;:::i;:::-;24439:74;;24361:158;;;:::o;24525:147::-;24620:45;24659:5;24620:45;:::i;:::-;24615:3;24608:58;24525:147;;:::o;24678:114::-;24745:6;24779:5;24773:12;24763:22;;24678:114;;;:::o;24798:184::-;24897:11;24931:6;24926:3;24919:19;24971:4;24966:3;24962:14;24947:29;;24798:184;;;;:::o;24988:132::-;25055:4;25078:3;25070:11;;25108:4;25103:3;25099:14;25091:22;;24988:132;;;:::o;25126:108::-;25203:24;25221:5;25203:24;:::i;:::-;25198:3;25191:37;25126:108;;:::o;25240:179::-;25309:10;25330:46;25372:3;25364:6;25330:46;:::i;:::-;25408:4;25403:3;25399:14;25385:28;;25240:179;;;;:::o;25425:113::-;25495:4;25527;25522:3;25518:14;25510:22;;25425:113;;;:::o;25574:732::-;25693:3;25722:54;25770:5;25722:54;:::i;:::-;25792:86;25871:6;25866:3;25792:86;:::i;:::-;25785:93;;25902:56;25952:5;25902:56;:::i;:::-;25981:7;26012:1;25997:284;26022:6;26019:1;26016:13;25997:284;;;26098:6;26092:13;26125:63;26184:3;26169:13;26125:63;:::i;:::-;26118:70;;26211:60;26264:6;26211:60;:::i;:::-;26201:70;;26057:224;26044:1;26041;26037:9;26032:14;;25997:284;;;26001:14;26297:3;26290:10;;25698:608;;;25574:732;;;;:::o;26312:831::-;26575:4;26613:3;26602:9;26598:19;26590:27;;26627:71;26695:1;26684:9;26680:17;26671:6;26627:71;:::i;:::-;26708:80;26784:2;26773:9;26769:18;26760:6;26708:80;:::i;:::-;26835:9;26829:4;26825:20;26820:2;26809:9;26805:18;26798:48;26863:108;26966:4;26957:6;26863:108;:::i;:::-;26855:116;;26981:72;27049:2;27038:9;27034:18;27025:6;26981:72;:::i;:::-;27063:73;27131:3;27120:9;27116:19;27107:6;27063:73;:::i;:::-;26312:831;;;;;;;;:::o;27149:180::-;27197:77;27194:1;27187:88;27294:4;27291:1;27284:15;27318:4;27315:1;27308:15;27335:185;27375:1;27392:20;27410:1;27392:20;:::i;:::-;27387:25;;27426:20;27444:1;27426:20;:::i;:::-;27421:25;;27465:1;27455:35;;27470:18;;:::i;:::-;27455:35;27512:1;27509;27505:9;27500:14;;27335:185;;;;:::o;27526:177::-;27666:29;27662:1;27654:6;27650:14;27643:53;27526:177;:::o;27709:366::-;27851:3;27872:67;27936:2;27931:3;27872:67;:::i;:::-;27865:74;;27948:93;28037:3;27948:93;:::i;:::-;28066:2;28061:3;28057:12;28050:19;;27709:366;;;:::o;28081:419::-;28247:4;28285:2;28274:9;28270:18;28262:26;;28334:9;28328:4;28324:20;28320:1;28309:9;28305:17;28298:47;28362:131;28488:4;28362:131;:::i;:::-;28354:139;;28081:419;;;:::o;28506:410::-;28546:7;28569:20;28587:1;28569:20;:::i;:::-;28564:25;;28603:20;28621:1;28603:20;:::i;:::-;28598:25;;28658:1;28655;28651:9;28680:30;28698:11;28680:30;:::i;:::-;28669:41;;28859:1;28850:7;28846:15;28843:1;28840:22;28820:1;28813:9;28793:83;28770:139;;28889:18;;:::i;:::-;28770:139;28554:362;28506:410;;;;:::o;28922:220::-;29062:34;29058:1;29050:6;29046:14;29039:58;29131:3;29126:2;29118:6;29114:15;29107:28;28922:220;:::o;29148:366::-;29290:3;29311:67;29375:2;29370:3;29311:67;:::i;:::-;29304:74;;29387:93;29476:3;29387:93;:::i;:::-;29505:2;29500:3;29496:12;29489:19;;29148:366;;;:::o;29520:419::-;29686:4;29724:2;29713:9;29709:18;29701:26;;29773:9;29767:4;29763:20;29759:1;29748:9;29744:17;29737:47;29801:131;29927:4;29801:131;:::i;:::-;29793:139;;29520:419;;;:::o

Swarm Source

ipfs://e77ccb7b61655cecf0b5e5dec19ea7519830e1044d20b3047874925d45243a24
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.