ETH Price: $1,905.53 (-0.51%)

Contract

0x7772C979BFb8beb4Cc2CA4ac22eB24aFfE204869
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve207212432024-09-10 15:56:47204 days ago1725983807IN
0x7772C979...FfE204869
0 ETH0.0013660229.30011156
Claim Stuck Toke...207206622024-09-10 13:59:35204 days ago1725976775IN
0x7772C979...FfE204869
0 ETH0.0004510214.64127326
Update Fees207204222024-09-10 13:10:23204 days ago1725973823IN
0x7772C979...FfE204869
0 ETH0.000303487.08788279
Set Enable Max W...207203442024-09-10 12:54:35204 days ago1725972875IN
0x7772C979...FfE204869
0 ETH0.000184917.32754389
Approve207203382024-09-10 12:53:23204 days ago1725972803IN
0x7772C979...FfE204869
0 ETH0.000396298.55291425
Approve207203342024-09-10 12:52:35204 days ago1725972755IN
0x7772C979...FfE204869
0 ETH0.000396288.55272921
Approve207203312024-09-10 12:51:59204 days ago1725972719IN
0x7772C979...FfE204869
0 ETH0.000387248.31682059
Set Swap Tokens ...207203282024-09-10 12:51:23204 days ago1725972683IN
0x7772C979...FfE204869
0 ETH0.000279238.04620804
Approve207203192024-09-10 12:49:35204 days ago1725972575IN
0x7772C979...FfE204869
0 ETH0.000412978.86937307
Approve207203112024-09-10 12:47:59204 days ago1725972479IN
0x7772C979...FfE204869
0 ETH0.000447419.59663658
Approve207203082024-09-10 12:47:23204 days ago1725972443IN
0x7772C979...FfE204869
0 ETH0.00041779.01501295
Approve207203082024-09-10 12:47:23204 days ago1725972443IN
0x7772C979...FfE204869
0 ETH0.00041779.01501295
Approve207203072024-09-10 12:47:11204 days ago1725972431IN
0x7772C979...FfE204869
0 ETH0.000376118.07777936
Approve207203062024-09-10 12:46:59204 days ago1725972419IN
0x7772C979...FfE204869
0 ETH0.0005734212.29940937
Approve207203042024-09-10 12:46:35204 days ago1725972395IN
0x7772C979...FfE204869
0 ETH0.0006278113.46598937
Approve207203032024-09-10 12:46:23204 days ago1725972383IN
0x7772C979...FfE204869
0 ETH0.000396428.55590332
Approve207203032024-09-10 12:46:23204 days ago1725972383IN
0x7772C979...FfE204869
0 ETH0.000396428.55590332
Approve207203012024-09-10 12:45:59204 days ago1725972359IN
0x7772C979...FfE204869
0 ETH0.000481610.33005293
Approve207203012024-09-10 12:45:59204 days ago1725972359IN
0x7772C979...FfE204869
0 ETH0.0005748512.33005293
Approve207202992024-09-10 12:45:35204 days ago1725972335IN
0x7772C979...FfE204869
0 ETH0.000403568.70981831
Approve207202992024-09-10 12:45:35204 days ago1725972335IN
0x7772C979...FfE204869
0 ETH0.000403568.70981831
Approve207202972024-09-10 12:44:59204 days ago1725972299IN
0x7772C979...FfE204869
0 ETH0.000596712.85494489
Approve207202952024-09-10 12:44:35204 days ago1725972275IN
0x7772C979...FfE204869
0 ETH0.00040448.72803856
Approve207202952024-09-10 12:44:35204 days ago1725972275IN
0x7772C979...FfE204869
0 ETH0.00040448.72803856
Approve207202952024-09-10 12:44:35204 days ago1725972275IN
0x7772C979...FfE204869
0 ETH0.0004768510.22803856
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer207206622024-09-10 13:59:35204 days ago1725976775
0x7772C979...FfE204869
0.08089315 ETH
Transfer207204322024-09-10 13:12:23204 days ago1725973943
0x7772C979...FfE204869
0.02213836 ETH
Transfer207204322024-09-10 13:12:23204 days ago1725973943
0x7772C979...FfE204869
0.02656603 ETH
Transfer207204072024-09-10 13:07:23204 days ago1725973643
0x7772C979...FfE204869
0.0271947 ETH
Transfer207204072024-09-10 13:07:23204 days ago1725973643
0x7772C979...FfE204869
0.02828249 ETH
Transfer207203532024-09-10 12:56:23204 days ago1725972983
0x7772C979...FfE204869
0.02813158 ETH
Transfer207203532024-09-10 12:56:23204 days ago1725972983
0x7772C979...FfE204869
0.02925685 ETH
Transfer207203502024-09-10 12:55:47204 days ago1725972947
0x7772C979...FfE204869
0.03016143 ETH
Transfer207203502024-09-10 12:55:47204 days ago1725972947
0x7772C979...FfE204869
0.03136789 ETH
Transfer207203502024-09-10 12:55:47204 days ago1725972947
0x7772C979...FfE204869
0.03199167 ETH
Transfer207203502024-09-10 12:55:47204 days ago1725972947
0x7772C979...FfE204869
0.03327134 ETH
Transfer207203462024-09-10 12:54:59204 days ago1725972899
0x7772C979...FfE204869
0.03199167 ETH
Transfer207203462024-09-10 12:54:59204 days ago1725972899
0x7772C979...FfE204869
0.03327134 ETH
Transfer207203412024-09-10 12:53:59204 days ago1725972839
0x7772C979...FfE204869
0.03363881 ETH
Transfer207203412024-09-10 12:53:59204 days ago1725972839
0x7772C979...FfE204869
0.03498436 ETH
Transfer207203382024-09-10 12:53:23204 days ago1725972803
0x7772C979...FfE204869
0.03505295 ETH
Transfer207203382024-09-10 12:53:23204 days ago1725972803
0x7772C979...FfE204869
0.03645506 ETH
Transfer207203372024-09-10 12:53:11204 days ago1725972791
0x7772C979...FfE204869
0.03505295 ETH
Transfer207203372024-09-10 12:53:11204 days ago1725972791
0x7772C979...FfE204869
0.03645506 ETH
Transfer207203372024-09-10 12:53:11204 days ago1725972791
0x7772C979...FfE204869
0.03842519 ETH
Transfer207203372024-09-10 12:53:11204 days ago1725972791
0x7772C979...FfE204869
0.03996219 ETH
Transfer207203372024-09-10 12:53:11204 days ago1725972791
0x7772C979...FfE204869
0.04120924 ETH
Transfer207203372024-09-10 12:53:11204 days ago1725972791
0x7772C979...FfE204869
0.04285761 ETH
Transfer207203352024-09-10 12:52:47204 days ago1725972767
0x7772C979...FfE204869
0.04373692 ETH
Transfer207203352024-09-10 12:52:47204 days ago1725972767
0x7772C979...FfE204869
0.04548639 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
eth777

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-10
*/

