ETH Price: $1,977.53 (-1.74%)
 

More Info

Private Name Tags

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Approve243522952026-01-31 3:54:4729 days ago1769831687IN
0x142a774E...5acB646D0
0 ETH0.000002330.09614758
Approve240867832025-12-25 2:54:2366 days ago1766631263IN
0x142a774E...5acB646D0
0 ETH0.000003060.12591276
Approve240867812025-12-25 2:53:5966 days ago1766631239IN
0x142a774E...5acB646D0
0 ETH0.000003050.12561463
Approve240866492025-12-25 2:27:3566 days ago1766629655IN
0x142a774E...5acB646D0
0 ETH0.000003090.12720611
Transfer234422122025-09-25 19:43:11157 days ago1758829391IN
0x142a774E...5acB646D0
0 ETH0.000023721.07788903
Approve233286102025-09-09 22:45:23173 days ago1757457923IN
0x142a774E...5acB646D0
0 ETH0.000005990.22758427
Approve233285952025-09-09 22:42:23173 days ago1757457743IN
0x142a774E...5acB646D0
0 ETH0.000005360.22042362
Approve232998982025-09-05 22:29:59177 days ago1757111399IN
0x142a774E...5acB646D0
0 ETH0.000006990.28748813
Approve232234542025-08-26 6:19:59187 days ago1756189199IN
0x142a774E...5acB646D0
0 ETH0.000008470.34860559
Approve231892062025-08-21 11:38:11192 days ago1755776291IN
0x142a774E...5acB646D0
0 ETH0.000008310.34193427
Approve231892052025-08-21 11:37:59192 days ago1755776279IN
0x142a774E...5acB646D0
0 ETH0.000007710.31723755
Approve231330322025-08-13 15:29:59200 days ago1755098999IN
0x142a774E...5acB646D0
0 ETH0.000129165.31091009
Approve230924672025-08-07 23:29:23206 days ago1754609363IN
0x142a774E...5acB646D0
0 ETH0.000009860.40551526
Approve229981542025-07-25 19:10:35219 days ago1753470635IN
0x142a774E...5acB646D0
0 ETH0.000059782.45820792
Approve229981012025-07-25 18:59:47219 days ago1753469987IN
0x142a774E...5acB646D0
0 ETH0.000011010.45309674
Approve229683062025-07-21 14:56:59223 days ago1753109819IN
0x142a774E...5acB646D0
0 ETH0.000108054.44313681
Approve228890442025-07-10 13:21:11234 days ago1752153671IN
0x142a774E...5acB646D0
0 ETH0.000115054.73076985
Approve228890232025-07-10 13:16:59234 days ago1752153419IN
0x142a774E...5acB646D0
0 ETH0.000059112.43054839
Approve228273292025-07-01 22:20:23243 days ago1751408423IN
0x142a774E...5acB646D0
0 ETH0.000023980.91126862
Approve228273202025-07-01 22:18:23243 days ago1751408303IN
0x142a774E...5acB646D0
0 ETH0.000017290.71124486
Approve228273082025-07-01 22:15:59243 days ago1751408159IN
0x142a774E...5acB646D0
0 ETH0.000023060.94858606
Approve228273062025-07-01 22:15:35243 days ago1751408135IN
0x142a774E...5acB646D0
0 ETH0.000024180.99442249
Approve227254782025-06-17 16:40:35257 days ago1750178435IN
0x142a774E...5acB646D0
0 ETH0.000100354.12663871
Approve226352712025-06-05 1:53:47269 days ago1749088427IN
0x142a774E...5acB646D0
0 ETH0.000038911.6
Approve226352702025-06-05 1:53:35269 days ago1749088415IN
0x142a774E...5acB646D0
0 ETH0.000038911.6
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer199788112024-05-29 23:32:59641 days ago1717025579
0x142a774E...5acB646D0
0.60561357 ETH
Transfer199788112024-05-29 23:32:59641 days ago1717025579
0x142a774E...5acB646D0
0.60561357 ETH
Transfer198775402024-05-15 19:41:59655 days ago1715802119
0x142a774E...5acB646D0
0.82384431 ETH
Transfer198775402024-05-15 19:41:59655 days ago1715802119
0x142a774E...5acB646D0
0.82384431 ETH
Transfer197874892024-05-03 5:26:11667 days ago1714713971
0x142a774E...5acB646D0
0.97235026 ETH
Transfer197874892024-05-03 5:26:11667 days ago1714713971
0x142a774E...5acB646D0
0.86284941 ETH
Transfer197240422024-04-24 8:27:23676 days ago1713947243
0x142a774E...5acB646D0
0.02510763 ETH
Transfer197240422024-04-24 8:27:23676 days ago1713947243
0x142a774E...5acB646D0
0.5870622 ETH
Transfer197240422024-04-24 8:27:23676 days ago1713947243
0x142a774E...5acB646D0
0.72167069 ETH
Transfer196221332024-04-10 2:04:59690 days ago1712714699
0x142a774E...5acB646D0
0.53980363 ETH
Transfer196221332024-04-10 2:04:59690 days ago1712714699
0x142a774E...5acB646D0
0.53980363 ETH
Transfer194496472024-03-16 19:52:47715 days ago1710618767
0x142a774E...5acB646D0
0.47643268 ETH
Transfer194496472024-03-16 19:52:47715 days ago1710618767
0x142a774E...5acB646D0
0.47643268 ETH
Transfer192299042024-02-15 0:56:47746 days ago1707958607
0x142a774E...5acB646D0
0.8662195 ETH
Transfer192299042024-02-15 0:56:47746 days ago1707958607
0x142a774E...5acB646D0
0.8662195 ETH
Transfer189829422024-01-11 9:58:23780 days ago1704967103
0x142a774E...5acB646D0
1.24141013 ETH
Transfer189829422024-01-11 9:58:23780 days ago1704967103
0x142a774E...5acB646D0
0.95317736 ETH
Transfer188310472023-12-21 1:43:11801 days ago1703122991
0x142a774E...5acB646D0
0.93133439 ETH
Transfer188310472023-12-21 1:43:11801 days ago1703122991
0x142a774E...5acB646D0
0.3774361 ETH
Transfer188310472023-12-21 1:43:11801 days ago1703122991
0x142a774E...5acB646D0
1.06080843 ETH
Transfer187918612023-12-15 13:37:35807 days ago1702647455
0x142a774E...5acB646D0
0.86607867 ETH
Transfer187918612023-12-15 13:37:35807 days ago1702647455
0x142a774E...5acB646D0
0.86815647 ETH
Transfer187918612023-12-15 13:37:35807 days ago1702647455
0x142a774E...5acB646D0
1.56248284 ETH
Transfer187848342023-12-14 14:00:47808 days ago1702562447
0x142a774E...5acB646D0
0.51963938 ETH
Transfer187848342023-12-14 14:00:47808 days ago1702562447
0x142a774E...5acB646D0
1.67244134 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x3eaeE331...38d45154A
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
SaitaRealtyV2

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : saita.sol
// SPDX-License-Identifier: NOLICENSE
pragma solidity ^0.8.10;

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

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() {
        _setOwner(_msgSender());
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addTreasuryETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint treasury);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

}

contract SaitaRealtyV2 is IERC20, Ownable {

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _isBot;
    mapping(address => bool) private _isPair;

    address[] private _excluded;
    
    bool private swapping;

    IRouter public router;
    address public pair;

    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 12e10 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    
    uint256 public swapTokensAtAmount = 1_000 * 10 ** 6;
    uint256 public maxTxAmount = 100_000_000_000 * 10**_decimals;
    
    // Anti Dump //
    mapping (address => uint256) public _lastTrade;
    bool public coolDownEnabled = true;
    uint256 public coolDownTime = 30 seconds;

    address public capitalAddress = 0x22D5c2837FFB86392C81D3Be0aDe307F81AF10C1;
    address public marketingAddress = 0x2084f438b1EFf6Bd5FbdE57215eaB741CAC7aDb7;
    address public burnAddress = 0x000000000000000000000000000000000000dEaD;

    address public USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;

    string private constant _name = "SaitaRealtyV2";
    string private constant _symbol = "SRLTY";


    struct Taxes {
      uint256 reflection;
      uint256 capital;
      uint256 marketing;
      uint256 burn;
      uint256 treasury;
    }

    Taxes private taxes = Taxes(10,10,10,10,50);

    struct TotFeesPaidStruct {
        uint256 reflection;
        uint256 capital;
        uint256 marketing;
        uint256 burn;
        uint256 treasury;
    }

    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rReflection;
      uint256 rCapital;
      uint256 rMarketing;
      uint256 rBurn;
      uint256 rTreasury;
      uint256 tTransferAmount;
      uint256 tReflection;
      uint256 tCapital;
      uint256 tMarketing;
      uint256 tBurn;
      uint256 tTreasury;
    }
    
    struct splitETHStruct{
        uint256 capital;
        uint256 marketing;
    }

    splitETHStruct private splitETH = splitETHStruct(40,10);

    struct ETHAmountStruct{
        uint256 capital;
        uint256 marketing;
    }

    ETHAmountStruct public ETHAmount;

    event FeesChanged();

    modifier lockTheSwap {
        swapping = true;
        _;
        swapping = false;
    }

    modifier addressValidation(address _addr) {
        require(_addr != address(0), 'SaitaRealty: Zero address');
        _;
    }

    constructor (address routerAddress, address owner_) {
        IRouter _router = IRouter(routerAddress);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        
        addPair(pair);
    
        excludeFromReward(pair);

        _setOwner(owner_);

        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[capitalAddress] = true;
        _isExcludedFromFee[burnAddress] = true;
        _isExcludedFromFee[marketingAddress] = true;

        emit Transfer(address(0), owner(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");

        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), currentAllowance - 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");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length <= 200, "Invalid length");
        require(account != owner(), "Owner cannot be excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }


    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }


    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function addPair(address _pair) public onlyOwner {
        _isPair[_pair] = true;
    }

    function removePair(address _pair) public onlyOwner {
        _isPair[_pair] = false;
    }

    function isPair(address account) public view returns(bool){
        return _isPair[account];
    }

    function setTaxes(uint256 _reflection, uint256 _capital, uint256 _marketing, uint256 _burn, uint256 _treasury) public onlyOwner {
        taxes.reflection = _reflection;
        taxes.capital = _capital;
        taxes.marketing = _marketing;
        taxes.burn = _burn;
        taxes.treasury = _treasury;
        emit FeesChanged();
    }

    function setSplitETH(uint256 _capital, uint256 _marketing) public onlyOwner {
        splitETH.capital = _capital;
        splitETH.marketing = _marketing;
        emit FeesChanged();
    }

    function _reflectReflection(uint256 rReflection, uint256 tReflection) private {
        _rTotal -=rReflection;
        totFeesPaid.reflection += tReflection;
    }

    function _takeTreasury(uint256 rTreasury, uint256 tTreasury) private {
        totFeesPaid.treasury += tTreasury;
        if(_isExcluded[address(this)]) _tOwned[address(this)] += tTreasury;
        _rOwned[address(this)] += rTreasury;
    }

    function _takeCapital(uint256 rCapital, uint256 tCapital) private {
        totFeesPaid.capital += tCapital;
        if(_isExcluded[capitalAddress]) _tOwned[capitalAddress] += tCapital;
        _rOwned[capitalAddress] +=rCapital;
    }
    
    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private{
        totFeesPaid.marketing += tMarketing;
        if(_isExcluded[marketingAddress]) _tOwned[marketingAddress] += tMarketing;
        _rOwned[marketingAddress] += rMarketing;
    }

    function _takeBurn(uint256 rBurn, uint256 tBurn) private {
        totFeesPaid.burn += tBurn;
        if(_isExcluded[marketingAddress])_tOwned[burnAddress] += tBurn;
        _rOwned[burnAddress] += rBurn;
    }

    function _getValues(uint256 tAmount, uint8 takeFee) private  returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rReflection, to_return.rCapital,to_return.rMarketing, to_return.rBurn, to_return.rTreasury) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, uint8 takeFee) private returns (valuesFromGetValues memory s) {

        if(takeFee == 0) {
          s.tTransferAmount = tAmount;
          return s;
        } else if(takeFee == 1){
            s.tReflection = (tAmount*taxes.reflection)/1000;
            s.tCapital = (tAmount*taxes.capital)/1000;
            s.tMarketing = tAmount*taxes.marketing/1000;
            s.tBurn = tAmount*taxes.burn/1000;
            s.tTreasury = tAmount*taxes.treasury/1000;
            ETHAmount.capital += s.tTreasury*splitETH.capital/taxes.treasury;
            ETHAmount.marketing += s.tTreasury*splitETH.marketing/taxes.treasury;
            s.tTransferAmount = tAmount-s.tReflection-s.tCapital-s.tTreasury-s.tMarketing-s.tBurn;
            return s;
        } else {
            s.tReflection = tAmount*taxes.reflection/1000;
            s.tMarketing = tAmount*taxes.marketing/1000;
            s.tBurn = tAmount*taxes.burn/1000;
            s.tTreasury = tAmount*splitETH.marketing/1000;
            ETHAmount.marketing += s.tTreasury;
            s.tTransferAmount = tAmount-s.tReflection-s.tTreasury-s.tMarketing-s.tBurn;
            return s;
        }
        
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, uint8 takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rReflection,uint256 rCapital,uint256 rMarketing,uint256 rBurn,uint256 rTreasury) {
        rAmount = tAmount*currentRate;

        if(takeFee == 0) {
          return(rAmount, rAmount, 0,0,0,0,0);
        }else if(takeFee == 1){
            rReflection = s.tReflection*currentRate;
            rCapital = s.tCapital*currentRate;
            rTreasury = s.tTreasury*currentRate;
            rMarketing = s.tMarketing*currentRate;
            rBurn = s.tBurn*currentRate;
            rTransferAmount =  rAmount-rReflection-rCapital-rTreasury-rMarketing-rBurn;
            return (rAmount, rTransferAmount, rReflection,rCapital,rMarketing,rBurn,rTreasury);
        }
        else{
            rReflection = s.tReflection*currentRate;
            rTreasury = s.tTreasury*currentRate;
            rMarketing = s.tMarketing*currentRate;
            rBurn = s.tBurn*currentRate;
            rTransferAmount =  rAmount-rReflection-rTreasury-rMarketing-rBurn;
            return (rAmount, rTransferAmount, rReflection,0,rMarketing,rBurn,rTreasury);
        }

    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]];
        }

        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }


    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Zero amount");
        require(amount <= balanceOf(from),"Insufficient balance");
        require(!_isBot[from] && !_isBot[to], "You are a bot");
        require(amount <= maxTxAmount ,"Amount is exceeding maxTxAmount");

        if (coolDownEnabled) {
            uint256 timePassed = block.timestamp - _lastTrade[from];
            require(timePassed > coolDownTime, "You must wait coolDownTime");
        }
        
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to] && !swapping) {//check this !swapping
            if(_isPair[from] || _isPair[to]) {
                _tokenTransfer(from, to, amount, 1);
            } else {
                _tokenTransfer(from, to, amount, 2);
            }
        } else {
            _tokenTransfer(from, to, amount, 0);
        }

        _lastTrade[from] = block.timestamp;
        
        if(!swapping && from != pair && to != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            address[] memory path = new address[](3);
                path[0] = address(this);
                path[1] = router.WETH();
                path[2] = USDT;
            uint _amount = router.getAmountsOut(balanceOf(address(this)), path)[2];
            if(_amount >= swapTokensAtAmount) swapTokensForETH(balanceOf(address(this)));
        }

    }


    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, uint8 takeFee) private {

        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender] ) {  //from excluded
                _tOwned[sender] = _tOwned[sender] - tAmount;
        }
        if (_isExcluded[recipient]) { //to excluded
                _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        
        if(s.rReflection > 0 || s.tReflection > 0) _reflectReflection(s.rReflection, s.tReflection);
        if(s.rTreasury > 0 || s.tTreasury > 0) {
            _takeTreasury(s.rTreasury,s.tTreasury);
        }
        if(s.rCapital > 0 || s.tCapital > 0){
            _takeCapital(s.rCapital, s.tCapital);
            emit Transfer(sender, capitalAddress, s.tMarketing);
        }
        if(s.rMarketing > 0 || s.tMarketing > 0){
            _takeMarketing(s.rMarketing, s.tMarketing);
            emit Transfer(sender, marketingAddress, s.tMarketing);
        }
        if(s.rBurn > 0 || s.tBurn > 0){
            _takeBurn(s.rBurn, s.tBurn);
            emit Transfer(sender, burnAddress, s.tBurn);
        }
        
        emit Transfer(sender, recipient, s.tTransferAmount);
        if(s.tTreasury > 0){
        emit Transfer(sender, address(this), s.tTreasury);
        }
    }

    function swapTokensForETH(uint256 tokenAmount) private lockTheSwap {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
                path[0] = address(this);
                path[1] = router.WETH();

        _approve(address(this), address(router), tokenAmount);
        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        (bool success, ) = capitalAddress.call{value: (ETHAmount.capital * address(this).balance)/tokenAmount}("");
        require(success, 'ETH_TRANSFER_FAILED');
        ETHAmount.capital = 0;

        (success, ) = marketingAddress.call{value: (ETHAmount.marketing * address(this).balance)/tokenAmount}("");
        require(success, 'ETH_TRANSFER_FAILED');
        ETHAmount.marketing = 0;
    }

    function updateCapitalWallet(address newWallet) external onlyOwner addressValidation(newWallet) {
        require(capitalAddress != newWallet, 'SaitaRealty: Wallet already set');
        capitalAddress = newWallet;
        _isExcludedFromFee[capitalAddress];
    }

    function updateBurnWallet(address newWallet) external onlyOwner addressValidation(newWallet) {
        require(burnAddress != newWallet, 'SaitaRealty: Wallet already set');
        burnAddress = newWallet;
        _isExcludedFromFee[burnAddress];
    }

    function updateMarketingWallet(address newWallet) external onlyOwner addressValidation(newWallet) {
        require(marketingAddress != newWallet, 'SaitaRealty: Wallet already set');
        marketingAddress = newWallet;
        _isExcludedFromFee[marketingAddress];
    }

    function updateStableCoin(address _usdt) external onlyOwner  addressValidation(_usdt) {
        require(USDT != _usdt, 'SaitaRealty: Wallet already set');
        USDT = _usdt;
    }

    function updateMaxTxAmt(uint256 amount) external onlyOwner {
        require(amount >= 100);
        maxTxAmount = amount * 10**_decimals;
    }

    function updateSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(amount > 0);
        swapTokensAtAmount = amount * 10**6;
    }

    function updateCoolDownSettings(bool _enabled, uint256 _timeInSeconds) external onlyOwner{
        coolDownEnabled = _enabled;
        coolDownTime = _timeInSeconds * 1 seconds;
    }

    function setAntibot(address account, bool state) external onlyOwner{
        require(_isBot[account] != state, 'SaitaRealty: Value already set');
        _isBot[account] = state;
    }
    
    function bulkAntiBot(address[] memory accounts, bool state) external onlyOwner {
        require(accounts.length <= 100, "SaitaRealty: Invalid");
        for(uint256 i = 0; i < accounts.length; i++){
            _isBot[accounts[i]] = state;
        }
    }
    
    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner {
        router = IRouter(newRouter);
        pair = newPair;
        addPair(pair);
    }
    
    function isBot(address account) public view returns(bool){
        return _isBot[account];
    }
    
    function airdropTokens(address[] memory recipients, uint256[] memory amounts) external onlyOwner {
        require(recipients.length == amounts.length,"Invalid size");
         address sender = msg.sender;

         for(uint256 i; i<recipients.length; i++){
            address recipient = recipients[i];
            uint256 rAmount = amounts[i]*_getRate();
            _rOwned[sender] = _rOwned[sender]- rAmount;
            _rOwned[recipient] = _rOwned[recipient] + rAmount;
            emit Transfer(sender, recipient, amounts[i]);
         }

        }

    //Use this in case ETH are sent to the contract by mistake
    function rescueETH(uint256 weiAmount) external onlyOwner{
        require(address(this).balance >= weiAmount, "insufficient ETH balance");
        payable(owner()).transfer(weiAmount);
    }
    
    // Function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake)
    // Owner cannot transfer out catecoin from this smart contract
    function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

    receive() external payable {
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ETHAmount","outputs":[{"internalType":"uint256","name":"capital","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastTrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"capitalAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"removePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_capital","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"}],"name":"setSplitETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflection","type":"uint256"},{"internalType":"uint256","name":"_capital","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_treasury","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","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":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"reflection","type":"uint256"},{"internalType":"uint256","name":"capital","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBurnWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateCapitalWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_timeInSeconds","type":"uint256"}],"name":"updateCoolDownSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTxAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdt","type":"address"}],"name":"updateStableCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

0x6080604052620000126009600a62000ae1565b6200002390641bf08eb00062000af2565b600b819055620000369060001962000b2a565b620000449060001962000b41565b600c55633b9aca00600d556200005d6009600a62000ae1565b6200006e9064174876e80062000af2565b600e556010805460ff19166001179055601e601155601280546001600160a01b03199081167322d5c2837ffb86392c81d3be0ade307f81af10c117909155601380548216732084f438b1eff6bd5fbde57215eab741cac7adb717905560148054821661dead1790556015805490911673dac17f958d2ee523a2206206994597c13d831ec71790556040805160a081018252600a808252602080830182905282840182905260608301829052603260809093018390526016829055601782905560188290556019829055601a92909255825180840190935260288084529282018190529190556021553480156200016357600080fd5b506040516200471a3803806200471a833981016040819052620001869162000b78565b62000191336200048f565b60008290506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd919062000bb0565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000271919062000bb0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e5919062000bb0565b600980546001600160a01b0380861661010002610100600160a81b031990921691909117909155600a80549183166001600160a01b0319909216821790559091506200033190620004df565b600a5462000348906001600160a01b031662000552565b62000353836200048f565b600c54600160006200036d6000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160046000620003a76200077160201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526004909352818320805485166001908117909155601254821684528284208054861682179055601454821684528284208054861682179055601354909116835291208054909216179055620004356000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200047d91815260200190565b60405180910390a35050505062000c19565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200052e5760405162461bcd60e51b81526020600482018190526024820152600080516020620046fa83398151915260448201526064015b60405180910390fd5b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146200059d5760405162461bcd60e51b81526020600482018190526024820152600080516020620046fa833981519152604482015260640162000525565b6001600160a01b03811660009081526005602052604090205460ff1615620006085760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000525565b60085460c810156200064e5760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015260640162000525565b6000546001600160a01b0382811691161415620006ae5760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c756465640000000000000000604482015260640162000525565b6001600160a01b038116600090815260016020526040902054156200070b576001600160a01b038116600090815260016020526040902054620006f19062000780565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031690565b6000600c54821115620007e95760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000525565b6000620007f56200080a565b905062000803818462000bce565b9392505050565b600080806200081862000830565b909250905062000829818362000bce565b9250505090565b600c54600b546000918291825b600854811015620009985782600160006008848154811062000863576200086362000be5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620008d25750816002600060088481548110620008ab57620008ab62000be5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620008e957600c54600b54945094505050509091565b600160006008838154811062000903576200090362000be5565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000934908462000b41565b9250600260006008838154811062000950576200095062000be5565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000981908362000b41565b9150806200098f8162000bfb565b9150506200083d565b50600b54600c54620009ab919062000bce565b821015620009c357600c54600b549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a2357816000190482111562000a075762000a07620009cc565b8085161562000a1557918102915b93841c9390800290620009e7565b509250929050565b60008262000a3c5750600162000adb565b8162000a4b5750600062000adb565b816001811462000a64576002811462000a6f5762000a8f565b600191505062000adb565b60ff84111562000a835762000a83620009cc565b50506001821b62000adb565b5060208310610133831016604e8410600b841016171562000ab4575081810a62000adb565b62000ac08383620009e2565b806000190482111562000ad75762000ad7620009cc565b0290505b92915050565b60006200080360ff84168362000a2b565b600081600019048311821515161562000b0f5762000b0f620009cc565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262000b3c5762000b3c62000b14565b500690565b60008282101562000b565762000b56620009cc565b500390565b80516001600160a01b038116811462000b7357600080fd5b919050565b6000806040838503121562000b8c57600080fd5b62000b978362000b5b565b915062000ba76020840162000b5b565b90509250929050565b60006020828403121562000bc357600080fd5b620008038262000b5b565b60008262000be05762000be062000b14565b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141562000c125762000c12620009cc565b5060010190565b613ad18062000c296000396000f3fe60806040526004361061031e5760003560e01c80638c0b5e22116101ab578063b3839389116100f7578063e116554511610095578063ea2f0b371161006f578063ea2f0b3714610a50578063ee36e35914610a70578063f2fde38b14610a8a578063f887ea4014610aaa57600080fd5b8063e1165545146109e1578063e2f4560514610a01578063e5e31b1314610a1757600080fd5b8063d257b34f116100d1578063d257b34f14610945578063d2ce0db214610965578063dd62ed3e1461097b578063e0baeb29146109c157600080fd5b8063b3839389146108e5578063c2b7bbb614610905578063c54e44eb1461092557600080fd5b8063a5ece94111610164578063a9059cbb1161013e578063a9059cbb14610865578063aacebbe314610885578063af6c9c1d146108a5578063b31470a4146108c557600080fd5b8063a5ece941146107f8578063a87859f614610818578063a8aa1b311461084557600080fd5b80638c0b5e22146107075780638da5cb5b1461071d57806395d89b411461073b5780639ba5e4d5146107695780639e252f00146107b8578063a457c2d7146107d857600080fd5b8063437823ec1161026a578063706f693711610223578063715018a6116101fd578063715018a6146106695780637286ec321461067e57806388f82020146106ae5780638c0ae3df146106e757600080fd5b8063706f69371461060957806370a082311461062957806370d5ae051461064957600080fd5b8063437823ec146105305780634e2b57801461055057806352390c02146105705780635342acb41461059057806355879b21146105c95780635fcefa42146105e957600080fd5b80632d838119116102d75780633685d419116102b15780633685d4191461049757806339509351146104b75780633bbac579146104d757806340b28c2f1461051057600080fd5b80632d8381191461043b5780632e092fe81461045b578063313ce5671461047b57600080fd5b806306fdde031461032a578063095ea7b3146103725780630d65df9b146103a257806318160ddd146103c457806323b872dd146103e357806323cac1fd1461040357600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060408051808201909152600d81526c29b0b4ba30a932b0b63a3cab1960991b60208201525b60405161036991906132ce565b60405180910390f35b34801561037e57600080fd5b5061039261038d366004613338565b610acf565b6040519015158152602001610369565b3480156103ae57600080fd5b506103c26103bd366004613364565b610ae6565b005b3480156103d057600080fd5b50600b545b604051908152602001610369565b3480156103ef57600080fd5b506103926103fe366004613364565b610b92565b34801561040f57600080fd5b50601254610423906001600160a01b031681565b6040516001600160a01b039091168152602001610369565b34801561044757600080fd5b506103d56104563660046133a5565b610c41565b34801561046757600080fd5b506103c26104763660046133a5565b610cc5565b34801561048757600080fd5b5060405160098152602001610369565b3480156104a357600080fd5b506103c26104b23660046133be565b610d19565b3480156104c357600080fd5b506103926104d2366004613338565b610ed0565b3480156104e357600080fd5b506103926104f23660046133be565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561051c57600080fd5b506103c261052b3660046133db565b610f07565b34801561053c57600080fd5b506103c261054b3660046133be565b610f78565b34801561055c57600080fd5b506103c261056b366004613414565b610fc6565b34801561057c57600080fd5b506103c261058b3660046133be565b611027565b34801561059c57600080fd5b506103926105ab3660046133be565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105d557600080fd5b506103c26105e43660046133be565b61121c565b3480156105f557600080fd5b506103c2610604366004613436565b6112c5565b34801561061557600080fd5b506103c2610624366004613550565b611338565b34801561063557600080fd5b506103d56106443660046133be565b6114cb565b34801561065557600080fd5b50601454610423906001600160a01b031681565b34801561067557600080fd5b506103c261152a565b34801561068a57600080fd5b50602254602354610699919082565b60408051928352602083019190915201610369565b3480156106ba57600080fd5b506103926106c93660046133be565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106f357600080fd5b506103c2610702366004613619565b611560565b34801561071357600080fd5b506103d5600e5481565b34801561072957600080fd5b506000546001600160a01b0316610423565b34801561074757600080fd5b5060408051808201909152600581526453524c545960d81b602082015261035c565b34801561077557600080fd5b50601b54601c54601d54601e54601f54610790949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610369565b3480156107c457600080fd5b506103c26107d33660046133a5565b6115aa565b3480156107e457600080fd5b506103926107f3366004613338565b61165d565b34801561080457600080fd5b50601354610423906001600160a01b031681565b34801561082457600080fd5b506103d56108333660046133be565b600f6020526000908152604090205481565b34801561085157600080fd5b50600a54610423906001600160a01b031681565b34801561087157600080fd5b50610392610880366004613338565b6116f8565b34801561089157600080fd5b506103c26108a03660046133be565b611705565b3480156108b157600080fd5b506103c26108c03660046133be565b6117ae565b3480156108d157600080fd5b506103c26108e0366004613637565b6117f9565b3480156108f157600080fd5b506103c26109003660046133be565b6118d8565b34801561091157600080fd5b506103c26109203660046133be565b611981565b34801561093157600080fd5b50601554610423906001600160a01b031681565b34801561095157600080fd5b506103c26109603660046133a5565b6119cf565b34801561097157600080fd5b506103d560115481565b34801561098757600080fd5b506103d56109963660046133db565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109cd57600080fd5b506103c26109dc3660046133be565b611a19565b3480156109ed57600080fd5b506103c26109fc36600461367e565b611abb565b348015610a0d57600080fd5b506103d5600d5481565b348015610a2357600080fd5b50610392610a323660046133be565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610a5c57600080fd5b506103c2610a6b3660046133be565b611b7f565b348015610a7c57600080fd5b506010546103929060ff1681565b348015610a9657600080fd5b506103c2610aa53660046133be565b611bca565b348015610ab657600080fd5b506009546104239061010090046001600160a01b031681565b6000610adc338484611c65565b5060015b92915050565b6000546001600160a01b03163314610b195760405162461bcd60e51b8152600401610b10906136ac565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c91906136e1565b50505050565b6001600160a01b038316600090815260036020908152604080832033845290915281205482811015610c175760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b10565b610c22858585611d89565b610c368533610c318685613714565b611c65565b506001949350505050565b6000600c54821115610ca85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b10565b6000610cb261237d565b9050610cbe818461372b565b9392505050565b6000546001600160a01b03163314610cef5760405162461bcd60e51b8152600401610b10906136ac565b6064811015610cfd57600080fd5b610d096009600a613831565b610d139082613840565b600e5550565b6000546001600160a01b03163314610d435760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03811660009081526005602052604090205460ff16610dab5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b10565b60005b600854811015610ecc57816001600160a01b031660088281548110610dd557610dd561385f565b6000918252602090912001546001600160a01b03161415610eba5760088054610e0090600190613714565b81548110610e1057610e1061385f565b600091825260209091200154600880546001600160a01b039092169183908110610e3c57610e3c61385f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610e9457610e94613875565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ec48161388b565b915050610dae565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610adc918590610c319086906138a6565b6000546001600160a01b03163314610f315760405162461bcd60e51b8152600401610b10906136ac565b600980546001600160a01b0380851661010002610100600160a81b031990921691909117909155600a80549183166001600160a01b031990921682179055610ecc90611981565b6000546001600160a01b03163314610fa25760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610ff05760405162461bcd60e51b8152600401610b10906136ac565b602082905560218190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050565b6000546001600160a01b031633146110515760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03811660009081526005602052604090205460ff16156110ba5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b10565b60085460c810156110fe5760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b6044820152606401610b10565b6000546001600160a01b038281169116141561115c5760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c7564656400000000000000006044820152606401610b10565b6001600160a01b038116600090815260016020526040902054156111b6576001600160a01b03811660009081526001602052604090205461119c90610c41565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146112465760405162461bcd60e51b8152600401610b10906136ac565b806001600160a01b03811661126d5760405162461bcd60e51b8152600401610b10906138be565b6012546001600160a01b038381169116141561129b5760405162461bcd60e51b8152600401610b10906138f5565b50601280546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146112ef5760405162461bcd60e51b8152600401610b10906136ac565b6016859055601784905560188390556019829055601a8190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b031633146113625760405162461bcd60e51b8152600401610b10906136ac565b80518251146113a25760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642073697a6560a01b6044820152606401610b10565b3360005b8351811015610b8c5760008482815181106113c3576113c361385f565b6020026020010151905060006113d761237d565b8584815181106113e9576113e961385f565b60200260200101516113fb9190613840565b6001600160a01b038516600090815260016020526040902054909150611422908290613714565b6001600160a01b0380861660009081526001602052604080822093909355908416815220546114529082906138a6565b6001600160a01b03808416600081815260016020526040902092909255865190861690600080516020613a7c833981519152908890879081106114975761149761385f565b60200260200101516040516114ae91815260200190565b60405180910390a3505080806114c39061388b565b9150506113a6565b6001600160a01b03811660009081526005602052604081205460ff161561150857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610ae090610c41565b6000546001600160a01b031633146115545760405162461bcd60e51b8152600401610b10906136ac565b61155e60006123a0565b565b6000546001600160a01b0316331461158a5760405162461bcd60e51b8152600401610b10906136ac565b6010805460ff19168315151790556115a3816001613840565b6011555050565b6000546001600160a01b031633146115d45760405162461bcd60e51b8152600401610b10906136ac565b804710156116245760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610b10565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610ecc573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156116df5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b10565b6116ee3385610c318685613714565b5060019392505050565b6000610adc338484611d89565b6000546001600160a01b0316331461172f5760405162461bcd60e51b8152600401610b10906136ac565b806001600160a01b0381166117565760405162461bcd60e51b8152600401610b10906138be565b6013546001600160a01b03838116911614156117845760405162461bcd60e51b8152600401610b10906138f5565b50601380546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146117d85760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146118235760405162461bcd60e51b8152600401610b10906136ac565b60648251111561186c5760405162461bcd60e51b815260206004820152601460248201527314d85a5d185499585b1d1e4e88125b9d985b1a5960621b6044820152606401610b10565b60005b82518110156118d357816006600085848151811061188f5761188f61385f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806118cb8161388b565b91505061186f565b505050565b6000546001600160a01b031633146119025760405162461bcd60e51b8152600401610b10906136ac565b806001600160a01b0381166119295760405162461bcd60e51b8152600401610b10906138be565b6014546001600160a01b03838116911614156119575760405162461bcd60e51b8152600401610b10906138f5565b50601480546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146119f95760405162461bcd60e51b8152600401610b10906136ac565b60008111611a0657600080fd5b611a1381620f4240613840565b600d5550565b6000546001600160a01b03163314611a435760405162461bcd60e51b8152600401610b10906136ac565b806001600160a01b038116611a6a5760405162461bcd60e51b8152600401610b10906138be565b6015546001600160a01b0383811691161415611a985760405162461bcd60e51b8152600401610b10906138f5565b50601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ae55760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611b545760405162461bcd60e51b815260206004820152601e60248201527f53616974615265616c74793a2056616c756520616c72656164792073657400006044820152606401610b10565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ba95760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611bf45760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b038116611c595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b10565b611c62816123a0565b50565b6001600160a01b038316611cc75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b10565b6001600160a01b038216611d285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b10565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ded5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b10565b6001600160a01b038216611e4f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b10565b60008111611e8d5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610b10565b611e96836114cb565b811115611edc5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610b10565b6001600160a01b03831660009081526006602052604090205460ff16158015611f1e57506001600160a01b03821660009081526006602052604090205460ff16155b611f5a5760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610b10565b600e54811115611fac5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e7420697320657863656564696e67206d61785478416d6f756e74006044820152606401610b10565b60105460ff161561202f576001600160a01b0383166000908152600f6020526040812054611fda9042613714565b9050601154811161202d5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610b10565b505b6001600160a01b03831660009081526004602052604090205460ff1615801561207157506001600160a01b03821660009081526004602052604090205460ff16155b8015612080575060095460ff16155b156120e8576001600160a01b03831660009081526007602052604090205460ff16806120c457506001600160a01b03821660009081526007602052604090205460ff165b156120db576120d683838360016123f0565b6120f5565b6120d683838360026123f0565b6120f583838360006123f0565b6001600160a01b0383166000908152600f6020526040902042905560095460ff161580156121315750600a546001600160a01b03848116911614155b801561214b5750600a546001600160a01b03838116911614155b801561217057506001600160a01b03831660009081526004602052604090205460ff16155b801561219557506001600160a01b03821660009081526004602052604090205460ff16155b156118d357604080516003808252608082019092526000916020820160608036833701905050905030816000815181106121d1576121d161385f565b60200260200101906001600160a01b031690816001600160a01b031681525050600960019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612244573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612268919061392c565b8160018151811061227b5761227b61385f565b6001600160a01b0392831660209182029290920101526015548251911690829060029081106122ac576122ac61385f565b6001600160a01b0392831660209182029290920101526009546000916101009091041663d06ca61f6122dd306114cb565b846040518363ffffffff1660e01b81526004016122fb92919061398d565b600060405180830381865afa158015612318573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261234091908101906139ae565b6002815181106123525761235261385f565b60200260200101519050600d54811061237657612376612371306114cb565b612767565b5050505050565b600080600061238a612a6d565b9092509050612399818361372b565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006123fc8383612bf0565b6001600160a01b03861660009081526005602052604090205490915060ff161561245e576001600160a01b038516600090815260026020526040902054612444908490613714565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526005602052604090205460ff16156124c15760e08101516001600160a01b0385166000908152600260205260409020546124a791906138a6565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546124e69190613714565b6001600160a01b038087166000908152600160209081526040808320949094558401519187168152919091205461251d91906138a6565b6001600160a01b038516600090815260016020526040908190209190915581015115158061255057506000816101000151115b15612568576125688160400151826101000151612c3d565b60008160c00151118061258057506000816101800151115b15612598576125988160c00151826101800151612c72565b6000816060015111806125b057506000816101200151115b15612602576125c88160600151826101200151612ce8565b6012546101408201516040519081526001600160a01b0391821691871690600080516020613a7c8339815191529060200160405180910390a35b60008160800151118061261a57506000816101400151115b1561266c576126328160800151826101400151612d7f565b6013546101408201516040519081526001600160a01b0391821691871690600080516020613a7c8339815191529060200160405180910390a35b60008160a00151118061268457506000816101600151115b156126d65761269c8160a00151826101600151612e16565b6014546101608201516040519081526001600160a01b0391821691871690600080516020613a7c8339815191529060200160405180910390a35b836001600160a01b0316856001600160a01b0316600080516020613a7c8339815191528360e0015160405161270d91815260200190565b60405180910390a36101808101511561237657306001600160a01b0316856001600160a01b0316600080516020613a7c83398151915283610180015160405161275891815260200190565b60405180910390a35050505050565b6009805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106127a9576127a961385f565b60200260200101906001600160a01b031690816001600160a01b031681525050600960019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612840919061392c565b816001815181106128535761285361385f565b6001600160a01b03928316602091820292909201015260095461287e91309161010090041684611c65565b60095460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906128bb908590600090869030904290600401613a3f565b600060405180830381600087803b1580156128d557600080fd5b505af11580156128e9573d6000803e3d6000fd5b5050601254602254600093506001600160a01b039091169150849061290f904790613840565b612919919061372b565b604051600081818185875af1925050503d8060008114612955576040519150601f19603f3d011682016040523d82523d6000602084013e61295a565b606091505b50509050806129a15760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610b10565b60006022556013546023546001600160a01b039091169084906129c5904790613840565b6129cf919061372b565b604051600081818185875af1925050503d8060008114612a0b576040519150601f19603f3d011682016040523d82523d6000602084013e612a10565b606091505b50508091505080612a595760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610b10565b50506000602355506009805460ff19169055565b600c54600b546000918291825b600854811015612bbf57826001600060088481548110612a9c57612a9c61385f565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b075750816002600060088481548110612ae057612ae061385f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b1d57600c54600b54945094505050509091565b6001600060088381548110612b3457612b3461385f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612b639084613714565b92506002600060088381548110612b7c57612b7c61385f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612bab9083613714565b915080612bb78161388b565b915050612a7a565b50600b54600c54612bd0919061372b565b821015612be757600c54600b549350935050509091565b90939092509050565b612bf8613266565b612c028383612ead565b9050612c17818484612c1261237d565b6130ff565b60c088015260a08701526080860152606085015260408401526020830152815292915050565b81600c6000828254612c4f9190613714565b9091555050601b8054829190600090612c699084906138a6565b90915550505050565b80601b6004016000828254612c8791906138a6565b90915550503060009081526005602052604090205460ff1615612cc9573060009081526002602052604081208054839290612cc39084906138a6565b90915550505b3060009081526001602052604081208054849290612c699084906138a6565b80601b6001016000828254612cfd91906138a6565b90915550506012546001600160a01b031660009081526005602052604090205460ff1615612d55576012546001600160a01b031660009081526002602052604081208054839290612d4f9084906138a6565b90915550505b6012546001600160a01b031660009081526001602052604081208054849290612c699084906138a6565b80601b6002016000828254612d9491906138a6565b90915550506013546001600160a01b031660009081526005602052604090205460ff1615612dec576013546001600160a01b031660009081526002602052604081208054839290612de69084906138a6565b90915550505b6013546001600160a01b031660009081526001602052604081208054849290612c699084906138a6565b80601b6003016000828254612e2b91906138a6565b90915550506013546001600160a01b031660009081526005602052604090205460ff1615612e83576014546001600160a01b031660009081526002602052604081208054839290612e7d9084906138a6565b90915550505b6014546001600160a01b031660009081526001602052604081208054849290612c699084906138a6565b612eb5613266565b60ff8216612ec95760e08101839052610ae0565b8160ff1660011415613040576016546103e890612ee69085613840565b612ef0919061372b565b6101008201526017546103e890612f079085613840565b612f11919061372b565b6101208201526018546103e890612f289085613840565b612f32919061372b565b6101408201526019546103e890612f499085613840565b612f53919061372b565b610160820152601a546103e890612f6a9085613840565b612f74919061372b565b6101808201819052601a546020549091612f8e9190613840565b612f98919061372b565b60228054600090612faa9084906138a6565b9091555050601a54602154610180830151612fc59190613840565b612fcf919061372b565b60238054600090612fe19084906138a6565b909155505061016081015161014082015161018083015161012084015161010085015161300e9088613714565b6130189190613714565b6130229190613714565b61302c9190613714565b6130369190613714565b60e0820152610ae0565b6016546103e8906130519085613840565b61305b919061372b565b6101008201526018546103e8906130729085613840565b61307c919061372b565b6101408201526019546103e8906130939085613840565b61309d919061372b565b6101608201526021546103e8906130b49085613840565b6130be919061372b565b6101808201819052602380546000906130d89084906138a6565b90915550506101608101516101408201516101808301516101008401516130189087613714565b6000808080808080613111888b613840565b965060ff891661313257508594506000935083925082915081905080613258565b8860ff16600114156131da57878b610100015161314f9190613840565b9450878b61012001516131629190613840565b9350878b61018001516131759190613840565b9050878b61014001516131889190613840565b9250878b610160015161319b9190613840565b9150818382866131ab898c613714565b6131b59190613714565b6131bf9190613714565b6131c99190613714565b6131d39190613714565b9550613258565b878b61010001516131eb9190613840565b9450878b61018001516131fe9190613840565b9050878b61014001516132119190613840565b9250878b61016001516132249190613840565b9150818382613233888b613714565b61323d9190613714565b6132479190613714565b6132519190613714565b9550600093505b949950949992975094509450565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b818110156132fb578581018301518582016040015282016132df565b8181111561330d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611c6257600080fd5b6000806040838503121561334b57600080fd5b823561335681613323565b946020939093013593505050565b60008060006060848603121561337957600080fd5b833561338481613323565b9250602084013561339481613323565b929592945050506040919091013590565b6000602082840312156133b757600080fd5b5035919050565b6000602082840312156133d057600080fd5b8135610cbe81613323565b600080604083850312156133ee57600080fd5b82356133f981613323565b9150602083013561340981613323565b809150509250929050565b6000806040838503121561342757600080fd5b50508035926020909101359150565b600080600080600060a0868803121561344e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156134b0576134b0613471565b604052919050565b600067ffffffffffffffff8211156134d2576134d2613471565b5060051b60200190565b600082601f8301126134ed57600080fd5b813560206135026134fd836134b8565b613487565b82815260059290921b8401810191818101908684111561352157600080fd5b8286015b8481101561354557803561353881613323565b8352918301918301613525565b509695505050505050565b6000806040838503121561356357600080fd5b823567ffffffffffffffff8082111561357b57600080fd5b613587868387016134dc565b935060209150818501358181111561359e57600080fd5b85019050601f810186136135b157600080fd5b80356135bf6134fd826134b8565b81815260059190911b820183019083810190888311156135de57600080fd5b928401925b828410156135fc578335825292840192908401906135e3565b80955050505050509250929050565b8015158114611c6257600080fd5b6000806040838503121561362c57600080fd5b82356133568161360b565b6000806040838503121561364a57600080fd5b823567ffffffffffffffff81111561366157600080fd5b61366d858286016134dc565b92505060208301356134098161360b565b6000806040838503121561369157600080fd5b823561369c81613323565b915060208301356134098161360b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156136f357600080fd5b8151610cbe8161360b565b634e487b7160e01b600052601160045260246000fd5b600082821015613726576137266136fe565b500390565b60008261374857634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561378857816000190482111561376e5761376e6136fe565b8085161561377b57918102915b93841c9390800290613752565b509250929050565b60008261379f57506001610ae0565b816137ac57506000610ae0565b81600181146137c257600281146137cc576137e8565b6001915050610ae0565b60ff8411156137dd576137dd6136fe565b50506001821b610ae0565b5060208310610133831016604e8410600b841016171561380b575081810a610ae0565b613815838361374d565b8060001904821115613829576138296136fe565b029392505050565b6000610cbe60ff841683613790565b600081600019048311821515161561385a5761385a6136fe565b500290565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141561389f5761389f6136fe565b5060010190565b600082198211156138b9576138b96136fe565b500190565b60208082526019908201527f53616974615265616c74793a205a65726f206164647265737300000000000000604082015260600190565b6020808252601f908201527f53616974615265616c74793a2057616c6c657420616c72656164792073657400604082015260600190565b60006020828403121561393e57600080fd5b8151610cbe81613323565b600081518084526020808501945080840160005b838110156139825781516001600160a01b03168752958201959082019060010161395d565b509495945050505050565b8281526040602082015260006139a66040830184613949565b949350505050565b600060208083850312156139c157600080fd5b825167ffffffffffffffff8111156139d857600080fd5b8301601f810185136139e957600080fd5b80516139f76134fd826134b8565b81815260059190911b82018301908381019087831115613a1657600080fd5b928401925b82841015613a3457835182529284019290840190613a1b565b979650505050505050565b85815284602082015260a060408201526000613a5e60a0830186613949565b6001600160a01b039490941660608301525060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122027129324f539a3feca05eb09d37b8fbb002ad8165714ca9f09f00488a5a1ce2564736f6c634300080a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65720000000000000000000000000c17e776cd218252adfca8d4e761d3fe757e97780000000000000000000000009aeb133ef8ed7a1c49b18e32b496e6793d1f123b

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80638c0b5e22116101ab578063b3839389116100f7578063e116554511610095578063ea2f0b371161006f578063ea2f0b3714610a50578063ee36e35914610a70578063f2fde38b14610a8a578063f887ea4014610aaa57600080fd5b8063e1165545146109e1578063e2f4560514610a01578063e5e31b1314610a1757600080fd5b8063d257b34f116100d1578063d257b34f14610945578063d2ce0db214610965578063dd62ed3e1461097b578063e0baeb29146109c157600080fd5b8063b3839389146108e5578063c2b7bbb614610905578063c54e44eb1461092557600080fd5b8063a5ece94111610164578063a9059cbb1161013e578063a9059cbb14610865578063aacebbe314610885578063af6c9c1d146108a5578063b31470a4146108c557600080fd5b8063a5ece941146107f8578063a87859f614610818578063a8aa1b311461084557600080fd5b80638c0b5e22146107075780638da5cb5b1461071d57806395d89b411461073b5780639ba5e4d5146107695780639e252f00146107b8578063a457c2d7146107d857600080fd5b8063437823ec1161026a578063706f693711610223578063715018a6116101fd578063715018a6146106695780637286ec321461067e57806388f82020146106ae5780638c0ae3df146106e757600080fd5b8063706f69371461060957806370a082311461062957806370d5ae051461064957600080fd5b8063437823ec146105305780634e2b57801461055057806352390c02146105705780635342acb41461059057806355879b21146105c95780635fcefa42146105e957600080fd5b80632d838119116102d75780633685d419116102b15780633685d4191461049757806339509351146104b75780633bbac579146104d757806340b28c2f1461051057600080fd5b80632d8381191461043b5780632e092fe81461045b578063313ce5671461047b57600080fd5b806306fdde031461032a578063095ea7b3146103725780630d65df9b146103a257806318160ddd146103c457806323b872dd146103e357806323cac1fd1461040357600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060408051808201909152600d81526c29b0b4ba30a932b0b63a3cab1960991b60208201525b60405161036991906132ce565b60405180910390f35b34801561037e57600080fd5b5061039261038d366004613338565b610acf565b6040519015158152602001610369565b3480156103ae57600080fd5b506103c26103bd366004613364565b610ae6565b005b3480156103d057600080fd5b50600b545b604051908152602001610369565b3480156103ef57600080fd5b506103926103fe366004613364565b610b92565b34801561040f57600080fd5b50601254610423906001600160a01b031681565b6040516001600160a01b039091168152602001610369565b34801561044757600080fd5b506103d56104563660046133a5565b610c41565b34801561046757600080fd5b506103c26104763660046133a5565b610cc5565b34801561048757600080fd5b5060405160098152602001610369565b3480156104a357600080fd5b506103c26104b23660046133be565b610d19565b3480156104c357600080fd5b506103926104d2366004613338565b610ed0565b3480156104e357600080fd5b506103926104f23660046133be565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561051c57600080fd5b506103c261052b3660046133db565b610f07565b34801561053c57600080fd5b506103c261054b3660046133be565b610f78565b34801561055c57600080fd5b506103c261056b366004613414565b610fc6565b34801561057c57600080fd5b506103c261058b3660046133be565b611027565b34801561059c57600080fd5b506103926105ab3660046133be565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105d557600080fd5b506103c26105e43660046133be565b61121c565b3480156105f557600080fd5b506103c2610604366004613436565b6112c5565b34801561061557600080fd5b506103c2610624366004613550565b611338565b34801561063557600080fd5b506103d56106443660046133be565b6114cb565b34801561065557600080fd5b50601454610423906001600160a01b031681565b34801561067557600080fd5b506103c261152a565b34801561068a57600080fd5b50602254602354610699919082565b60408051928352602083019190915201610369565b3480156106ba57600080fd5b506103926106c93660046133be565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106f357600080fd5b506103c2610702366004613619565b611560565b34801561071357600080fd5b506103d5600e5481565b34801561072957600080fd5b506000546001600160a01b0316610423565b34801561074757600080fd5b5060408051808201909152600581526453524c545960d81b602082015261035c565b34801561077557600080fd5b50601b54601c54601d54601e54601f54610790949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610369565b3480156107c457600080fd5b506103c26107d33660046133a5565b6115aa565b3480156107e457600080fd5b506103926107f3366004613338565b61165d565b34801561080457600080fd5b50601354610423906001600160a01b031681565b34801561082457600080fd5b506103d56108333660046133be565b600f6020526000908152604090205481565b34801561085157600080fd5b50600a54610423906001600160a01b031681565b34801561087157600080fd5b50610392610880366004613338565b6116f8565b34801561089157600080fd5b506103c26108a03660046133be565b611705565b3480156108b157600080fd5b506103c26108c03660046133be565b6117ae565b3480156108d157600080fd5b506103c26108e0366004613637565b6117f9565b3480156108f157600080fd5b506103c26109003660046133be565b6118d8565b34801561091157600080fd5b506103c26109203660046133be565b611981565b34801561093157600080fd5b50601554610423906001600160a01b031681565b34801561095157600080fd5b506103c26109603660046133a5565b6119cf565b34801561097157600080fd5b506103d560115481565b34801561098757600080fd5b506103d56109963660046133db565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109cd57600080fd5b506103c26109dc3660046133be565b611a19565b3480156109ed57600080fd5b506103c26109fc36600461367e565b611abb565b348015610a0d57600080fd5b506103d5600d5481565b348015610a2357600080fd5b50610392610a323660046133be565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610a5c57600080fd5b506103c2610a6b3660046133be565b611b7f565b348015610a7c57600080fd5b506010546103929060ff1681565b348015610a9657600080fd5b506103c2610aa53660046133be565b611bca565b348015610ab657600080fd5b506009546104239061010090046001600160a01b031681565b6000610adc338484611c65565b5060015b92915050565b6000546001600160a01b03163314610b195760405162461bcd60e51b8152600401610b10906136ac565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c91906136e1565b50505050565b6001600160a01b038316600090815260036020908152604080832033845290915281205482811015610c175760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b10565b610c22858585611d89565b610c368533610c318685613714565b611c65565b506001949350505050565b6000600c54821115610ca85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b10565b6000610cb261237d565b9050610cbe818461372b565b9392505050565b6000546001600160a01b03163314610cef5760405162461bcd60e51b8152600401610b10906136ac565b6064811015610cfd57600080fd5b610d096009600a613831565b610d139082613840565b600e5550565b6000546001600160a01b03163314610d435760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03811660009081526005602052604090205460ff16610dab5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b10565b60005b600854811015610ecc57816001600160a01b031660088281548110610dd557610dd561385f565b6000918252602090912001546001600160a01b03161415610eba5760088054610e0090600190613714565b81548110610e1057610e1061385f565b600091825260209091200154600880546001600160a01b039092169183908110610e3c57610e3c61385f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610e9457610e94613875565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ec48161388b565b915050610dae565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610adc918590610c319086906138a6565b6000546001600160a01b03163314610f315760405162461bcd60e51b8152600401610b10906136ac565b600980546001600160a01b0380851661010002610100600160a81b031990921691909117909155600a80549183166001600160a01b031990921682179055610ecc90611981565b6000546001600160a01b03163314610fa25760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610ff05760405162461bcd60e51b8152600401610b10906136ac565b602082905560218190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050565b6000546001600160a01b031633146110515760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03811660009081526005602052604090205460ff16156110ba5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b10565b60085460c810156110fe5760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b6044820152606401610b10565b6000546001600160a01b038281169116141561115c5760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c7564656400000000000000006044820152606401610b10565b6001600160a01b038116600090815260016020526040902054156111b6576001600160a01b03811660009081526001602052604090205461119c90610c41565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146112465760405162461bcd60e51b8152600401610b10906136ac565b806001600160a01b03811661126d5760405162461bcd60e51b8152600401610b10906138be565b6012546001600160a01b038381169116141561129b5760405162461bcd60e51b8152600401610b10906138f5565b50601280546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146112ef5760405162461bcd60e51b8152600401610b10906136ac565b6016859055601784905560188390556019829055601a8190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b031633146113625760405162461bcd60e51b8152600401610b10906136ac565b80518251146113a25760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642073697a6560a01b6044820152606401610b10565b3360005b8351811015610b8c5760008482815181106113c3576113c361385f565b6020026020010151905060006113d761237d565b8584815181106113e9576113e961385f565b60200260200101516113fb9190613840565b6001600160a01b038516600090815260016020526040902054909150611422908290613714565b6001600160a01b0380861660009081526001602052604080822093909355908416815220546114529082906138a6565b6001600160a01b03808416600081815260016020526040902092909255865190861690600080516020613a7c833981519152908890879081106114975761149761385f565b60200260200101516040516114ae91815260200190565b60405180910390a3505080806114c39061388b565b9150506113a6565b6001600160a01b03811660009081526005602052604081205460ff161561150857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610ae090610c41565b6000546001600160a01b031633146115545760405162461bcd60e51b8152600401610b10906136ac565b61155e60006123a0565b565b6000546001600160a01b0316331461158a5760405162461bcd60e51b8152600401610b10906136ac565b6010805460ff19168315151790556115a3816001613840565b6011555050565b6000546001600160a01b031633146115d45760405162461bcd60e51b8152600401610b10906136ac565b804710156116245760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610b10565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610ecc573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156116df5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b10565b6116ee3385610c318685613714565b5060019392505050565b6000610adc338484611d89565b6000546001600160a01b0316331461172f5760405162461bcd60e51b8152600401610b10906136ac565b806001600160a01b0381166117565760405162461bcd60e51b8152600401610b10906138be565b6013546001600160a01b03838116911614156117845760405162461bcd60e51b8152600401610b10906138f5565b50601380546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146117d85760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146118235760405162461bcd60e51b8152600401610b10906136ac565b60648251111561186c5760405162461bcd60e51b815260206004820152601460248201527314d85a5d185499585b1d1e4e88125b9d985b1a5960621b6044820152606401610b10565b60005b82518110156118d357816006600085848151811061188f5761188f61385f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806118cb8161388b565b91505061186f565b505050565b6000546001600160a01b031633146119025760405162461bcd60e51b8152600401610b10906136ac565b806001600160a01b0381166119295760405162461bcd60e51b8152600401610b10906138be565b6014546001600160a01b03838116911614156119575760405162461bcd60e51b8152600401610b10906138f5565b50601480546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146119f95760405162461bcd60e51b8152600401610b10906136ac565b60008111611a0657600080fd5b611a1381620f4240613840565b600d5550565b6000546001600160a01b03163314611a435760405162461bcd60e51b8152600401610b10906136ac565b806001600160a01b038116611a6a5760405162461bcd60e51b8152600401610b10906138be565b6015546001600160a01b0383811691161415611a985760405162461bcd60e51b8152600401610b10906138f5565b50601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ae55760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611b545760405162461bcd60e51b815260206004820152601e60248201527f53616974615265616c74793a2056616c756520616c72656164792073657400006044820152606401610b10565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ba95760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611bf45760405162461bcd60e51b8152600401610b10906136ac565b6001600160a01b038116611c595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b10565b611c62816123a0565b50565b6001600160a01b038316611cc75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b10565b6001600160a01b038216611d285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b10565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ded5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b10565b6001600160a01b038216611e4f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b10565b60008111611e8d5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610b10565b611e96836114cb565b811115611edc5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610b10565b6001600160a01b03831660009081526006602052604090205460ff16158015611f1e57506001600160a01b03821660009081526006602052604090205460ff16155b611f5a5760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610b10565b600e54811115611fac5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e7420697320657863656564696e67206d61785478416d6f756e74006044820152606401610b10565b60105460ff161561202f576001600160a01b0383166000908152600f6020526040812054611fda9042613714565b9050601154811161202d5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610b10565b505b6001600160a01b03831660009081526004602052604090205460ff1615801561207157506001600160a01b03821660009081526004602052604090205460ff16155b8015612080575060095460ff16155b156120e8576001600160a01b03831660009081526007602052604090205460ff16806120c457506001600160a01b03821660009081526007602052604090205460ff165b156120db576120d683838360016123f0565b6120f5565b6120d683838360026123f0565b6120f583838360006123f0565b6001600160a01b0383166000908152600f6020526040902042905560095460ff161580156121315750600a546001600160a01b03848116911614155b801561214b5750600a546001600160a01b03838116911614155b801561217057506001600160a01b03831660009081526004602052604090205460ff16155b801561219557506001600160a01b03821660009081526004602052604090205460ff16155b156118d357604080516003808252608082019092526000916020820160608036833701905050905030816000815181106121d1576121d161385f565b60200260200101906001600160a01b031690816001600160a01b031681525050600960019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612244573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612268919061392c565b8160018151811061227b5761227b61385f565b6001600160a01b0392831660209182029290920101526015548251911690829060029081106122ac576122ac61385f565b6001600160a01b0392831660209182029290920101526009546000916101009091041663d06ca61f6122dd306114cb565b846040518363ffffffff1660e01b81526004016122fb92919061398d565b600060405180830381865afa158015612318573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261234091908101906139ae565b6002815181106123525761235261385f565b60200260200101519050600d54811061237657612376612371306114cb565b612767565b5050505050565b600080600061238a612a6d565b9092509050612399818361372b565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006123fc8383612bf0565b6001600160a01b03861660009081526005602052604090205490915060ff161561245e576001600160a01b038516600090815260026020526040902054612444908490613714565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526005602052604090205460ff16156124c15760e08101516001600160a01b0385166000908152600260205260409020546124a791906138a6565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546124e69190613714565b6001600160a01b038087166000908152600160209081526040808320949094558401519187168152919091205461251d91906138a6565b6001600160a01b038516600090815260016020526040908190209190915581015115158061255057506000816101000151115b15612568576125688160400151826101000151612c3d565b60008160c00151118061258057506000816101800151115b15612598576125988160c00151826101800151612c72565b6000816060015111806125b057506000816101200151115b15612602576125c88160600151826101200151612ce8565b6012546101408201516040519081526001600160a01b0391821691871690600080516020613a7c8339815191529060200160405180910390a35b60008160800151118061261a57506000816101400151115b1561266c576126328160800151826101400151612d7f565b6013546101408201516040519081526001600160a01b0391821691871690600080516020613a7c8339815191529060200160405180910390a35b60008160a00151118061268457506000816101600151115b156126d65761269c8160a00151826101600151612e16565b6014546101608201516040519081526001600160a01b0391821691871690600080516020613a7c8339815191529060200160405180910390a35b836001600160a01b0316856001600160a01b0316600080516020613a7c8339815191528360e0015160405161270d91815260200190565b60405180910390a36101808101511561237657306001600160a01b0316856001600160a01b0316600080516020613a7c83398151915283610180015160405161275891815260200190565b60405180910390a35050505050565b6009805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106127a9576127a961385f565b60200260200101906001600160a01b031690816001600160a01b031681525050600960019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612840919061392c565b816001815181106128535761285361385f565b6001600160a01b03928316602091820292909201015260095461287e91309161010090041684611c65565b60095460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906128bb908590600090869030904290600401613a3f565b600060405180830381600087803b1580156128d557600080fd5b505af11580156128e9573d6000803e3d6000fd5b5050601254602254600093506001600160a01b039091169150849061290f904790613840565b612919919061372b565b604051600081818185875af1925050503d8060008114612955576040519150601f19603f3d011682016040523d82523d6000602084013e61295a565b606091505b50509050806129a15760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610b10565b60006022556013546023546001600160a01b039091169084906129c5904790613840565b6129cf919061372b565b604051600081818185875af1925050503d8060008114612a0b576040519150601f19603f3d011682016040523d82523d6000602084013e612a10565b606091505b50508091505080612a595760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610b10565b50506000602355506009805460ff19169055565b600c54600b546000918291825b600854811015612bbf57826001600060088481548110612a9c57612a9c61385f565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b075750816002600060088481548110612ae057612ae061385f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b1d57600c54600b54945094505050509091565b6001600060088381548110612b3457612b3461385f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612b639084613714565b92506002600060088381548110612b7c57612b7c61385f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612bab9083613714565b915080612bb78161388b565b915050612a7a565b50600b54600c54612bd0919061372b565b821015612be757600c54600b549350935050509091565b90939092509050565b612bf8613266565b612c028383612ead565b9050612c17818484612c1261237d565b6130ff565b60c088015260a08701526080860152606085015260408401526020830152815292915050565b81600c6000828254612c4f9190613714565b9091555050601b8054829190600090612c699084906138a6565b90915550505050565b80601b6004016000828254612c8791906138a6565b90915550503060009081526005602052604090205460ff1615612cc9573060009081526002602052604081208054839290612cc39084906138a6565b90915550505b3060009081526001602052604081208054849290612c699084906138a6565b80601b6001016000828254612cfd91906138a6565b90915550506012546001600160a01b031660009081526005602052604090205460ff1615612d55576012546001600160a01b031660009081526002602052604081208054839290612d4f9084906138a6565b90915550505b6012546001600160a01b031660009081526001602052604081208054849290612c699084906138a6565b80601b6002016000828254612d9491906138a6565b90915550506013546001600160a01b031660009081526005602052604090205460ff1615612dec576013546001600160a01b031660009081526002602052604081208054839290612de69084906138a6565b90915550505b6013546001600160a01b031660009081526001602052604081208054849290612c699084906138a6565b80601b6003016000828254612e2b91906138a6565b90915550506013546001600160a01b031660009081526005602052604090205460ff1615612e83576014546001600160a01b031660009081526002602052604081208054839290612e7d9084906138a6565b90915550505b6014546001600160a01b031660009081526001602052604081208054849290612c699084906138a6565b612eb5613266565b60ff8216612ec95760e08101839052610ae0565b8160ff1660011415613040576016546103e890612ee69085613840565b612ef0919061372b565b6101008201526017546103e890612f079085613840565b612f11919061372b565b6101208201526018546103e890612f289085613840565b612f32919061372b565b6101408201526019546103e890612f499085613840565b612f53919061372b565b610160820152601a546103e890612f6a9085613840565b612f74919061372b565b6101808201819052601a546020549091612f8e9190613840565b612f98919061372b565b60228054600090612faa9084906138a6565b9091555050601a54602154610180830151612fc59190613840565b612fcf919061372b565b60238054600090612fe19084906138a6565b909155505061016081015161014082015161018083015161012084015161010085015161300e9088613714565b6130189190613714565b6130229190613714565b61302c9190613714565b6130369190613714565b60e0820152610ae0565b6016546103e8906130519085613840565b61305b919061372b565b6101008201526018546103e8906130729085613840565b61307c919061372b565b6101408201526019546103e8906130939085613840565b61309d919061372b565b6101608201526021546103e8906130b49085613840565b6130be919061372b565b6101808201819052602380546000906130d89084906138a6565b90915550506101608101516101408201516101808301516101008401516130189087613714565b6000808080808080613111888b613840565b965060ff891661313257508594506000935083925082915081905080613258565b8860ff16600114156131da57878b610100015161314f9190613840565b9450878b61012001516131629190613840565b9350878b61018001516131759190613840565b9050878b61014001516131889190613840565b9250878b610160015161319b9190613840565b9150818382866131ab898c613714565b6131b59190613714565b6131bf9190613714565b6131c99190613714565b6131d39190613714565b9550613258565b878b61010001516131eb9190613840565b9450878b61018001516131fe9190613840565b9050878b61014001516132119190613840565b9250878b61016001516132249190613840565b9150818382613233888b613714565b61323d9190613714565b6132479190613714565b6132519190613714565b9550600093505b949950949992975094509450565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b818110156132fb578581018301518582016040015282016132df565b8181111561330d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611c6257600080fd5b6000806040838503121561334b57600080fd5b823561335681613323565b946020939093013593505050565b60008060006060848603121561337957600080fd5b833561338481613323565b9250602084013561339481613323565b929592945050506040919091013590565b6000602082840312156133b757600080fd5b5035919050565b6000602082840312156133d057600080fd5b8135610cbe81613323565b600080604083850312156133ee57600080fd5b82356133f981613323565b9150602083013561340981613323565b809150509250929050565b6000806040838503121561342757600080fd5b50508035926020909101359150565b600080600080600060a0868803121561344e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156134b0576134b0613471565b604052919050565b600067ffffffffffffffff8211156134d2576134d2613471565b5060051b60200190565b600082601f8301126134ed57600080fd5b813560206135026134fd836134b8565b613487565b82815260059290921b8401810191818101908684111561352157600080fd5b8286015b8481101561354557803561353881613323565b8352918301918301613525565b509695505050505050565b6000806040838503121561356357600080fd5b823567ffffffffffffffff8082111561357b57600080fd5b613587868387016134dc565b935060209150818501358181111561359e57600080fd5b85019050601f810186136135b157600080fd5b80356135bf6134fd826134b8565b81815260059190911b820183019083810190888311156135de57600080fd5b928401925b828410156135fc578335825292840192908401906135e3565b80955050505050509250929050565b8015158114611c6257600080fd5b6000806040838503121561362c57600080fd5b82356133568161360b565b6000806040838503121561364a57600080fd5b823567ffffffffffffffff81111561366157600080fd5b61366d858286016134dc565b92505060208301356134098161360b565b6000806040838503121561369157600080fd5b823561369c81613323565b915060208301356134098161360b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156136f357600080fd5b8151610cbe8161360b565b634e487b7160e01b600052601160045260246000fd5b600082821015613726576137266136fe565b500390565b60008261374857634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561378857816000190482111561376e5761376e6136fe565b8085161561377b57918102915b93841c9390800290613752565b509250929050565b60008261379f57506001610ae0565b816137ac57506000610ae0565b81600181146137c257600281146137cc576137e8565b6001915050610ae0565b60ff8411156137dd576137dd6136fe565b50506001821b610ae0565b5060208310610133831016604e8410600b841016171561380b575081810a610ae0565b613815838361374d565b8060001904821115613829576138296136fe565b029392505050565b6000610cbe60ff841683613790565b600081600019048311821515161561385a5761385a6136fe565b500290565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141561389f5761389f6136fe565b5060010190565b600082198211156138b9576138b96136fe565b500190565b60208082526019908201527f53616974615265616c74793a205a65726f206164647265737300000000000000604082015260600190565b6020808252601f908201527f53616974615265616c74793a2057616c6c657420616c72656164792073657400604082015260600190565b60006020828403121561393e57600080fd5b8151610cbe81613323565b600081518084526020808501945080840160005b838110156139825781516001600160a01b03168752958201959082019060010161395d565b509495945050505050565b8281526040602082015260006139a66040830184613949565b949350505050565b600060208083850312156139c157600080fd5b825167ffffffffffffffff8111156139d857600080fd5b8301601f810185136139e957600080fd5b80516139f76134fd826134b8565b81815260059190911b82018301908381019087831115613a1657600080fd5b928401925b82841015613a3457835182529284019290840190613a1b565b979650505050505050565b85815284602082015260a060408201526000613a5e60a0830186613949565b6001600160a01b039490941660608301525060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122027129324f539a3feca05eb09d37b8fbb002ad8165714ca9f09f00488a5a1ce2564736f6c634300080a0033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
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.