/*
  ______ ______ ______ 
 |____  |____  |____  |
     / /    / /    / / 
    / /    / /    / /  
   / /    / /    / /   
  /_/    /_/    /_/    

 https://777eth.fun

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.22;

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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal returns(bool){
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        return success; // always proceeds
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }
}

abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

contract eth777 is ERC20, Ownable, ReentrancyGuard {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (uint256 => address) public holderTickets;
    mapping (address => uint256) public wins;
    mapping (address => uint256) public claimTime;

    uint256 public  previousTickets;
    uint256 public  totalTickets;

    uint256 public  lastLottery;
    uint256 public  lotteryTime;

    uint256 public  feeOnBuy;
    uint256 public  feeOnSell;

    uint256 public  feeOnTransfer;
    uint256 public  totalWon;

    uint256 public  feeForFeeReceiver;

    address public  feeReceiver;
    uint256 public  SUPPLY_DIVIDER;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    bool    public swapEnabled;
    bool    public drawEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndSendFee(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);
    event Winners(address one,address two,address three,address four,address five);

    constructor () ERC20("777", "777") 
    {   
        address router;
        address pinkLock;
        
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router
            pinkLock = 0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE; // BSC PinkLock
        } else if (block.chainid == 97) {
            router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router
            pinkLock = 0x5E5b9bE5fd939c578ABE5800a90C566eeEbA44a5; // BSC Testnet PinkLock
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet
            pinkLock = 0x71B5759d73262FBb223956913ecF4ecC51057641; // ETH PinkLock
        } else {
            revert();
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        feeOnBuy  = 25;
        feeOnSell = 25;

        feeOnTransfer = 0;

        SUPPLY_DIVIDER = 1_000; // will result in 0.1%;

        lotteryTime = 15 minutes;

        feeReceiver = 0xc9062d545c23933C5173B351146b5F7e49C38c65;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[pinkLock] = true;

        maxWalletLimitEnabled = true;

        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;
        _isExcludedFromMaxWalletLimit[feeReceiver] = true;
        _isExcludedFromMaxWalletLimit[pinkLock] = true;

        _mintOnce(owner(), 777_777 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 5_000;

        maxWalletAmount = totalSupply() * 5 / 1000;

        swapEnabled = false;
    }

    receive() external payable {}

    function claimStuckTokens(address token) external onlyOwner {
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        
        IERC20(token).transfer(msg.sender, IERC20(token).balanceOf(address(this)));
    }

    function drawRandomWinner() internal nonReentrant {
        lastLottery = block.timestamp;
        uint256 newTickets = totalTickets - previousTickets;

        uint256 newWins = address(this).balance - totalWon;
        uint256 winMoney = newWins / 5;

        totalWon += newWins;

        // pseudo random, but due to min buy and claim after 1 hours without sell no issue
        uint256 rand1 = uint256(keccak256(abi.encodePacked(blockhash(block.number - 1), block.prevrandao, block.timestamp, msg.sender, totalTickets))) % (newTickets + 1);
        uint256 rand2 = uint256(keccak256(abi.encodePacked(block.prevrandao, blockhash(block.number - 1), block.timestamp, totalTickets, msg.sender))) % (newTickets + 1);
        uint256 rand3 = uint256(keccak256(abi.encodePacked(block.timestamp, block.prevrandao, msg.sender, totalTickets, blockhash(block.number - 1)))) % (newTickets + 1);
        uint256 rand4 = uint256(keccak256(abi.encodePacked(msg.sender, block.timestamp, blockhash(block.number - 1), totalTickets, block.prevrandao))) % (newTickets + 1);
        uint256 rand5 = uint256(keccak256(abi.encodePacked(totalTickets, msg.sender, block.prevrandao, block.timestamp, blockhash(block.number - 1)))) % (newTickets + 1);

        address winner1 = holderTickets[previousTickets + rand1];
        address winner2 = holderTickets[previousTickets + rand2];
        address winner3 = holderTickets[previousTickets + rand3];
        address winner4 = holderTickets[previousTickets + rand4];
        address winner5 = holderTickets[previousTickets + rand5];

        previousTickets = totalTickets;

        claimTime[winner1] = block.timestamp + 1 hours;
        wins[winner1] += winMoney;

        claimTime[winner2] = block.timestamp + 1 hours;
        wins[winner2] += winMoney;

        claimTime[winner3] = block.timestamp + 1 hours;
        wins[winner3] += winMoney;

        claimTime[winner4] = block.timestamp + 1 hours;
        wins[winner4] += winMoney;

        claimTime[winner5] = block.timestamp + 1 hours;
        wins[winner5] += winMoney;

        emit Winners(winner1, winner2, winner3, winner4, winner5);
    }

    function claimWins() external nonReentrant payable {
        require(wins[msg.sender] > 0, "You have no wins...");
        require(address(this).balance >= wins[msg.sender], "Not enough balance, try another time");
        require(block.timestamp >= claimTime[msg.sender], "You cannot claim yet.");

        uint256 toSend = wins[msg.sender];
        wins[msg.sender] = 0;
        claimTime[msg.sender] = 0;

        payable(msg.sender).sendValue(toSend);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    event UpdateFees(uint256 feeOnBuy, uint256 feeOnSell);

    function updateFees(uint256 _feeOnSell, uint256 _feeOnBuy, uint256 _feeOnTransfer, uint256 _SUPPLY_DIVIDER, uint256 _lotteryTime) external onlyOwner {
        require(_SUPPLY_DIVIDER >= 50, "Must be maximum 2% total supply");
        
        feeOnBuy = _feeOnBuy;
        feeOnSell = _feeOnSell;
        feeOnTransfer = _feeOnTransfer;
        SUPPLY_DIVIDER = _SUPPLY_DIVIDER;
        lotteryTime = _lotteryTime;

        require(feeOnBuy <= 25, "CSLT: Total Fees cannot exceed the maximum");
        require(feeOnSell <= 25, "CSLT: Total Fees cannot exceed the maximum");
        require(feeOnTransfer <= 25, "CSLT: Total Fees cannot exceed the maximum");

        emit UpdateFees(feeOnSell, feeOnBuy);
    }

    event FeeReceiverChanged(address feeReceiver);

    function changeFeeReceiver(address _feeReceiver) external onlyOwner{
        require(_feeReceiver != address(0), "CSLT: Fee receiver cannot be the zero address");
        feeReceiver = _feeReceiver;

        emit FeeReceiverChanged(feeReceiver);
    }
    
    event TradingEnabled(bool tradingEnabled);

    bool public tradingEnabled;

    function enableTrading() external onlyOwner{
        require(!tradingEnabled, "CSLT: Trading already enabled.");
        tradingEnabled = true;
        swapEnabled = true;
        drawEnabled = true;
        lastLottery = block.timestamp;

        emit TradingEnabled(tradingEnabled);
    }

    function _transfer(address from,address to,uint256 amount) internal override {
        require(from != address(0), "CSLT: transfer from the zero address");
        require(to != address(0), "CSLT: transfer to the zero address");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "CSLT: Trading not yet enabled!");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair &&
            !_isExcludedFromFees[from] &&
            swapEnabled
        ) {
            swapping = true;
            
            swapAndSendFee(swapTokensAtAmount);     

            swapping = false;
        }

        if (
            drawEnabled &&
            !swapping &&
            to == uniswapV2Pair &&
            block.timestamp > lastLottery + lotteryTime &&
            address(this).balance > 0
        ) {
            swapping = true;
            
            drawRandomWinner();    

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            if (drawEnabled && amount >= (totalSupply() / SUPPLY_DIVIDER)) {
                holderTickets[totalTickets] = to;
                totalTickets++;
            }
            _totalFees = feeOnBuy;
        } else if (to == uniswapV2Pair) {
            _totalFees =  feeOnSell;
            wins[from] = 0;
            claimTime[from] = 0;
        } else {
            _totalFees = feeOnTransfer;
            wins[from] = 0;
            claimTime[from] = 0;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        if (maxWalletLimitEnabled) 
        {
            if (!_isExcludedFromMaxWalletLimit[from] && 
                !_isExcludedFromMaxWalletLimit[to] &&
                to != uniswapV2Pair
            ) {
                uint256 balance  = balanceOf(to);
                require(
                    balance + amount <= maxWalletAmount, 
                    "MaxWallet: Recipient exceeds the maxWalletAmount"
                );
            }
        }

        super._transfer(from, to, amount);
    }

    function setSwapTokensAtAmount(uint256 newAmount, bool _swapEnabled, bool _drawEnabled) external onlyOwner{
        require(newAmount > totalSupply() / 1_000_000, "CSLT: SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;
        swapEnabled = _swapEnabled;
        drawEnabled = _drawEnabled;

        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function swapAndSendFee(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }

        uint256 newBalance = address(this).balance - initialBalance;
        uint256 tFee = (feeOnBuy + feeOnSell);
        uint256 forFeeReceiver = newBalance * (tFee) / (tFee + 2);

        if (forFeeReceiver > 0) {
            payable(feeReceiver).sendValue(forFeeReceiver);
        }

        emit SwapAndSendFee(tokenAmount, newBalance);
    }

    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    bool    public maxWalletLimitEnabled;
    uint256 public maxWalletAmount;

    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxWalletLimitAmountChanged(uint256 maxWalletAmount);

    function setEnableMaxWalletLimit(bool enable) external onlyOwner {
        require(enable != maxWalletLimitEnabled,"Max wallet limit is already set to that state");
        maxWalletLimitEnabled = enable;

        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(_maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%");
        maxWalletAmount = _maxWalletAmount * (10 ** decimals());

        emit MaxWalletLimitAmountChanged(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxWalletLimit[account] = exclude;

        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"feeReceiver","type":"address"}],"name":"FeeReceiverChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"tradingEnabled","type":"bool"}],"name":"TradingEnabled","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeOnSell","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"one","type":"address"},{"indexed":false,"internalType":"address","name":"two","type":"address"},{"indexed":false,"internalType":"address","name":"three","type":"address"},{"indexed":false,"internalType":"address","name":"four","type":"address"},{"indexed":false,"internalType":"address","name":"five","type":"address"}],"name":"Winners","type":"event"},{"inputs":[],"name":"SUPPLY_DIVIDER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_feeReceiver","type":"address"}],"name":"changeFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimWins","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"drawEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeForFeeReceiver","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeOnTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holderTickets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLottery","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousTickets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"},{"internalType":"bool","name":"_swapEnabled","type":"bool"},{"internalType":"bool","name":"_drawEnabled","type":"bool"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTickets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"inputs":[{"internalType":"uint256","name":"_feeOnSell","type":"uint256"},{"internalType":"uint256","name":"_feeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_feeOnTransfer","type":"uint256"},{"internalType":"uint256","name":"_SUPPLY_DIVIDER","type":"uint256"},{"internalType":"uint256","name":"_lotteryTime","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wins","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801562000010575f80fd5b5060408051808201825260038082526237373760e81b602080840182905284518086019095528285528401529091906200004b8382620007de565b5060046200005a8282620007de565b5050505f6200006e6200052f60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060016006555f8046603803620000fe57507310ed43c718714eb63d5aa57b78b54704e256024e905073407993575c91ce7643a4d4ccacc9a98c36ee1bbe62000187565b466061036200013a575073d99d1c33f9fc3444f8101754abc46c52416550d19050735e5b9be5fd939c578abe5800a90c566eeeba44a562000187565b46600114806200014a5750466005145b15620001835750737a250d5630b4cf539739df2c5dacb4c659f2488d90507371b5759d73262fbb223956913ecf4ecc5105764162000187565b5f80fd5b5f8290505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ef9190620008aa565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002619190620008aa565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002ac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d29190620008aa565b600780546001600160a01b038086166001600160a01b031992831681179093556008805491851691909216179055909150620003129030905f1962000533565b601960118190556012555f60138190556103e8601755610384601055601680546001600160a01b03191673c9062d545c23933c5173b351146b5f7e49c38c651790556001906009906200036d6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905560099093527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb193075003785805485166001908117909155308452828420805486168217905590871683529082208054841682179055601b80549093168117909255601a906200040c6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055308152601a9093528183208054851660019081179091557f428bdc965569ef4717764ecfd84e88946a9a226b52b813e6ab6a7f46aad86e888054861682179055601654821684528284208054861682179055908716835291208054909216179055620004d4620004b16005546001600160a01b031690565b620004bf6012600a620009e8565b620004ce90620bde31620009f8565b6200065e565b611388620004e160025490565b620004ed919062000a12565b6018556103e8620004fd60025490565b6200050a906005620009f8565b62000516919062000a12565b601c5550506019805461ff00191690555062000a489050565b3390565b6001600160a01b0383166200059b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620005fe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000592565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620006b65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000592565b8060025f828254620006c9919062000a32565b90915550506001600160a01b0382165f9081526020819052604081208054839290620006f790849062000a32565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200076957607f821691505b6020821081036200078857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007d957805f5260205f20601f840160051c81016020851015620007b55750805b601f840160051c820191505b81811015620007d6575f8155600101620007c1565b50505b505050565b81516001600160401b03811115620007fa57620007fa62000740565b62000812816200080b845462000754565b846200078e565b602080601f83116001811462000848575f8415620008305750858301515b5f19600386901b1c1916600185901b178555620008a2565b5f85815260208120601f198616915b82811015620008785788860151825594840194600190910190840162000857565b50858210156200089657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208284031215620008bb575f80fd5b81516001600160a01b0381168114620008d2575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200092d57815f1904821115620009115762000911620008d9565b808516156200091f57918102915b93841c9390800290620008f2565b509250929050565b5f826200094557506001620009e2565b816200095357505f620009e2565b81600181146200096c5760028114620009775762000997565b6001915050620009e2565b60ff8411156200098b576200098b620008d9565b50506001821b620009e2565b5060208310610133831016604e8410600b8410161715620009bc575081810a620009e2565b620009c88383620008ed565b805f1904821115620009de57620009de620008d9565b0290505b92915050565b5f620008d260ff84168362000935565b8082028115828204841417620009e257620009e2620008d9565b5f8262000a2d57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620009e257620009e2620008d9565b612c2a8062000a565f395ff3fe60806040526004361061028e575f3560e01c806370a0823111610155578063aa4bde28116100be578063d2fcc00111610078578063d2fcc001146107ad578063dd11247e146107cc578063dd62ed3e146107e1578063e2f4560514610825578063f2fde38b1461083a578063f9d0831a14610859575f80fd5b8063aa4bde281461071b578063af0b4b2714610730578063b3f0067414610745578063b3ff277d14610764578063bb8c3ee014610779578063c02466681461078e575f80fd5b80638a8c523c1161010f5780638a8c523c146106615780638da5cb5b1461067557806395d89b4114610692578063a457c2d7146106a6578063a8a69b9d146106c5578063a9059cbb146106fc575f80fd5b806370a08231146105a8578063715018a6146105dc578063740db6b8146105f05780637c08b964146105f85780638047a97a14610617578063880f7b0814610642575f80fd5b8063313ce567116101f75780634fbee193116101b15780634fbee193146104d65780635922fd361461050d5780635f5a7ab91461052c57806365048d08146105415780636ca4b712146105565780636ddd17131461058a575f80fd5b8063313ce56714610413578063395093511461042e578063457ffca21461044d57806349bd5a5e1461046c5780634ada218b1461048b5780634c443127146104ab575f80fd5b80631f41f3a8116102485780631f41f3a81461037157806321a9d82a1461038657806323b872dd1461039f5780632441238e146103be57806327a14fc2146103d35780632a6c7dba146103f4575f80fd5b806304c069601461029957806306fdde03146102c1578063095ea7b3146102e25780630fa1eeab146103115780631694505e1461032657806318160ddd1461035d575f80fd5b3661029557005b5f80fd5b3480156102a4575f80fd5b506102ae600d5481565b6040519081526020015b60405180910390f35b3480156102cc575f80fd5b506102d5610878565b6040516102b891906126d8565b3480156102ed575f80fd5b506103016102fc366004612738565b610908565b60405190151581526020016102b8565b34801561031c575f80fd5b506102ae60135481565b348015610331575f80fd5b50600754610345906001600160a01b031681565b6040516001600160a01b0390911681526020016102b8565b348015610368575f80fd5b506002546102ae565b34801561037c575f80fd5b506102ae60175481565b348015610391575f80fd5b50601b546103019060ff1681565b3480156103aa575f80fd5b506103016103b9366004612762565b61091e565b3480156103c9575f80fd5b506102ae60155481565b3480156103de575f80fd5b506103f26103ed3660046127a0565b6109d2565b005b3480156103ff575f80fd5b506103f261040e3660046127c4565b610ad8565b34801561041e575f80fd5b50604051601281526020016102b8565b348015610439575f80fd5b50610301610448366004612738565b610bb7565b348015610458575f80fd5b506103f26104673660046127e6565b610bf2565b348015610477575f80fd5b50600854610345906001600160a01b031681565b348015610496575f80fd5b50601954610301906301000000900460ff1681565b3480156104b6575f80fd5b506102ae6104c536600461281d565b600c6020525f908152604090205481565b3480156104e1575f80fd5b506103016104f036600461281d565b6001600160a01b03165f9081526009602052604090205460ff1690565b348015610518575f80fd5b506103f2610527366004612838565b610d3a565b348015610537575f80fd5b506102ae60105481565b34801561054c575f80fd5b506102ae60125481565b348015610561575f80fd5b506103456105703660046127a0565b600a6020525f90815260409020546001600160a01b031681565b348015610595575f80fd5b5060195461030190610100900460ff1681565b3480156105b3575f80fd5b506102ae6105c236600461281d565b6001600160a01b03165f9081526020819052604090205490565b3480156105e7575f80fd5b506103f2610e5d565b6103f2610ed0565b348015610603575f80fd5b506103f261061236600461281d565b611024565b348015610622575f80fd5b506102ae61063136600461281d565b600b6020525f908152604090205481565b34801561064d575f80fd5b506019546103019062010000900460ff1681565b34801561066c575f80fd5b506103f2611108565b348015610680575f80fd5b506005546001600160a01b0316610345565b34801561069d575f80fd5b506102d56111e8565b3480156106b1575f80fd5b506103016106c0366004612738565b6111f7565b3480156106d0575f80fd5b506103016106df36600461281d565b6001600160a01b03165f908152601a602052604090205460ff1690565b348015610707575f80fd5b50610301610716366004612738565b61128f565b348015610726575f80fd5b506102ae601c5481565b34801561073b575f80fd5b506102ae600f5481565b348015610750575f80fd5b50601654610345906001600160a01b031681565b34801561076f575f80fd5b506102ae60145481565b348015610784575f80fd5b506102ae60115481565b348015610799575f80fd5b506103f26107a8366004612877565b61129b565b3480156107b8575f80fd5b506103f26107c7366004612877565b611324565b3480156107d7575f80fd5b506102ae600e5481565b3480156107ec575f80fd5b506102ae6107fb3660046128ae565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610830575f80fd5b506102ae60185481565b348015610845575f80fd5b506103f261085436600461281d565b611478565b348015610864575f80fd5b506103f261087336600461281d565b611562565b606060038054610887906128da565b80601f01602080910402602001604051908101604052809291908181526020018280546108b3906128da565b80156108fe5780601f106108d5576101008083540402835291602001916108fe565b820191905f5260205f20905b8154815290600101906020018083116108e157829003601f168201915b5050505050905090565b5f610914338484611687565b5060015b92915050565b6001600160a01b0383165f9081526001602090815260408083203384529091528120545f1981146109bc57828110156109af5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6109bc8533858403611687565b6109c78585856117aa565b506001949350505050565b6005546001600160a01b031633146109fc5760405162461bcd60e51b81526004016109a690612912565b6064610a0a6012600a612a3b565b600254610a179190612a5d565b610a219190612a5d565b811015610a865760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b60648201526084016109a6565b610a926012600a612a3b565b610a9c9082612a70565b601c8190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6005546001600160a01b03163314610b025760405162461bcd60e51b81526004016109a690612912565b601b5460ff16151581151503610b705760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b60648201526084016109a6565b601b805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610acd565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610914918590610bed908690612a87565b611687565b6005546001600160a01b03163314610c1c5760405162461bcd60e51b81526004016109a690612912565b6032821015610c6d5760405162461bcd60e51b815260206004820152601f60248201527f4d757374206265206d6178696d756d20322520746f74616c20737570706c790060448201526064016109a6565b601184905560128590556013839055601782905560108190556019841115610ca75760405162461bcd60e51b81526004016109a690612a9a565b60196012541115610cca5760405162461bcd60e51b81526004016109a690612a9a565b60196013541115610ced5760405162461bcd60e51b81526004016109a690612a9a565b7f53482196ef67ac615caab1c3eca2c270acbfdcd75e57c5f24c1b98b10c8e6e04601254601154604051610d2b929190918252602082015260400190565b60405180910390a15050505050565b6005546001600160a01b03163314610d645760405162461bcd60e51b81526004016109a690612912565b620f4240610d7160025490565b610d7b9190612a5d565b8311610dfd5760405162461bcd60e51b815260206004820152604560248201527f43534c543a2053776170546f6b656e734174416d6f756e74206d75737420626560448201527f2067726561746572207468616e20302e3030303125206f6620746f74616c20736064820152647570706c7960d81b608482015260a4016109a6565b60188390556019805462ffff0019166101008415150262ff000019161762010000831515021790556040518381527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b1459060200160405180910390a1505050565b6005546001600160a01b03163314610e875760405162461bcd60e51b81526004016109a690612912565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b610ed8611ccd565b335f908152600b6020526040902054610f295760405162461bcd60e51b81526020600482015260136024820152722cb7ba903430bb32903737903bb4b73997171760691b60448201526064016109a6565b335f908152600b6020526040902054471015610f935760405162461bcd60e51b8152602060048201526024808201527f4e6f7420656e6f7567682062616c616e63652c2074727920616e6f746865722060448201526374696d6560e01b60648201526084016109a6565b335f908152600c6020526040902054421015610fe95760405162461bcd60e51b81526020600482015260156024820152742cb7ba9031b0b73737ba1031b630b4b6903cb2ba1760591b60448201526064016109a6565b335f818152600b60209081526040808320805490849055600c909252822091909155906110169082611cf7565b50506110226001600655565b565b6005546001600160a01b0316331461104e5760405162461bcd60e51b81526004016109a690612912565b6001600160a01b0381166110ba5760405162461bcd60e51b815260206004820152602d60248201527f43534c543a204665652072656365697665722063616e6e6f742062652074686560448201526c207a65726f206164647265737360981b60648201526084016109a6565b601680546001600160a01b0319166001600160a01b0383169081179091556040519081527f647672599d3468abcfa241a13c9e3d34383caadb5cc80fb67c3cdfcd5f78605990602001610acd565b6005546001600160a01b031633146111325760405162461bcd60e51b81526004016109a690612912565b6019546301000000900460ff161561118c5760405162461bcd60e51b815260206004820152601e60248201527f43534c543a2054726164696e6720616c726561647920656e61626c65642e000060448201526064016109a6565b60198054630101010063ffffff0019909116179081905542600f55604051630100000090910460ff16151581527fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9060200160405180910390a1565b606060048054610887906128da565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156112785760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109a6565b6112853385858403611687565b5060019392505050565b5f6109143384846117aa565b6005546001600160a01b031633146112c55760405162461bcd60e51b81526004016109a690612912565b6001600160a01b0382165f81815260096020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b0316331461134e5760405162461bcd60e51b81526004016109a690612912565b6001600160a01b0382165f908152601a602052604090205481151560ff9091161515036113c95760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b60648201526084016109a6565b306001600160a01b038316036114215760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e00000000000000000060448201526064016109a6565b6001600160a01b0382165f818152601a6020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101611318565b6005546001600160a01b031633146114a25760405162461bcd60e51b81526004016109a690612912565b6001600160a01b0381166115075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461158c5760405162461bcd60e51b81526004016109a690612912565b6001600160a01b0381166115a8576115a43347611cf7565b5050565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156115f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116189190612ae4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611660573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a49190612afb565b50565b6001600160a01b0383166116e95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a6565b6001600160a01b03821661174a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661180c5760405162461bcd60e51b8152602060048201526024808201527f43534c543a207472616e736665722066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a6565b6001600160a01b03821661186d5760405162461bcd60e51b815260206004820152602260248201527f43534c543a207472616e7366657220746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a6565b6019546301000000900460ff168061189c57506001600160a01b0383165f9081526009602052604090205460ff165b806118be57506001600160a01b0382165f9081526009602052604090205460ff165b61190a5760405162461bcd60e51b815260206004820152601e60248201527f43534c543a2054726164696e67206e6f742079657420656e61626c656421000060448201526064016109a6565b805f036119215761191c83835f611da1565b505050565b305f9081526020819052604090205460185481108015908190611947575060195460ff16155b801561196057506008546001600160a01b038581169116145b801561198457506001600160a01b0385165f9081526009602052604090205460ff16155b80156119975750601954610100900460ff165b156119c0576019805460ff191660011790556018546119b590611f6e565b6019805460ff191690555b60195462010000900460ff1680156119db575060195460ff16155b80156119f457506008546001600160a01b038581169116145b8015611a0e5750601054600f54611a0b9190612a87565b42115b8015611a1957505f47115b15611a3e576019805460ff19166001179055611a3361214a565b6019805460ff191690555b6001600160a01b0385165f9081526009602052604081205460ff1680611a7b57506001600160a01b0385165f9081526009602052604090205460ff165b80611a88575060195460ff165b15611a9457505f611b8a565b6008546001600160a01b0390811690871603611b1c5760195462010000900460ff168015611ad15750601754600254611acd9190612a5d565b8410155b15611b1357600e80545f908152600a6020526040812080546001600160a01b0319166001600160a01b03891617905581549190611b0d83612b16565b91905055505b50601154611b8a565b6008546001600160a01b0390811690861603611b6057506012546001600160a01b0386165f908152600b60209081526040808320839055600c909152812055611b8a565b506013546001600160a01b0386165f908152600b60209081526040808320839055600c9091528120555b8015611bc2575f6064611b9d8387612a70565b611ba79190612a5d565b9050611bb38186612b2e565b9450611bc0873083611da1565b505b601b5460ff1615611cba576001600160a01b0386165f908152601a602052604090205460ff16158015611c0d57506001600160a01b0385165f908152601a602052604090205460ff16155b8015611c2757506008546001600160a01b03868116911614155b15611cba576001600160a01b0385165f90815260208190526040902054601c54611c518683612a87565b1115611cb85760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b60648201526084016109a6565b505b611cc5868686611da1565b505050505050565b600260065403611cf057604051633ee5aeb560e01b815260040160405180910390fd5b6002600655565b5f81471015611d485760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109a6565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f8114611d91576040519150601f19603f3d011682016040523d82523d5f602084013e611d96565b606091505b509095945050505050565b6001600160a01b038316611e055760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109a6565b6001600160a01b038216611e675760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109a6565b6001600160a01b0383165f9081526020819052604090205481811015611ede5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109a6565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611f14908490612a87565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f6091815260200190565b60405180910390a350505050565b60408051600280825260608201835247925f92919060208301908036833701905050905030815f81518110611fa557611fa5612b41565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ffc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120209190612b55565b8160018151811061203357612033612b41565b6001600160a01b03928316602091820292909201015260075460405163791ac94760e01b815291169063791ac947906120789086905f90869030904290600401612b70565b5f604051808303815f87803b15801561208f575f80fd5b505af19250505080156120a0575060015b6120a957505050565b5f6120b48347612b2e565b90505f6012546011546120c79190612a87565b90505f6120d5826002612a87565b6120df8385612a70565b6120e99190612a5d565b9050801561210957601654612107906001600160a01b031682611cf7565b505b60408051878152602081018590527f54c5e193a68e36b996e0c85b164c5953625d951c488fbad0e67aa32e1c45307b910160405180910390a1505050505050565b612152611ccd565b42600f55600d54600e545f9161216791612b2e565b90505f601454476121789190612b2e565b90505f612186600583612a5d565b90508160145f8282546121999190612a87565b909155505f90506121ab846001612a87565b6121b6600143612b2e565b600e54604080519240602084015244908301524260608084019190915233901b6001600160601b0319166080830152609482015260b401604051602081830303815290604052805190602001205f1c61220f9190612be1565b90505f61221d856001612a87565b44612229600143612b2e565b600e5460405161226f9392409142913390602001948552602085019390935260408401919091526060808401919091521b6001600160601b031916608082015260940190565b604051602081830303815290604052805190602001205f1c6122919190612be1565b90505f61229f866001612a87565b424433600e546001436122b29190612b2e565b6040805160208101969096528501939093526001600160601b0319606092831b1691840191909152607483015240609482015260b401604051602081830303815290604052805190602001205f1c61230a9190612be1565b90505f612318876001612a87565b3342612325600143612b2e565b600e5460405160609490941b6001600160601b03191660208501526034840192909252406054830152607482015244609482015260b401604051602081830303815290604052805190602001205f1c61237e9190612be1565b90505f61238c886001612a87565b600e5433444261239d600143612b2e565b406040516020016123dd95949392919094855260609390931b6001600160601b031916602085015260348401919091526054830152607482015260940190565b604051602081830303815290604052805190602001205f1c6123ff9190612be1565b90505f600a5f87600d546124139190612a87565b81526020019081526020015f205f9054906101000a90046001600160a01b031690505f600a5f87600d546124479190612a87565b81526020019081526020015f205f9054906101000a90046001600160a01b031690505f600a5f87600d5461247b9190612a87565b81526020019081526020015f205f9054906101000a90046001600160a01b031690505f600a5f87600d546124af9190612a87565b81526020019081526020015f205f9054906101000a90046001600160a01b031690505f600a5f87600d546124e39190612a87565b815260208101919091526040015f2054600e54600d556001600160a01b0316905061251042610e10612a87565b6001600160a01b0386165f908152600c6020908152604080832093909355600b905290812080548d9290612545908490612a87565b90915550612557905042610e10612a87565b6001600160a01b0385165f908152600c6020908152604080832093909355600b905290812080548d929061258c908490612a87565b9091555061259e905042610e10612a87565b6001600160a01b0384165f908152600c6020908152604080832093909355600b905290812080548d92906125d3908490612a87565b909155506125e5905042610e10612a87565b6001600160a01b0383165f908152600c6020908152604080832093909355600b905290812080548d929061261a908490612a87565b9091555061262c905042610e10612a87565b6001600160a01b0382165f908152600c6020908152604080832093909355600b905290812080548d9290612661908490612a87565b9091555050604080516001600160a01b03878116825286811660208301528581168284015284811660608301528316608082015290517f85b2075b4c34c708fb90412ebbf4f383c8683a8b75ecce1b6a5bafcd211016bc9181900360a00190a1505050505050505050505050506110226001600655565b5f602080835283518060208501525f5b81811015612704578581018301518582016040015282016126e8565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611684575f80fd5b5f8060408385031215612749575f80fd5b823561275481612724565b946020939093013593505050565b5f805f60608486031215612774575f80fd5b833561277f81612724565b9250602084013561278f81612724565b929592945050506040919091013590565b5f602082840312156127b0575f80fd5b5035919050565b8015158114611684575f80fd5b5f602082840312156127d4575f80fd5b81356127df816127b7565b9392505050565b5f805f805f60a086880312156127fa575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b5f6020828403121561282d575f80fd5b81356127df81612724565b5f805f6060848603121561284a575f80fd5b83359250602084013561285c816127b7565b9150604084013561286c816127b7565b809150509250925092565b5f8060408385031215612888575f80fd5b823561289381612724565b915060208301356128a3816127b7565b809150509250929050565b5f80604083850312156128bf575f80fd5b82356128ca81612724565b915060208301356128a381612724565b600181811c908216806128ee57607f821691505b60208210810361290c57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561299557815f190482111561297b5761297b612947565b8085161561298857918102915b93841c9390800290612960565b509250929050565b5f826129ab57506001610918565b816129b757505f610918565b81600181146129cd57600281146129d7576129f3565b6001915050610918565b60ff8411156129e8576129e8612947565b50506001821b610918565b5060208310610133831016604e8410600b8410161715612a16575081810a610918565b612a20838361295b565b805f1904821115612a3357612a33612947565b029392505050565b5f6127df60ff84168361299d565b634e487b7160e01b5f52601260045260245ffd5b5f82612a6b57612a6b612a49565b500490565b808202811582820484141761091857610918612947565b8082018082111561091857610918612947565b6020808252602a908201527f43534c543a20546f74616c20466565732063616e6e6f742065786365656420746040820152696865206d6178696d756d60b01b606082015260800190565b5f60208284031215612af4575f80fd5b5051919050565b5f60208284031215612b0b575f80fd5b81516127df816127b7565b5f60018201612b2757612b27612947565b5060010190565b8181038181111561091857610918612947565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612b65575f80fd5b81516127df81612724565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612bc05784516001600160a01b031683529383019391830191600101612b9b565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82612bef57612bef612a49565b50069056fea2646970667358221220027575fc8786120347154a979533ba6035bb9e665295ceedc15d9d56bac64ae564736f6c63430008160033

Deployed Bytecode

0x60806040526004361061028e575f3560e01c806370a0823111610155578063aa4bde28116100be578063d2fcc00111610078578063d2fcc001146107ad578063dd11247e146107cc578063dd62ed3e146107e1578063e2f4560514610825578063f2fde38b1461083a578063f9d0831a14610859575f80fd5b8063aa4bde281461071b578063af0b4b2714610730578063b3f0067414610745578063b3ff277d14610764578063bb8c3ee014610779578063c02466681461078e575f80fd5b80638a8c523c1161010f5780638a8c523c146106615780638da5cb5b1461067557806395d89b4114610692578063a457c2d7146106a6578063a8a69b9d146106c5578063a9059cbb146106fc575f80fd5b806370a08231146105a8578063715018a6146105dc578063740db6b8146105f05780637c08b964146105f85780638047a97a14610617578063880f7b0814610642575f80fd5b8063313ce567116101f75780634fbee193116101b15780634fbee193146104d65780635922fd361461050d5780635f5a7ab91461052c57806365048d08146105415780636ca4b712146105565780636ddd17131461058a575f80fd5b8063313ce56714610413578063395093511461042e578063457ffca21461044d57806349bd5a5e1461046c5780634ada218b1461048b5780634c443127146104ab575f80fd5b80631f41f3a8116102485780631f41f3a81461037157806321a9d82a1461038657806323b872dd1461039f5780632441238e146103be57806327a14fc2146103d35780632a6c7dba146103f4575f80fd5b806304c069601461029957806306fdde03146102c1578063095ea7b3146102e25780630fa1eeab146103115780631694505e1461032657806318160ddd1461035d575f80fd5b3661029557005b5f80fd5b3480156102a4575f80fd5b506102ae600d5481565b6040519081526020015b60405180910390f35b3480156102cc575f80fd5b506102d5610878565b6040516102b891906126d8565b3480156102ed575f80fd5b506103016102fc366004612738565b610908565b60405190151581526020016102b8565b34801561031c575f80fd5b506102ae60135481565b348015610331575f80fd5b50600754610345906001600160a01b031681565b6040516001600160a01b0390911681526020016102b8565b348015610368575f80fd5b506002546102ae565b34801561037c575f80fd5b506102ae60175481565b348015610391575f80fd5b50601b546103019060ff1681565b3480156103aa575f80fd5b506103016103b9366004612762565b61091e565b3480156103c9575f80fd5b506102ae60155481565b3480156103de575f80fd5b506103f26103ed3660046127a0565b6109d2565b005b3480156103ff575f80fd5b506103f261040e3660046127c4565b610ad8565b34801561041e575f80fd5b50604051601281526020016102b8565b348015610439575f80fd5b50610301610448366004612738565b610bb7565b348015610458575f80fd5b506103f26104673660046127e6565b610bf2565b348015610477575f80fd5b50600854610345906001600160a01b031681565b348015610496575f80fd5b50601954610301906301000000900460ff1681565b3480156104b6575f80fd5b506102ae6104c536600461281d565b600c6020525f908152604090205481565b3480156104e1575f80fd5b506103016104f036600461281d565b6001600160a01b03165f9081526009602052604090205460ff1690565b348015610518575f80fd5b506103f2610527366004612838565b610d3a565b348015610537575f80fd5b506102ae60105481565b34801561054c575f80fd5b506102ae60125481565b348015610561575f80fd5b506103456105703660046127a0565b600a6020525f90815260409020546001600160a01b031681565b348015610595575f80fd5b5060195461030190610100900460ff1681565b3480156105b3575f80fd5b506102ae6105c236600461281d565b6001600160a01b03165f9081526020819052604090205490565b3480156105e7575f80fd5b506103f2610e5d565b6103f2610ed0565b348015610603575f80fd5b506103f261061236600461281d565b611024565b348015610622575f80fd5b506102ae61063136600461281d565b600b6020525f908152604090205481565b34801561064d575f80fd5b506019546103019062010000900460ff1681565b34801561066c575f80fd5b506103f2611108565b348015610680575f80fd5b506005546001600160a01b0316610345565b34801561069d575f80fd5b506102d56111e8565b3480156106b1575f80fd5b506103016106c0366004612738565b6111f7565b3480156106d0575f80fd5b506103016106df36600461281d565b6001600160a01b03165f908152601a602052604090205460ff1690565b348015610707575f80fd5b50610301610716366004612738565b61128f565b348015610726575f80fd5b506102ae601c5481565b34801561073b575f80fd5b506102ae600f5481565b348015610750575f80fd5b50601654610345906001600160a01b031681565b34801561076f575f80fd5b506102ae60145481565b348015610784575f80fd5b506102ae60115481565b348015610799575f80fd5b506103f26107a8366004612877565b61129b565b3480156107b8575f80fd5b506103f26107c7366004612877565b611324565b3480156107d7575f80fd5b506102ae600e5481565b3480156107ec575f80fd5b506102ae6107fb3660046128ae565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610830575f80fd5b506102ae60185481565b348015610845575f80fd5b506103f261085436600461281d565b611478565b348015610864575f80fd5b506103f261087336600461281d565b611562565b606060038054610887906128da565b80601f01602080910402602001604051908101604052809291908181526020018280546108b3906128da565b80156108fe5780601f106108d5576101008083540402835291602001916108fe565b820191905f5260205f20905b8154815290600101906020018083116108e157829003601f168201915b5050505050905090565b5f610914338484611687565b5060015b92915050565b6001600160a01b0383165f9081526001602090815260408083203384529091528120545f1981146109bc57828110156109af5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6109bc8533858403611687565b6109c78585856117aa565b506001949350505050565b6005546001600160a01b031633146109fc5760405162461bcd60e51b81526004016109a690612912565b6064610a0a6012600a612a3b565b600254610a179190612a5d565b610a219190612a5d565b811015610a865760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b60648201526084016109a6565b610a926012600a612a3b565b610a9c9082612a70565b601c8190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6005546001600160a01b03163314610b025760405162461bcd60e51b81526004016109a690612912565b601b5460ff16151581151503610b705760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b60648201526084016109a6565b601b805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610acd565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610914918590610bed908690612a87565b611687565b6005546001600160a01b03163314610c1c5760405162461bcd60e51b81526004016109a690612912565b6032821015610c6d5760405162461bcd60e51b815260206004820152601f60248201527f4d757374206265206d6178696d756d20322520746f74616c20737570706c790060448201526064016109a6565b601184905560128590556013839055601782905560108190556019841115610ca75760405162461bcd60e51b81526004016109a690612a9a565b60196012541115610cca5760405162461bcd60e51b81526004016109a690612a9a565b60196013541115610ced5760405162461bcd60e51b81526004016109a690612a9a565b7f53482196ef67ac615caab1c3eca2c270acbfdcd75e57c5f24c1b98b10c8e6e04601254601154604051610d2b929190918252602082015260400190565b60405180910390a15050505050565b6005546001600160a01b03163314610d645760405162461bcd60e51b81526004016109a690612912565b620f4240610d7160025490565b610d7b9190612a5d565b8311610dfd5760405162461bcd60e51b815260206004820152604560248201527f43534c543a2053776170546f6b656e734174416d6f756e74206d75737420626560448201527f2067726561746572207468616e20302e3030303125206f6620746f74616c20736064820152647570706c7960d81b608482015260a4016109a6565b60188390556019805462ffff0019166101008415150262ff000019161762010000831515021790556040518381527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b1459060200160405180910390a1505050565b6005546001600160a01b03163314610e875760405162461bcd60e51b81526004016109a690612912565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b610ed8611ccd565b335f908152600b6020526040902054610f295760405162461bcd60e51b81526020600482015260136024820152722cb7ba903430bb32903737903bb4b73997171760691b60448201526064016109a6565b335f908152600b6020526040902054471015610f935760405162461bcd60e51b8152602060048201526024808201527f4e6f7420656e6f7567682062616c616e63652c2074727920616e6f746865722060448201526374696d6560e01b60648201526084016109a6565b335f908152600c6020526040902054421015610fe95760405162461bcd60e51b81526020600482015260156024820152742cb7ba9031b0b73737ba1031b630b4b6903cb2ba1760591b60448201526064016109a6565b335f818152600b60209081526040808320805490849055600c909252822091909155906110169082611cf7565b50506110226001600655565b565b6005546001600160a01b0316331461104e5760405162461bcd60e51b81526004016109a690612912565b6001600160a01b0381166110ba5760405162461bcd60e51b815260206004820152602d60248201527f43534c543a204665652072656365697665722063616e6e6f742062652074686560448201526c207a65726f206164647265737360981b60648201526084016109a6565b601680546001600160a01b0319166001600160a01b0383169081179091556040519081527f647672599d3468abcfa241a13c9e3d34383caadb5cc80fb67c3cdfcd5f78605990602001610acd565b6005546001600160a01b031633146111325760405162461bcd60e51b81526004016109a690612912565b6019546301000000900460ff161561118c5760405162461bcd60e51b815260206004820152601e60248201527f43534c543a2054726164696e6720616c726561647920656e61626c65642e000060448201526064016109a6565b60198054630101010063ffffff0019909116179081905542600f55604051630100000090910460ff16151581527fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9060200160405180910390a1565b606060048054610887906128da565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156112785760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109a6565b6112853385858403611687565b5060019392505050565b5f6109143384846117aa565b6005546001600160a01b031633146112c55760405162461bcd60e51b81526004016109a690612912565b6001600160a01b0382165f81815260096020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b0316331461134e5760405162461bcd60e51b81526004016109a690612912565b6001600160a01b0382165f908152601a602052604090205481151560ff9091161515036113c95760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b60648201526084016109a6565b306001600160a01b038316036114215760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e00000000000000000060448201526064016109a6565b6001600160a01b0382165f818152601a6020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101611318565b6005546001600160a01b031633146114a25760405162461bcd60e51b81526004016109a690612912565b6001600160a01b0381166115075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461158c5760405162461bcd60e51b81526004016109a690612912565b6001600160a01b0381166115a8576115a43347611cf7565b5050565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156115f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116189190612ae4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611660573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a49190612afb565b50565b6001600160a01b0383166116e95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a6565b6001600160a01b03821661174a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661180c5760405162461bcd60e51b8152602060048201526024808201527f43534c543a207472616e736665722066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a6565b6001600160a01b03821661186d5760405162461bcd60e51b815260206004820152602260248201527f43534c543a207472616e7366657220746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a6565b6019546301000000900460ff168061189c57506001600160a01b0383165f9081526009602052604090205460ff165b806118be57506001600160a01b0382165f9081526009602052604090205460ff165b61190a5760405162461bcd60e51b815260206004820152601e60248201527f43534c543a2054726164696e67206e6f742079657420656e61626c656421000060448201526064016109a6565b805f036119215761191c83835f611da1565b505050565b305f9081526020819052604090205460185481108015908190611947575060195460ff16155b801561196057506008546001600160a01b038581169116145b801561198457506001600160a01b0385165f9081526009602052604090205460ff16155b80156119975750601954610100900460ff165b156119c0576019805460ff191660011790556018546119b590611f6e565b6019805460ff191690555b60195462010000900460ff1680156119db575060195460ff16155b80156119f457506008546001600160a01b038581169116145b8015611a0e5750601054600f54611a0b9190612a87565b42115b8015611a1957505f47115b15611a3e576019805460ff19166001179055611a3361214a565b6019805460ff191690555b6001600160a01b0385165f9081526009602052604081205460ff1680611a7b57506001600160a01b0385165f9081526009602052604090205460ff165b80611a88575060195460ff165b15611a9457505f611b8a565b6008546001600160a01b0390811690871603611b1c5760195462010000900460ff168015611ad15750601754600254611acd9190612a5d565b8410155b15611b1357600e80545f908152600a6020526040812080546001600160a01b0319166001600160a01b03891617905581549190611b0d83612b16565b91905055505b50601154611b8a565b6008546001600160a01b0390811690861603611b6057506012546001600160a01b0386165f908152600b60209081526040808320839055600c909152812055611b8a565b506013546001600160a01b0386165f908152600b60209081526040808320839055600c9091528120555b8015611bc2575f6064611b9d8387612a70565b611ba79190612a5d565b9050611bb38186612b2e565b9450611bc0873083611da1565b505b601b5460ff1615611cba576001600160a01b0386165f908152601a602052604090205460ff16158015611c0d57506001600160a01b0385165f908152601a602052604090205460ff16155b8015611c2757506008546001600160a01b03868116911614155b15611cba576001600160a01b0385165f90815260208190526040902054601c54611c518683612a87565b1115611cb85760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b60648201526084016109a6565b505b611cc5868686611da1565b505050505050565b600260065403611cf057604051633ee5aeb560e01b815260040160405180910390fd5b6002600655565b5f81471015611d485760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109a6565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f8114611d91576040519150601f19603f3d011682016040523d82523d5f602084013e611d96565b606091505b509095945050505050565b6001600160a01b038316611e055760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109a6565b6001600160a01b038216611e675760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109a6565b6001600160a01b0383165f9081526020819052604090205481811015611ede5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109a6565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611f14908490612a87565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f6091815260200190565b60405180910390a350505050565b60408051600280825260608201835247925f92919060208301908036833701905050905030815f81518110611fa557611fa5612b41565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ffc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120209190612b55565b8160018151811061203357612033612b41565b6001600160a01b03928316602091820292909201015260075460405163791ac94760e01b815291169063791ac947906120789086905f90869030904290600401612b70565b5f604051808303815f87803b15801561208f575f80fd5b505af19250505080156120a0575060015b6120a957505050565b5f6120b48347612b2e565b90505f6012546011546120c79190612a87565b90505f6120d5826002612a87565b6120df8385612a70565b6120e99190612a5d565b9050801561210957601654612107906001600160a01b031682611cf7565b505b60408051878152602081018590527f54c5e193a68e36b996e0c85b164c5953625d951c488fbad0e67aa32e1c45307b910160405180910390a1505050505050565b612152611ccd565b42600f55600d54600e545f9161216791612b2e565b90505f601454476121789190612b2e565b90505f612186600583612a5d565b90508160145f8282546121999190612a87565b909155505f90506121ab846001612a87565b6121b6600143612b2e565b600e54604080519240602084015244908301524260608084019190915233901b6001600160601b0319166080830152609482015260b401604051602081830303815290604052805190602001205f1c61220f9190612be1565b90505f61221d856001612a87565b44612229600143612b2e565b600e5460405161226f9392409142913390602001948552602085019390935260408401919091526060808401919091521b6001600160601b031916608082015260940190565b604051602081830303815290604052805190602001205f1c6122919190612be1565b90505f61229f866001612a87565b424433600e546001436122b29190612b2e565b6040805160208101969096528501939093526001600160601b0319606092831b1691840191909152607483015240609482015260b401604051602081830303815290604052805190602001205f1c61230a9190612be1565b90505f612318876001612a87565b3342612325600143612b2e565b600e5460405160609490941b6001600160601b03191660208501526034840192909252406054830152607482015244609482015260b401604051602081830303815290604052805190602001205f1c61237e9190612be1565b90505f61238c886001612a87565b600e5433444261239d600143612b2e565b406040516020016123dd95949392919094855260609390931b6001600160601b031916602085015260348401919091526054830152607482015260940190565b604051602081830303815290604052805190602001205f1c6123ff9190612be1565b90505f600a5f87600d546124139190612a87565b81526020019081526020015f205f9054906101000a90046001600160a01b031690505f600a5f87600d546124479190612a87565b81526020019081526020015f205f9054906101000a90046001600160a01b031690505f600a5f87600d5461247b9190612a87565b81526020019081526020015f205f9054906101000a90046001600160a01b031690505f600a5f87600d546124af9190612a87565b81526020019081526020015f205f9054906101000a90046001600160a01b031690505f600a5f87600d546124e39190612a87565b815260208101919091526040015f2054600e54600d556001600160a01b0316905061251042610e10612a87565b6001600160a01b0386165f908152600c6020908152604080832093909355600b905290812080548d9290612545908490612a87565b90915550612557905042610e10612a87565b6001600160a01b0385165f908152600c6020908152604080832093909355600b905290812080548d929061258c908490612a87565b9091555061259e905042610e10612a87565b6001600160a01b0384165f908152600c6020908152604080832093909355600b905290812080548d92906125d3908490612a87565b909155506125e5905042610e10612a87565b6001600160a01b0383165f908152600c6020908152604080832093909355600b905290812080548d929061261a908490612a87565b9091555061262c905042610e10612a87565b6001600160a01b0382165f908152600c6020908152604080832093909355600b905290812080548d9290612661908490612a87565b9091555050604080516001600160a01b03878116825286811660208301528581168284015284811660608301528316608082015290517f85b2075b4c34c708fb90412ebbf4f383c8683a8b75ecce1b6a5bafcd211016bc9181900360a00190a1505050505050505050505050506110226001600655565b5f602080835283518060208501525f5b81811015612704578581018301518582016040015282016126e8565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611684575f80fd5b5f8060408385031215612749575f80fd5b823561275481612724565b946020939093013593505050565b5f805f60608486031215612774575f80fd5b833561277f81612724565b9250602084013561278f81612724565b929592945050506040919091013590565b5f602082840312156127b0575f80fd5b5035919050565b8015158114611684575f80fd5b5f602082840312156127d4575f80fd5b81356127df816127b7565b9392505050565b5f805f805f60a086880312156127fa575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b5f6020828403121561282d575f80fd5b81356127df81612724565b5f805f6060848603121561284a575f80fd5b83359250602084013561285c816127b7565b9150604084013561286c816127b7565b809150509250925092565b5f8060408385031215612888575f80fd5b823561289381612724565b915060208301356128a3816127b7565b809150509250929050565b5f80604083850312156128bf575f80fd5b82356128ca81612724565b915060208301356128a381612724565b600181811c908216806128ee57607f821691505b60208210810361290c57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561299557815f190482111561297b5761297b612947565b8085161561298857918102915b93841c9390800290612960565b509250929050565b5f826129ab57506001610918565b816129b757505f610918565b81600181146129cd57600281146129d7576129f3565b6001915050610918565b60ff8411156129e8576129e8612947565b50506001821b610918565b5060208310610133831016604e8410600b8410161715612a16575081810a610918565b612a20838361295b565b805f1904821115612a3357612a33612947565b029392505050565b5f6127df60ff84168361299d565b634e487b7160e01b5f52601260045260245ffd5b5f82612a6b57612a6b612a49565b500490565b808202811582820484141761091857610918612947565b8082018082111561091857610918612947565b6020808252602a908201527f43534c543a20546f74616c20466565732063616e6e6f742065786365656420746040820152696865206d6178696d756d60b01b606082015260800190565b5f60208284031215612af4575f80fd5b5051919050565b5f60208284031215612b0b575f80fd5b81516127df816127b7565b5f60018201612b2757612b27612947565b5060010190565b8181038181111561091857610918612947565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612b65575f80fd5b81516127df81612724565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612bc05784516001600160a01b031683529383019391830191600101612b9b565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82612bef57612bef612a49565b50069056fea2646970667358221220027575fc8786120347154a979533ba6035bb9e665295ceedc15d9d56bac64ae564736f6c63430008160033

Deployed Bytecode Sourcemap

10560:13815:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10963:31;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;10963:31:0;;;;;;;;4052:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4966:169::-;;;;;;;;;;-1:-1:-1;4966:169:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;4966:169:0;1205:187:1;11173:29:0;;;;;;;;;;;;;;;;10660:41;;;;;;;;;;-1:-1:-1;10660:41:0;;;;-1:-1:-1;;;;;10660:41:0;;;;;;-1:-1:-1;;;;;1586:32:1;;;1568:51;;1556:2;1541:18;10660:41:0;1397:228:1;4373:108:0;;;;;;;;;;-1:-1:-1;4461:12:0;;4373:108;;11318:30;;;;;;;;;;;;;;;;22902:36;;;;;;;;;;-1:-1:-1;22902:36:0;;;;;;;;5143:573;;;;;;;;;;-1:-1:-1;5143:573:0;;;;;:::i;:::-;;:::i;11242:33::-;;;;;;;;;;;;;;;;23480:340;;;;;;;;;;-1:-1:-1;23480:340:0;;;;;:::i;:::-;;:::i;:::-;;23192:280;;;;;;;;;;-1:-1:-1;23192:280:0;;;;;:::i;:::-;;:::i;4272:93::-;;;;;;;;;;-1:-1:-1;4272:93:0;;4355:2;2787:36:1;;2775:2;2760:18;4272:93:0;2645:184:1;5724:215:0;;;;;;;;;;-1:-1:-1;5724:215:0;;;;;:::i;:::-;;:::i;17437:725::-;;;;;;;;;;-1:-1:-1;17437:725:0;;;;;:::i;:::-;;:::i;10708:29::-;;;;;;;;;;-1:-1:-1;10708:29:0;;;;-1:-1:-1;;;;;10708:29:0;;;18542:26;;;;;;;;;;-1:-1:-1;18542:26:0;;;;;;;;;;;10909:45;;;;;;;;;;-1:-1:-1;10909:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;17242:125;;;;;;;;;;-1:-1:-1;17242:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;17331:28:0;17307:4;17331:28;;;:19;:28;;;;;;;;;17242:125;21538:422;;;;;;;;;;-1:-1:-1;21538:422:0;;;;;:::i;:::-;;:::i;11072:27::-;;;;;;;;;;;;;;;;11139:25;;;;;;;;;;;;;;;;10806:49;;;;;;;;;;-1:-1:-1;10806:49:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;10806:49:0;;;11431:26;;;;;;;;;;-1:-1:-1;11431:26:0;;;;;;;;;;;4489:127;;;;;;;;;;-1:-1:-1;4489:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4590:18:0;4563:7;4590:18;;;;;;;;;;;;4489:127;3241:148;;;;;;;;;;;;;:::i;16570:471::-;;;:::i;18224:256::-;;;;;;;;;;-1:-1:-1;18224:256:0;;;;;:::i;:::-;;:::i;10862:40::-;;;;;;;;;;-1:-1:-1;10862:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;11464:26;;;;;;;;;;-1:-1:-1;11464:26:0;;;;;;;;;;;18577:298;;;;;;;;;;;;;:::i;3027:79::-;;;;;;;;;;-1:-1:-1;3092:6:0;;-1:-1:-1;;;;;3092:6:0;3027:79;;4160:104;;;;;;;;;;;;;:::i;5947:413::-;;;;;;;;;;-1:-1:-1;5947:413:0;;;;;:::i;:::-;;:::i;24227:145::-;;;;;;;;;;-1:-1:-1;24227:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;24326:38:0;24302:4;24326:38;;;:29;:38;;;;;;;;;24227:145;4624:175;;;;;;;;;;-1:-1:-1;4624:175:0;;;;;:::i;:::-;;:::i;22945:30::-;;;;;;;;;;;;;;;;11038:27;;;;;;;;;;;;;;;;11284;;;;;;;;;;-1:-1:-1;11284:27:0;;;;-1:-1:-1;;;;;11284:27:0;;;11209:24;;;;;;;;;;;;;;;;11108;;;;;;;;;;;;;;;;17049:185;;;;;;;;;;-1:-1:-1;17049:185:0;;;;;:::i;:::-;;:::i;23828:391::-;;;;;;;;;;-1:-1:-1;23828:391:0;;;;;:::i;:::-;;:::i;11001:28::-;;;;;;;;;;;;;;;;4807:151;;;;;;;;;;-1:-1:-1;4807:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4923:18:0;;;4896:7;4923:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4807:151;11357:34;;;;;;;;;;;;;;;;3397:244;;;;;;;;;;-1:-1:-1;3397:244:0;;;;;:::i;:::-;;:::i;14079:300::-;;;;;;;;;;-1:-1:-1;14079:300:0;;;;;:::i;:::-;;:::i;4052:100::-;4106:13;4139:5;4132:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4052:100;:::o;4966:169::-;5049:4;5066:39;2430:10;5089:7;5098:6;5066:8;:39::i;:::-;-1:-1:-1;5123:4:0;4966:169;;;;;:::o;5143:573::-;-1:-1:-1;;;;;5327:19:0;;5283:4;5327:19;;;:11;:19;;;;;;;;2430:10;5327:33;;;;;;;;-1:-1:-1;;5375:37:0;;5371:265;;5457:6;5437:16;:26;;5429:79;;;;-1:-1:-1;;;5429:79:0;;5569:2:1;5429:79:0;;;5551:21:1;5608:2;5588:18;;;5581:30;5647:34;5627:18;;;5620:62;-1:-1:-1;;;5698:18:1;;;5691:38;5746:19;;5429:79:0;;;;;;;;;5552:57;5561:6;2430:10;5602:6;5583:16;:25;5552:8;:57::i;:::-;5648:36;5658:6;5666:9;5677:6;5648:9;:36::i;:::-;-1:-1:-1;5704:4:0;;5143:573;-1:-1:-1;;;;5143:573:0:o;23480:340::-;3154:6;;-1:-1:-1;;;;;3154:6:0;2430:10;3154:22;3146:67;;;;-1:-1:-1;;;3146:67:0;;;;;;;:::i;:::-;23631:3:::1;23610:16;4355:2:::0;23610::::1;:16;:::i;:::-;4461:12:::0;;23593:34:::1;;;;:::i;:::-;23592:42;;;;:::i;:::-;23572:16;:62;;23564:120;;;::::0;-1:-1:-1;;;23564:120:0;;8105:2:1;23564:120:0::1;::::0;::::1;8087:21:1::0;8144:2;8124:18;;;8117:30;8183:34;8163:18;;;8156:62;-1:-1:-1;;;8234:18:1;;;8227:43;8287:19;;23564:120:0::1;7903:409:1::0;23564:120:0::1;23733:16;4355:2:::0;23733::::1;:16;:::i;:::-;23713:37;::::0;:16;:37:::1;:::i;:::-;23695:15;:55:::0;;;23768:44:::1;::::0;160:25:1;;;23768:44:0::1;::::0;148:2:1;133:18;23768:44:0::1;;;;;;;;23480:340:::0;:::o;23192:280::-;3154:6;;-1:-1:-1;;;;;3154:6:0;2430:10;3154:22;3146:67;;;;-1:-1:-1;;;3146:67:0;;;;;;;:::i;:::-;23286:21:::1;::::0;::::1;;23276:31;;::::0;::::1;;::::0;23268:88:::1;;;::::0;-1:-1:-1;;;23268:88:0;;8692:2:1;23268:88:0::1;::::0;::::1;8674:21:1::0;8731:2;8711:18;;;8704:30;8770:34;8750:18;;;8743:62;-1:-1:-1;;;8821:18:1;;;8814:43;8874:19;;23268:88:0::1;8490:409:1::0;23268:88:0::1;23367:21;:30:::0;;-1:-1:-1;;23367:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23415:49:::1;::::0;23367:30:::1;23442:21:::0;;;1370:14:1;1363:22;1345:41;;23415:49:0::1;::::0;1333:2:1;1318:18;23415:49:0::1;1205:187:1::0;5724:215:0;2430:10;5812:4;5861:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5861:34:0;;;;;;;;;;5812:4;;5829:80;;5852:7;;5861:47;;5898:10;;5861:47;:::i;:::-;5829:8;:80::i;17437:725::-;3154:6;;-1:-1:-1;;;;;3154:6:0;2430:10;3154:22;3146:67;;;;-1:-1:-1;;;3146:67:0;;;;;;;:::i;:::-;17624:2:::1;17605:15;:21;;17597:65;;;::::0;-1:-1:-1;;;17597:65:0;;9236:2:1;17597:65:0::1;::::0;::::1;9218:21:1::0;9275:2;9255:18;;;9248:30;9314:33;9294:18;;;9287:61;9365:18;;17597:65:0::1;9034:355:1::0;17597:65:0::1;17683:8;:20:::0;;;17714:9:::1;:22:::0;;;17747:13:::1;:30:::0;;;17788:14:::1;:32:::0;;;17831:11:::1;:26:::0;;;17890:2:::1;17878:14:::0;::::1;;17870:69;;;;-1:-1:-1::0;;;17870:69:0::1;;;;;;;:::i;:::-;17971:2;17958:9;;:15;;17950:70;;;;-1:-1:-1::0;;;17950:70:0::1;;;;;;;:::i;:::-;18056:2;18039:13;;:19;;18031:74;;;;-1:-1:-1::0;;;18031:74:0::1;;;;;;;:::i;:::-;18123:31;18134:9;;18145:8;;18123:31;;;;;;9979:25:1::0;;;10035:2;10020:18;;10013:34;9967:2;9952:18;;9805:248;18123:31:0::1;;;;;;;;17437:725:::0;;;;;:::o;21538:422::-;3154:6;;-1:-1:-1;;;;;3154:6:0;2430:10;3154:22;3146:67;;;;-1:-1:-1;;;3146:67:0;;;;;;;:::i;:::-;21691:9:::1;21675:13;4461:12:::0;;;4373:108;21675:13:::1;:25;;;;:::i;:::-;21663:9;:37;21655:119;;;::::0;-1:-1:-1;;;21655:119:0;;10260:2:1;21655:119:0::1;::::0;::::1;10242:21:1::0;10299:2;10279:18;;;10272:30;10338:34;10318:18;;;10311:62;10409:34;10389:18;;;10382:62;-1:-1:-1;;;10460:19:1;;;10453:36;10506:19;;21655:119:0::1;10058:473:1::0;21655:119:0::1;21785:18;:30:::0;;;21826:11:::1;:26:::0;;-1:-1:-1;;21863:26:0;21826::::1;::::0;::::1;;;-1:-1:-1::0;;21863:26:0;;;;::::1;;;;::::0;;21907:45:::1;::::0;160:25:1;;;21907:45:0::1;::::0;148:2:1;133:18;21907:45:0::1;;;;;;;21538:422:::0;;;:::o;3241:148::-;3154:6;;-1:-1:-1;;;;;3154:6:0;2430:10;3154:22;3146:67;;;;-1:-1:-1;;;3146:67:0;;;;;;;:::i;:::-;3332:6:::1;::::0;3311:40:::1;::::0;3348:1:::1;::::0;-1:-1:-1;;;;;3332:6:0::1;::::0;3311:40:::1;::::0;3348:1;;3311:40:::1;3362:6;:19:::0;;-1:-1:-1;;;;;;3362:19:0::1;::::0;;3241:148::o;16570:471::-;9645:21;:19;:21::i;:::-;16645:10:::1;16659:1;16640:16:::0;;;:4:::1;:16;::::0;;;;;16632:52:::1;;;::::0;-1:-1:-1;;;16632:52:0;;10738:2:1;16632:52:0::1;::::0;::::1;10720:21:1::0;10777:2;10757:18;;;10750:30;-1:-1:-1;;;10796:18:1;;;10789:49;10855:18;;16632:52:0::1;10536:343:1::0;16632:52:0::1;16733:10;16728:16;::::0;;;:4:::1;:16;::::0;;;;;16703:21:::1;:41;;16695:90;;;::::0;-1:-1:-1;;;16695:90:0;;11086:2:1;16695:90:0::1;::::0;::::1;11068:21:1::0;11125:2;11105:18;;;11098:30;11164:34;11144:18;;;11137:62;-1:-1:-1;;;11215:18:1;;;11208:34;11259:19;;16695:90:0::1;10884:400:1::0;16695:90:0::1;16833:10;16823:21;::::0;;;:9:::1;:21;::::0;;;;;16804:15:::1;:40;;16796:74;;;::::0;-1:-1:-1;;;16796:74:0;;11491:2:1;16796:74:0::1;::::0;::::1;11473:21:1::0;11530:2;11510:18;;;11503:30;-1:-1:-1;;;11549:18:1;;;11542:51;11610:18;;16796:74:0::1;11289:345:1::0;16796:74:0::1;16905:10;16883:14;16900:16:::0;;;:4:::1;:16;::::0;;;;;;;;;16927:20;;;;16958:9:::1;:21:::0;;;;;:25;;;;16900:16;16996:37:::1;::::0;16900:16;16996:29:::1;:37::i;:::-;;16621:420;9689:20:::0;8980:1;10231:7;:21;10048:212;9689:20;16570:471::o;18224:256::-;3154:6;;-1:-1:-1;;;;;3154:6:0;2430:10;3154:22;3146:67;;;;-1:-1:-1;;;3146:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18310:26:0;::::1;18302:84;;;::::0;-1:-1:-1;;;18302:84:0;;11841:2:1;18302:84:0::1;::::0;::::1;11823:21:1::0;11880:2;11860:18;;;11853:30;11919:34;11899:18;;;11892:62;-1:-1:-1;;;11970:18:1;;;11963:43;12023:19;;18302:84:0::1;11639:409:1::0;18302:84:0::1;18397:11;:26:::0;;-1:-1:-1;;;;;;18397:26:0::1;-1:-1:-1::0;;;;;18397:26:0;::::1;::::0;;::::1;::::0;;;18441:31:::1;::::0;1568:51:1;;;18441:31:0::1;::::0;1556:2:1;1541:18;18441:31:0::1;1397:228:1::0;18577:298:0;3154:6;;-1:-1:-1;;;;;3154:6:0;2430:10;3154:22;3146:67;;;;-1:-1:-1;;;3146:67:0;;;;;;;:::i;:::-;18640:14:::1;::::0;;;::::1;;;18639:15;18631:58;;;::::0;-1:-1:-1;;;18631:58:0;;12255:2:1;18631:58:0::1;::::0;::::1;12237:21:1::0;12294:2;12274:18;;;12267:30;12333:32;12313:18;;;12306:60;12383:18;;18631:58:0::1;12053:354:1::0;18631:58:0::1;18700:14;:21:::0;;18761:18;-1:-1:-1;;18761:18:0;;;;;;;;18804:15:::1;18790:11;:29:::0;18837:30:::1;::::0;18700:21;18852:14;;::::1;18700:21;18852:14;1370::1::0;1363:22;1345:41;;18837:30:0::1;::::0;1333:2:1;1318:18;18837:30:0::1;;;;;;;18577:298::o:0;4160:104::-;4216:13;4249:7;4242:14;;;;;:::i;5947:413::-;2430:10;6040:4;6084:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6084:34:0;;;;;;;;;;6137:35;;;;6129:85;;;;-1:-1:-1;;;6129:85:0;;12614:2:1;6129:85:0;;;12596:21:1;12653:2;12633:18;;;12626:30;12692:34;12672:18;;;12665:62;-1:-1:-1;;;12743:18:1;;;12736:35;12788:19;;6129:85:0;12412:401:1;6129:85:0;6250:67;2430:10;6273:7;6301:15;6282:16;:34;6250:8;:67::i;:::-;-1:-1:-1;6348:4:0;;5947:413;-1:-1:-1;;;5947:413:0:o;4624:175::-;4710:4;4727:42;2430:10;4751:9;4762:6;4727:9;:42::i;17049:185::-;3154:6;;-1:-1:-1;;;;;3154:6:0;2430:10;3154:22;3146:67;;;;-1:-1:-1;;;3146:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17135:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17135:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17192:34;;1345:41:1;;;17192:34:0::1;::::0;1318:18:1;17192:34:0::1;;;;;;;;17049:185:::0;;:::o;23828:391::-;3154:6;;-1:-1:-1;;;;;3154:6:0;2430:10;3154:22;3146:67;;;;-1:-1:-1;;;3146:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23928:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:49;::::1;;:38;::::0;;::::1;:49;;::::0;23919:98:::1;;;::::0;-1:-1:-1;;;23919:98:0;;13020:2:1;23919:98:0::1;::::0;::::1;13002:21:1::0;13059:2;13039:18;;;13032:30;13098:34;13078:18;;;13071:62;-1:-1:-1;;;13149:18:1;;;13142:34;13193:19;;23919:98:0::1;12818:400:1::0;23919:98:0::1;24055:4;-1:-1:-1::0;;;;;24036:24:0;::::1;::::0;24028:60:::1;;;::::0;-1:-1:-1;;;24028:60:0;;13425:2:1;24028:60:0::1;::::0;::::1;13407:21:1::0;13464:2;13444:18;;;13437:30;13503:25;13483:18;;;13476:53;13546:18;;24028:60:0::1;13223:347:1::0;24028:60:0::1;-1:-1:-1::0;;;;;24101:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;24101:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24167:44;;1345:41:1;;;24167:44:0::1;::::0;1318:18:1;24167:44:0::1;1205:187:1::0;3397:244:0;3154:6;;-1:-1:-1;;;;;3154:6:0;2430:10;3154:22;3146:67;;;;-1:-1:-1;;;3146:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3486:22:0;::::1;3478:73;;;::::0;-1:-1:-1;;;3478:73:0;;13777:2:1;3478:73:0::1;::::0;::::1;13759:21:1::0;13816:2;13796:18;;;13789:30;13855:34;13835:18;;;13828:62;-1:-1:-1;;;13906:18:1;;;13899:36;13952:19;;3478:73:0::1;13575:402:1::0;3478:73:0::1;3588:6;::::0;3567:38:::1;::::0;-1:-1:-1;;;;;3567:38:0;;::::1;::::0;3588:6:::1;::::0;3567:38:::1;::::0;3588:6:::1;::::0;3567:38:::1;3616:6;:17:::0;;-1:-1:-1;;;;;;3616:17:0::1;-1:-1:-1::0;;;;;3616:17:0;;;::::1;::::0;;;::::1;::::0;;3397:244::o;14079:300::-;3154:6;;-1:-1:-1;;;;;3154:6:0;2430:10;3154:22;3146:67;;;;-1:-1:-1;;;3146:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14154:21:0;::::1;14150:127;;14192:52;14200:10;14222:21;14192:29;:52::i;:::-;;14079:300:::0;:::o;14150:127::-:1;14332:38;::::0;-1:-1:-1;;;14332:38:0;;14364:4:::1;14332:38;::::0;::::1;1568:51:1::0;-1:-1:-1;;;;;14297:22:0;::::1;::::0;::::1;::::0;14320:10:::1;::::0;14297:22;;14332:23:::1;::::0;1541:18:1;;14332:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14297:74;::::0;-1:-1:-1;;;;;;14297:74:0::1;::::0;;;;;;-1:-1:-1;;;;;14363:32:1;;;14297:74:0::1;::::0;::::1;14345:51:1::0;14412:18;;;14405:34;14318:18;;14297:74:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3224:1::-;14079:300:::0;:::o;7754:380::-;-1:-1:-1;;;;;7890:19:0;;7882:68;;;;-1:-1:-1;;;7882:68:0;;14902:2:1;7882:68:0;;;14884:21:1;14941:2;14921:18;;;14914:30;14980:34;14960:18;;;14953:62;-1:-1:-1;;;15031:18:1;;;15024:34;15075:19;;7882:68:0;14700:400:1;7882:68:0;-1:-1:-1;;;;;7969:21:0;;7961:68;;;;-1:-1:-1;;;7961:68:0;;15307:2:1;7961:68:0;;;15289:21:1;15346:2;15326:18;;;15319:30;15385:34;15365:18;;;15358:62;-1:-1:-1;;;15436:18:1;;;15429:32;15478:19;;7961:68:0;15105:398:1;7961:68:0;-1:-1:-1;;;;;8042:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8094:32;;160:25:1;;;8094:32:0;;133:18:1;8094:32:0;;;;;;;7754:380;;;:::o;18883:2647::-;-1:-1:-1;;;;;18979:18:0;;18971:67;;;;-1:-1:-1;;;18971:67:0;;15710:2:1;18971:67:0;;;15692:21:1;15749:2;15729:18;;;15722:30;15788:34;15768:18;;;15761:62;-1:-1:-1;;;15839:18:1;;;15832:34;15883:19;;18971:67:0;15508:400:1;18971:67:0;-1:-1:-1;;;;;19057:16:0;;19049:63;;;;-1:-1:-1;;;19049:63:0;;16115:2:1;19049:63:0;;;16097:21:1;16154:2;16134:18;;;16127:30;16193:34;16173:18;;;16166:62;-1:-1:-1;;;16244:18:1;;;16237:32;16286:19;;19049:63:0;15913:398:1;19049:63:0;19131:14;;;;;;;;:43;;-1:-1:-1;;;;;;19149:25:0;;;;;;:19;:25;;;;;;;;19131:43;:70;;;-1:-1:-1;;;;;;19178:23:0;;;;;;:19;:23;;;;;;;;19131:70;19123:113;;;;-1:-1:-1;;;19123:113:0;;16518:2:1;19123:113:0;;;16500:21:1;16557:2;16537:18;;;16530:30;16596:32;16576:18;;;16569:60;16646:18;;19123:113:0;16316:354:1;19123:113:0;19260:6;19270:1;19260:11;19256:93;;19288:28;19304:4;19310:2;19314:1;19288:15;:28::i;:::-;18883:2647;;;:::o;19256:93::-;19404:4;19355:28;4590:18;;;;;;;;;;;19462;;19438:42;;;;;;;19497:33;;-1:-1:-1;19522:8:0;;;;19521:9;19497:33;:69;;;;-1:-1:-1;19553:13:0;;-1:-1:-1;;;;;19547:19:0;;;19553:13;;19547:19;19497:69;:112;;;;-1:-1:-1;;;;;;19584:25:0;;;;;;:19;:25;;;;;;;;19583:26;19497:112;:140;;;;-1:-1:-1;19626:11:0;;;;;;;19497:140;19493:299;;;19664:8;:15;;-1:-1:-1;;19664:15:0;19675:4;19664:15;;;19723:18;;19708:34;;:14;:34::i;:::-;19764:8;:16;;-1:-1:-1;;19764:16:0;;;19493:299;19822:11;;;;;;;:37;;;;-1:-1:-1;19851:8:0;;;;19850:9;19822:37;:73;;;;-1:-1:-1;19882:13:0;;-1:-1:-1;;;;;19876:19:0;;;19882:13;;19876:19;19822:73;:133;;;;;19944:11;;19930;;:25;;;;:::i;:::-;19912:15;:43;19822:133;:175;;;;;19996:1;19972:21;:25;19822:175;19804:331;;;20024:8;:15;;-1:-1:-1;;20024:15:0;20035:4;20024:15;;;20068:18;:16;:18::i;:::-;20107:8;:16;;-1:-1:-1;;20107:16:0;;;19804:331;-1:-1:-1;;;;;20180:25:0;;20147:18;20180:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20209:23:0;;;;;;:19;:23;;;;;;;;20180:52;:64;;;-1:-1:-1;20236:8:0;;;;20180:64;20176:635;;;-1:-1:-1;20274:1:0;20176:635;;;20305:13;;-1:-1:-1;;;;;20305:13:0;;;20297:21;;;;20293:518;;20339:11;;;;;;;:57;;;;-1:-1:-1;20381:14:0;;4461:12;;20365:30;;;;:::i;:::-;20354:6;:42;;20339:57;20335:163;;;20431:12;;;20417:27;;;;:13;:27;;;;;:32;;-1:-1:-1;;;;;;20417:32:0;-1:-1:-1;;;;;20417:32:0;;;;;20468:14;;;20431:12;20468:14;;;:::i;:::-;;;;;;20335:163;-1:-1:-1;20525:8:0;;20293:518;;;20561:13;;-1:-1:-1;;;;;20561:13:0;;;20555:19;;;;20551:260;;-1:-1:-1;20605:9:0;;-1:-1:-1;;;;;20629:10:0;;20642:1;20629:10;;;:4;:10;;;;;;;;:14;;;20658:9;:15;;;;;:19;20551:260;;;-1:-1:-1;20723:13:0;;-1:-1:-1;;;;;20751:10:0;;20764:1;20751:10;;;:4;:10;;;;;;;;:14;;;20780:9;:15;;;;;:19;20551:260;20827:14;;20823:183;;20858:12;20897:3;20874:19;20883:10;20874:6;:19;:::i;:::-;20873:27;;;;:::i;:::-;20858:42;-1:-1:-1;20924:13:0;20858:42;20924:6;:13;:::i;:::-;20915:22;;20952:42;20968:4;20982;20989;20952:15;:42::i;:::-;20843:163;20823:183;21022:21;;;;21018:459;;;-1:-1:-1;;;;;21075:35:0;;;;;;:29;:35;;;;;;;;21074:36;:92;;;;-1:-1:-1;;;;;;21133:33:0;;;;;;:29;:33;;;;;;;;21132:34;21074:92;:132;;;;-1:-1:-1;21193:13:0;;-1:-1:-1;;;;;21187:19:0;;;21193:13;;21187:19;;21074:132;21070:396;;;-1:-1:-1;;;;;4590:18:0;;21241:15;4590:18;;;;;;;;;;;21342:15;;21322:16;21332:6;4590:18;21322:16;:::i;:::-;:35;;21292:158;;;;-1:-1:-1;;;21292:158:0;;17150:2:1;21292:158:0;;;17132:21:1;17189:2;17169:18;;;17162:30;17228:34;17208:18;;;17201:62;-1:-1:-1;;;17279:18:1;;;17272:46;17335:19;;21292:158:0;16948:412:1;21292:158:0;21222:244;21070:396;21489:33;21505:4;21511:2;21515:6;21489:15;:33::i;:::-;18960:2570;;;18883:2647;;;:::o;9725:315::-;9023:1;9854:7;;:18;9850:88;;9896:30;;-1:-1:-1;;;9896:30:0;;;;;;;;;;;9850:88;9023:1;10015:7;:17;9725:315::o;2025:285::-;2104:4;2153:6;2128:21;:31;;2120:73;;;;-1:-1:-1;;;2120:73:0;;17567:2:1;2120:73:0;;;17549:21:1;17606:2;17586:18;;;17579:30;17645:31;17625:18;;;17618:59;17694:18;;2120:73:0;17365:353:1;2120:73:0;2207:12;2225:9;-1:-1:-1;;;;;2225:14:0;2247:6;2225:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2206:52:0;;2025:285;-1:-1:-1;;;;;2025:285:0:o;6368:614::-;-1:-1:-1;;;;;6508:20:0;;6500:70;;;;-1:-1:-1;;;6500:70:0;;18135:2:1;6500:70:0;;;18117:21:1;18174:2;18154:18;;;18147:30;18213:34;18193:18;;;18186:62;-1:-1:-1;;;18264:18:1;;;18257:35;18309:19;;6500:70:0;17933:401:1;6500:70:0;-1:-1:-1;;;;;6589:23:0;;6581:71;;;;-1:-1:-1;;;6581:71:0;;18541:2:1;6581:71:0;;;18523:21:1;18580:2;18560:18;;;18553:30;18619:34;18599:18;;;18592:62;-1:-1:-1;;;18670:18:1;;;18663:33;18713:19;;6581:71:0;18339:399:1;6581:71:0;-1:-1:-1;;;;;6689:17:0;;6665:21;6689:17;;;;;;;;;;;6725:23;;;;6717:74;;;;-1:-1:-1;;;6717:74:0;;18945:2:1;6717:74:0;;;18927:21:1;18984:2;18964:18;;;18957:30;19023:34;19003:18;;;18996:62;-1:-1:-1;;;19074:18:1;;;19067:36;19120:19;;6717:74:0;18743:402:1;6717:74:0;-1:-1:-1;;;;;6827:17:0;;;:9;:17;;;;;;;;;;;6847:22;;;6827:42;;6891:20;;;;;;;;:30;;6863:6;;6827:9;6891:30;;6863:6;;6891:30;:::i;:::-;;;;;;;;6956:9;-1:-1:-1;;;;;6939:35:0;6948:6;-1:-1:-1;;;;;6939:35:0;;6967:6;6939:35;;;;160:25:1;;148:2;133:18;;14:177;6939:35:0;;;;;;;;6489:493;6368:614;;;:::o;21968:857::-;22115:16;;;22129:1;22115:16;;;;;;;;22057:21;;22032:22;;22115:16;22129:1;22115:16;;;;;;;;;;-1:-1:-1;22115:16:0;22091:40;;22160:4;22142;22147:1;22142:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22142:23:0;;;:7;;;;;;;;;;:23;;;;22186:15;;:22;;;-1:-1:-1;;;22186:22:0;;;;:15;;;;;:20;;:22;;;;;22142:7;;22186:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22176:4;22181:1;22176:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22176:32:0;;;:7;;;;;;;;;:32;22225:15;;:196;;-1:-1:-1;;;22225:196:0;;:15;;;:66;;:196;;22306:11;;22225:15;;22348:4;;22375;;22395:15;;22225:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22221:243;;22446:7;;21968:857;:::o;22221:243::-;22476:18;22497:38;22521:14;22497:21;:38;:::i;:::-;22476:59;;22546:12;22573:9;;22562:8;;:20;;;;:::i;:::-;22546:37;-1:-1:-1;22594:22:0;22642:8;22546:37;22649:1;22642:8;:::i;:::-;22619:19;22633:4;22619:10;:19;:::i;:::-;:32;;;;:::i;:::-;22594:57;-1:-1:-1;22668:18:0;;22664:97;;22711:11;;22703:46;;-1:-1:-1;;;;;22711:11:0;22734:14;22703:30;:46::i;:::-;;22664:97;22778:39;;;9979:25:1;;;10035:2;10020:18;;10013:34;;;22778:39:0;;9952:18:1;22778:39:0;;;;;;;22021:804;;;;;21968:857;:::o;14387:2175::-;9645:21;:19;:21::i;:::-;14462:15:::1;14448:11;:29:::0;14524:15:::1;::::0;14509:12:::1;::::0;14488:18:::1;::::0;14509:30:::1;::::0;::::1;:::i;:::-;14488:51;;14552:15;14594:8;;14570:21;:32;;;;:::i;:::-;14552:50:::0;-1:-1:-1;14613:16:0::1;14632:11;14642:1;14552:50:::0;14632:11:::1;:::i;:::-;14613:30;;14668:7;14656:8;;:19;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;14780:13:0::1;::::0;-1:-1:-1;14926:14:0::1;:10:::0;14939:1:::1;14926:14;:::i;:::-;14841:16;14856:1;14841:12;:16;:::i;:::-;14907:12;::::0;14814:106:::1;::::0;;14831:27;::::1;14814:106;::::0;::::1;20896:19:1::0;14860:16:0::1;20931:12:1::0;;;20924:28;14878:15:0::1;20968:12:1::0;;;;20961:28;;;;14895:10:0::1;21023:15:1::0;;-1:-1:-1;;;;;;21019:53:1;21005:12;;;20998:75;21089:13;;;21082:29;21127:13;;14814:106:0::1;;;;;;;;;;;;14804:117;;;;;;14796:126;;:145;;;;:::i;:::-;14780:161:::0;-1:-1:-1;14952:13:0::1;15098:14;:10:::0;15111:1:::1;15098:14;:::i;:::-;15003:16;15031;15046:1;15031:12;:16;:::i;:::-;15067:12;::::0;14986:106:::1;::::0;::::1;::::0;;15021:27:::1;::::0;15050:15:::1;::::0;15081:10:::1;::::0;14986:106:::1;;21509:19:1::0;;;21553:2;21544:12;;21537:28;;;;21590:2;21581:12;;21574:28;;;;21627:2;21618:12;;;21611:28;;;;21674:15;-1:-1:-1;;;;;;21670:53:1;21664:3;21655:13;;21648:76;21749:3;21740:13;;21268:491;14986:106:0::1;;;;;;;;;;;;;14976:117;;;;;;14968:126;;:145;;;;:::i;:::-;14952:161:::0;-1:-1:-1;15124:13:0::1;15270:14;:10:::0;15283:1:::1;15270:14;:::i;:::-;15175:15;15192:16;15210:10;15222:12;;15261:1;15246:12;:16;;;;:::i;:::-;15158:106;::::0;;::::1;::::0;::::1;22005:19:1::0;;;;22040:12;;22033:28;;;;-1:-1:-1;;;;;;22099:2:1;22095:15;;;22091:53;22077:12;;;22070:75;;;;22161:12;;;22154:28;15236:27:0::1;22198:13:1::0;;;22191:29;22236:13;;15158:106:0::1;;;;;;;;;;;;15148:117;;;;;;15140:126;;:145;;;;:::i;:::-;15124:161:::0;-1:-1:-1;15296:13:0::1;15442:14;:10:::0;15455:1:::1;15442:14;:::i;:::-;15347:10;15359:15;15386:16;15401:1;15386:12;:16;:::i;:::-;15405:12;::::0;15330:106:::1;::::0;22521:2:1;22517:15;;;;-1:-1:-1;;;;;;22513:53:1;15330:106:0::1;::::0;::::1;22501:66:1::0;22583:12;;;22576:28;;;;15376:27:0::1;22620:12:1::0;;;22613:28;22657:12;;;22650:28;15419:16:0::1;22694:13:1::0;;;22687:29;22732:13;;15330:106:0::1;;;;;;;;;;;;15320:117;;;;;;15312:126;;:145;;;;:::i;:::-;15296:161:::0;-1:-1:-1;15468:13:0::1;15614:14;:10:::0;15627:1:::1;15614:14;:::i;:::-;15519:12;::::0;15533:10:::1;15545:16;15563:15;15590:16;15605:1;15590:12;:16;:::i;:::-;15580:27;15502:106;;;;;;;;;;;22997:19:1::0;;;23054:2;23050:15;;;;-1:-1:-1;;;;;;23046:53:1;23041:2;23032:12;;23025:75;23125:2;23116:12;;23109:28;;;;23162:2;23153:12;;23146:28;23199:3;23190:13;;23183:29;23237:3;23228:13;;22756:491;15502:106:0::1;;;;;;;;;;;;;15492:117;;;;;;15484:126;;:145;;;;:::i;:::-;15468:161;;15642:15;15660:13;:38;15692:5;15674:15;;:23;;;;:::i;:::-;15660:38;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;15660:38:0::1;15642:56;;15709:15;15727:13;:38;15759:5;15741:15;;:23;;;;:::i;:::-;15727:38;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;15727:38:0::1;15709:56;;15776:15;15794:13;:38;15826:5;15808:15;;:23;;;;:::i;:::-;15794:38;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;15794:38:0::1;15776:56;;15843:15;15861:13;:38;15893:5;15875:15;;:23;;;;:::i;:::-;15861:38;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;15861:38:0::1;15843:56;;15910:15;15928:13;:38;15960:5;15942:15;;:23;;;;:::i;:::-;15928:38:::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15928:38:0;;15997:12:::1;::::0;15979:15:::1;:30:::0;-1:-1:-1;;;;;15928:38:0::1;::::0;-1:-1:-1;16043:25:0::1;:15;16061:7;16043:25;:::i;:::-;-1:-1:-1::0;;;;;16022:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;:46;;;;16079:4:::1;:13:::0;;;;;:25;;16096:8;;16022:18;16079:25:::1;::::0;16096:8;;16079:25:::1;:::i;:::-;::::0;;;-1:-1:-1;16138:25:0::1;::::0;-1:-1:-1;16138:15:0::1;16156:7;16138:25;:::i;:::-;-1:-1:-1::0;;;;;16117:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;:46;;;;16174:4:::1;:13:::0;;;;;:25;;16191:8;;16117:18;16174:25:::1;::::0;16191:8;;16174:25:::1;:::i;:::-;::::0;;;-1:-1:-1;16233:25:0::1;::::0;-1:-1:-1;16233:15:0::1;16251:7;16233:25;:::i;:::-;-1:-1:-1::0;;;;;16212:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;:46;;;;16269:4:::1;:13:::0;;;;;:25;;16286:8;;16212:18;16269:25:::1;::::0;16286:8;;16269:25:::1;:::i;:::-;::::0;;;-1:-1:-1;16328:25:0::1;::::0;-1:-1:-1;16328:15:0::1;16346:7;16328:25;:::i;:::-;-1:-1:-1::0;;;;;16307:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;:46;;;;16364:4:::1;:13:::0;;;;;:25;;16381:8;;16307:18;16364:25:::1;::::0;16381:8;;16364:25:::1;:::i;:::-;::::0;;;-1:-1:-1;16423:25:0::1;::::0;-1:-1:-1;16423:15:0::1;16441:7;16423:25;:::i;:::-;-1:-1:-1::0;;;;;16402:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;:46;;;;16459:4:::1;:13:::0;;;;;:25;;16476:8;;16402:18;16459:25:::1;::::0;16476:8;;16459:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;16502:52:0::1;::::0;;-1:-1:-1;;;;;23567:15:1;;;23549:34;;23619:15;;;23614:2;23599:18;;23592:43;23671:15;;;23651:18;;;23644:43;23723:15;;;23718:2;23703:18;;23696:43;23776:15;;23770:3;23755:19;;23748:44;16502:52:0;;::::1;::::0;;;;23498:3:1;16502:52:0;;::::1;14437:2125;;;;;;;;;;;;;9689:20:::0;8980:1;10231:7;:21;10048:212;196:548:1;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1630:456::-;1707:6;1715;1723;1776:2;1764:9;1755:7;1751:23;1747:32;1744:52;;;1792:1;1789;1782:12;1744:52;1831:9;1818:23;1850:31;1875:5;1850:31;:::i;:::-;1900:5;-1:-1:-1;1957:2:1;1942:18;;1929:32;1970:33;1929:32;1970:33;:::i;:::-;1630:456;;2022:7;;-1:-1:-1;;;2076:2:1;2061:18;;;;2048:32;;1630:456::o;2091:180::-;2150:6;2203:2;2191:9;2182:7;2178:23;2174:32;2171:52;;;2219:1;2216;2209:12;2171:52;-1:-1:-1;2242:23:1;;2091:180;-1:-1:-1;2091:180:1:o;2276:118::-;2362:5;2355:13;2348:21;2341:5;2338:32;2328:60;;2384:1;2381;2374:12;2399:241;2455:6;2508:2;2496:9;2487:7;2483:23;2479:32;2476:52;;;2524:1;2521;2514:12;2476:52;2563:9;2550:23;2582:28;2604:5;2582:28;:::i;:::-;2629:5;2399:241;-1:-1:-1;;;2399:241:1:o;2834:454::-;2929:6;2937;2945;2953;2961;3014:3;3002:9;2993:7;2989:23;2985:33;2982:53;;;3031:1;3028;3021:12;2982:53;-1:-1:-1;;3054:23:1;;;3124:2;3109:18;;3096:32;;-1:-1:-1;3175:2:1;3160:18;;3147:32;;3226:2;3211:18;;3198:32;;-1:-1:-1;3277:3:1;3262:19;3249:33;;-1:-1:-1;2834:454:1;-1:-1:-1;2834:454:1:o;3501:247::-;3560:6;3613:2;3601:9;3592:7;3588:23;3584:32;3581:52;;;3629:1;3626;3619:12;3581:52;3668:9;3655:23;3687:31;3712:5;3687:31;:::i;3753:444::-;3824:6;3832;3840;3893:2;3881:9;3872:7;3868:23;3864:32;3861:52;;;3909:1;3906;3899:12;3861:52;3945:9;3932:23;3922:33;;4005:2;3994:9;3990:18;3977:32;4018:28;4040:5;4018:28;:::i;:::-;4065:5;-1:-1:-1;4122:2:1;4107:18;;4094:32;4135:30;4094:32;4135:30;:::i;:::-;4184:7;4174:17;;;3753:444;;;;;:::o;4202:382::-;4267:6;4275;4328:2;4316:9;4307:7;4303:23;4299:32;4296:52;;;4344:1;4341;4334:12;4296:52;4383:9;4370:23;4402:31;4427:5;4402:31;:::i;:::-;4452:5;-1:-1:-1;4509:2:1;4494:18;;4481:32;4522:30;4481:32;4522:30;:::i;:::-;4571:7;4561:17;;;4202:382;;;;;:::o;4589:388::-;4657:6;4665;4718:2;4706:9;4697:7;4693:23;4689:32;4686:52;;;4734:1;4731;4724:12;4686:52;4773:9;4760:23;4792:31;4817:5;4792:31;:::i;:::-;4842:5;-1:-1:-1;4899:2:1;4884:18;;4871:32;4912:33;4871:32;4912:33;:::i;4982:380::-;5061:1;5057:12;;;;5104;;;5125:61;;5179:4;5171:6;5167:17;5157:27;;5125:61;5232:2;5224:6;5221:14;5201:18;5198:38;5195:161;;5278:10;5273:3;5269:20;5266:1;5259:31;5313:4;5310:1;5303:15;5341:4;5338:1;5331:15;5195:161;;4982:380;;;:::o;5776:356::-;5978:2;5960:21;;;5997:18;;;5990:30;6056:34;6051:2;6036:18;;6029:62;6123:2;6108:18;;5776:356::o;6137:127::-;6198:10;6193:3;6189:20;6186:1;6179:31;6229:4;6226:1;6219:15;6253:4;6250:1;6243:15;6269:416;6358:1;6395:5;6358:1;6409:270;6430:7;6420:8;6417:21;6409:270;;;6489:4;6485:1;6481:6;6477:17;6471:4;6468:27;6465:53;;;6498:18;;:::i;:::-;6548:7;6538:8;6534:22;6531:55;;;6568:16;;;;6531:55;6647:22;;;;6607:15;;;;6409:270;;;6413:3;6269:416;;;;;:::o;6690:806::-;6739:5;6769:8;6759:80;;-1:-1:-1;6810:1:1;6824:5;;6759:80;6858:4;6848:76;;-1:-1:-1;6895:1:1;6909:5;;6848:76;6940:4;6958:1;6953:59;;;;7026:1;7021:130;;;;6933:218;;6953:59;6983:1;6974:10;;6997:5;;;7021:130;7058:3;7048:8;7045:17;7042:43;;;7065:18;;:::i;:::-;-1:-1:-1;;7121:1:1;7107:16;;7136:5;;6933:218;;7235:2;7225:8;7222:16;7216:3;7210:4;7207:13;7203:36;7197:2;7187:8;7184:16;7179:2;7173:4;7170:12;7166:35;7163:77;7160:159;;;-1:-1:-1;7272:19:1;;;7304:5;;7160:159;7351:34;7376:8;7370:4;7351:34;:::i;:::-;7421:6;7417:1;7413:6;7409:19;7400:7;7397:32;7394:58;;;7432:18;;:::i;:::-;7470:20;;6690:806;-1:-1:-1;;;6690:806:1:o;7501:140::-;7559:5;7588:47;7629:4;7619:8;7615:19;7609:4;7588:47;:::i;7646:127::-;7707:10;7702:3;7698:20;7695:1;7688:31;7738:4;7735:1;7728:15;7762:4;7759:1;7752:15;7778:120;7818:1;7844;7834:35;;7849:18;;:::i;:::-;-1:-1:-1;7883:9:1;;7778:120::o;8317:168::-;8390:9;;;8421;;8438:15;;;8432:22;;8418:37;8408:71;;8459:18;;:::i;8904:125::-;8969:9;;;8990:10;;;8987:36;;;9003:18;;:::i;9394:406::-;9596:2;9578:21;;;9635:2;9615:18;;;9608:30;9674:34;9669:2;9654:18;;9647:62;-1:-1:-1;;;9740:2:1;9725:18;;9718:40;9790:3;9775:19;;9394:406::o;13982:184::-;14052:6;14105:2;14093:9;14084:7;14080:23;14076:32;14073:52;;;14121:1;14118;14111:12;14073:52;-1:-1:-1;14144:16:1;;13982:184;-1:-1:-1;13982:184:1:o;14450:245::-;14517:6;14570:2;14558:9;14549:7;14545:23;14541:32;14538:52;;;14586:1;14583;14576:12;14538:52;14618:9;14612:16;14637:28;14659:5;14637:28;:::i;16675:135::-;16714:3;16735:17;;;16732:43;;16755:18;;:::i;:::-;-1:-1:-1;16802:1:1;16791:13;;16675:135::o;16815:128::-;16882:9;;;16903:11;;;16900:37;;;16917:18;;:::i;19282:127::-;19343:10;19338:3;19334:20;19331:1;19324:31;19374:4;19371:1;19364:15;19398:4;19395:1;19388:15;19414:251;19484:6;19537:2;19525:9;19516:7;19512:23;19508:32;19505:52;;;19553:1;19550;19543:12;19505:52;19585:9;19579:16;19604:31;19629:5;19604:31;:::i;19670:980::-;19932:4;19980:3;19969:9;19965:19;20011:6;20000:9;19993:25;20037:2;20075:6;20070:2;20059:9;20055:18;20048:34;20118:3;20113:2;20102:9;20098:18;20091:31;20142:6;20177;20171:13;20208:6;20200;20193:22;20246:3;20235:9;20231:19;20224:26;;20285:2;20277:6;20273:15;20259:29;;20306:1;20316:195;20330:6;20327:1;20324:13;20316:195;;;20395:13;;-1:-1:-1;;;;;20391:39:1;20379:52;;20486:15;;;;20451:12;;;;20427:1;20345:9;20316:195;;;-1:-1:-1;;;;;;;20567:32:1;;;;20562:2;20547:18;;20540:60;-1:-1:-1;;;20631:3:1;20616:19;20609:35;20528:3;19670:980;-1:-1:-1;;;19670:980:1:o;21151:112::-;21183:1;21209;21199:35;;21214:18;;:::i;:::-;-1:-1:-1;21248:9:1;;21151:112::o

Swarm Source

ipfs://027575fc8786120347154a979533ba6035bb9e665295ceedc15d9d56bac64ae5

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.