ETH Price: $3,456.66 (-0.76%)
Gas: 3 Gwei

Contract

0x750EFcFcB400d91C807A77AABE747863a50b7a93
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve201968962024-06-29 10:58:112 days ago1719658691IN
0x750EFcFc...3a50b7a93
0 ETH0.000045111.8598237
Approve198444662024-05-11 4:40:4751 days ago1715402447IN
0x750EFcFc...3a50b7a93
0 ETH0.000422039.05573288
Approve197072032024-04-21 23:56:1171 days ago1713743771IN
0x750EFcFc...3a50b7a93
0 ETH0.000141835.84654123
Approve196670972024-04-16 9:17:1176 days ago1713259031IN
0x750EFcFc...3a50b7a93
0 ETH0.0004829610.42751533
Approve196665292024-04-16 7:23:2376 days ago1713252203IN
0x750EFcFc...3a50b7a93
0 ETH0.000427799.17931022
Approve196664772024-04-16 7:12:3576 days ago1713251555IN
0x750EFcFc...3a50b7a93
0 ETH0.0004856910.42172699
Approve196664602024-04-16 7:09:1176 days ago1713251351IN
0x750EFcFc...3a50b7a93
0 ETH0.000407148.74754421
Approve196524352024-04-14 7:59:2378 days ago1713081563IN
0x750EFcFc...3a50b7a93
0 ETH0.0008491118.31401921
Approve196453432024-04-13 8:03:4779 days ago1712995427IN
0x750EFcFc...3a50b7a93
0 ETH0.0007950117.14724486
Approve195839182024-04-04 17:35:1188 days ago1712252111IN
0x750EFcFc...3a50b7a93
0 ETH0.0018602940.22778919
Approve195838972024-04-04 17:30:5988 days ago1712251859IN
0x750EFcFc...3a50b7a93
0 ETH0.0020766144.8939194
Approve193606352024-03-04 8:34:35119 days ago1709541275IN
0x750EFcFc...3a50b7a93
0 ETH0.0029974464.31725608
Approve193606232024-03-04 8:31:59119 days ago1709541119IN
0x750EFcFc...3a50b7a93
0 ETH0.0032315869.34126969
Approve192757202024-02-21 11:25:11131 days ago1708514711IN
0x750EFcFc...3a50b7a93
0 ETH0.0012438526.68997179
Approve192756912024-02-21 11:19:23131 days ago1708514363IN
0x750EFcFc...3a50b7a93
0 ETH0.0013418528.82978052
Approve192280922024-02-14 18:50:35138 days ago1707936635IN
0x750EFcFc...3a50b7a93
0 ETH0.0012554226.97279943
Approve191420492024-02-02 16:58:11150 days ago1706893091IN
0x750EFcFc...3a50b7a93
0 ETH0.0005588323.03530444
Approve191241042024-01-31 4:31:23152 days ago1706675483IN
0x750EFcFc...3a50b7a93
0 ETH0.0005526522.72413869
Transfer190961012024-01-27 6:21:59156 days ago1706336519IN
0x750EFcFc...3a50b7a93
0 ETH0.0012733511.2790656
Approve190467142024-01-20 7:54:59163 days ago1705737299IN
0x750EFcFc...3a50b7a93
0 ETH0.0003832715.79883364
Approve190463242024-01-20 6:36:59163 days ago1705732619IN
0x750EFcFc...3a50b7a93
0 ETH0.0007313615.71339538
Approve190442642024-01-19 23:43:11164 days ago1705707791IN
0x750EFcFc...3a50b7a93
0 ETH0.0007848916.94204598
Approve189372762024-01-04 23:38:35179 days ago1704411515IN
0x750EFcFc...3a50b7a93
0 ETH0.0008154517.49755867
Approve188247522023-12-20 4:29:59194 days ago1703046599IN
0x750EFcFc...3a50b7a93
0 ETH0.0008510134.99232297
Approve187210032023-12-05 15:21:47209 days ago1701789707IN
0x750EFcFc...3a50b7a93
0 ETH0.0017932973.91986185
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
196671352024-04-16 9:24:4776 days ago1713259487
0x750EFcFc...3a50b7a93
0.03219399 ETH
196671352024-04-16 9:24:4776 days ago1713259487
0x750EFcFc...3a50b7a93
0.01601691 ETH
196671352024-04-16 9:24:4776 days ago1713259487
0x750EFcFc...3a50b7a93
0.04821091 ETH
190463272024-01-20 6:37:35163 days ago1705732655
0x750EFcFc...3a50b7a93
0.01313925 ETH
190463272024-01-20 6:37:35163 days ago1705732655
0x750EFcFc...3a50b7a93
0.00653694 ETH
190463272024-01-20 6:37:35163 days ago1705732655
0x750EFcFc...3a50b7a93
0.0196762 ETH
178756102023-08-09 6:38:47327 days ago1691563127
0x750EFcFc...3a50b7a93
0.0192473 ETH
178756102023-08-09 6:38:47327 days ago1691563127
0x750EFcFc...3a50b7a93
0.00957577 ETH
178756102023-08-09 6:38:47327 days ago1691563127
0x750EFcFc...3a50b7a93
0.02882307 ETH
178111162023-07-31 6:11:35336 days ago1690783895
0x750EFcFc...3a50b7a93
0.03430606 ETH
178111162023-07-31 6:11:35336 days ago1690783895
0x750EFcFc...3a50b7a93
0.01706769 ETH
178111162023-07-31 6:11:35336 days ago1690783895
0x750EFcFc...3a50b7a93
0.05137375 ETH
177987622023-07-29 12:42:11338 days ago1690634531
0x750EFcFc...3a50b7a93
0.0609883 ETH
177987622023-07-29 12:42:11338 days ago1690634531
0x750EFcFc...3a50b7a93
0.03034243 ETH
177987622023-07-29 12:42:11338 days ago1690634531
0x750EFcFc...3a50b7a93
0.09133074 ETH
177925442023-07-28 15:48:23339 days ago1690559303
0x750EFcFc...3a50b7a93
0.12056586 ETH
177925442023-07-28 15:48:23339 days ago1690559303
0x750EFcFc...3a50b7a93
0.05998301 ETH
177925442023-07-28 15:48:23339 days ago1690559303
0x750EFcFc...3a50b7a93
0.18054888 ETH
177897782023-07-28 6:31:11339 days ago1690525871
0x750EFcFc...3a50b7a93
0.10837579 ETH
177897782023-07-28 6:31:11339 days ago1690525871
0x750EFcFc...3a50b7a93
0.0539183 ETH
177897782023-07-28 6:31:11339 days ago1690525871
0x750EFcFc...3a50b7a93
0.1622941 ETH
177884742023-07-28 2:08:23340 days ago1690510103
0x750EFcFc...3a50b7a93
0.08058069 ETH
177884742023-07-28 2:08:23340 days ago1690510103
0x750EFcFc...3a50b7a93
0.04008989 ETH
177884742023-07-28 2:08:23340 days ago1690510103
0x750EFcFc...3a50b7a93
0.12067059 ETH
177865802023-07-27 19:46:23340 days ago1690487183
0x750EFcFc...3a50b7a93
0.09751591 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Libra

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-25
*/

/*

Libra (LIBRA)

Website: https://libraerc.com/
Telegram: https://t.me/libracoinerc
Twitter: https://twitter.com/libratokenerc

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

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

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {uint256 size; assembly {size := extcodesize(account)} return size > 0;}
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");}
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {return functionCall(target, data, "Address: low-level call failed");}
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);}
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");}
    
    function functionCallWithValue(address target,bytes memory data,uint256 value,string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");}
    
    function functionStaticCall(address target,bytes memory data,string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");}
    
    function functionDelegateCall(address target,bytes memory data,string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function _verifyCallResult(bool success,bytes memory returndata,string memory errorMessage) private pure returns (bytes memory) {
        if(success) {return returndata;} 
        else{
        if(returndata.length > 0) {
            assembly {let returndata_size := mload(returndata)
            revert(add(32, returndata), returndata_size)}} 
        else {revert(errorMessage);}}
    }
}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

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

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

contract Libra is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    string private constant _name = 'Libra';
    string private constant _symbol = 'LIBRA';
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000000000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = ( _tTotal * 200 ) / 10000;
    uint256 public _maxWalletToken = ( _tTotal * 200 ) / 10000;    
    feeRatesStruct private feeRates = feeRatesStruct({
      rfi: 0,
      marketing: 100,
      liquidity: 0
    });
    uint256 internal totalFee = 3000;
    uint256 internal sellFee = 6000;
    uint256 internal transferFee = 6000;
    uint256 internal denominator = 10000;
    bool internal swapping;
    bool internal swapEnabled = true;
    uint256 internal swapThreshold = ( _tTotal * 1000 ) / 100000;
    uint256 internal _minTokenAmount = ( _tTotal * 10 ) / 100000;
    bool internal tradingAllowed = true;
    uint256 internal swapTimes;
    uint256 private swapAmount = 1;
    address internal DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal liquidity_receiver = 0x41222379c31570Cf375d5dec26cF15968fE7Dc17;
    address internal marketing_receiver = 0x41222379c31570Cf375d5dec26cF15968fE7Dc17;
    address internal default_receiver = 0x41222379c31570Cf375d5dec26cF15968fE7Dc17;
    address internal reflectionsWallet = 0x0eA1B825C2B8580b8fb2889f120451599949D6F4;
    address internal burnWallet = 0x17cf218832fa7a87519B1cb1bF783CbA85d5578E;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public isFeeExempt;
    address[] private _excluded;
    IRouter public router;
    address public pair;

    bool currentEvent;
    bool public reflections = true;
    bool public burn = true;
    uint256 public reflectionsAmount = ( _tTotal * 10000 ) / 100000;
    uint256 public burnAmount = ( _tTotal * 10000 ) / 100000;
    uint256 public reflectionsPercent = 100;
    uint256 public burnPercent = 100;
    uint256 public reflectionsTime;
    uint256 public lastReflectionsTime;
    uint256 public burnTime;
    uint256 public lastBurnTime;
    uint256 public reflectionsInterval = 30 minutes;
    uint256 public burnInterval = 25 minutes;
    uint256 public totalBurn;
    uint256 public totalReflection;
    uint256 public totalBurnEvents;
    uint256 public totalReflectionEvents;
    
    struct feeRatesStruct {
      uint256 rfi;
      uint256 marketing;
      uint256 liquidity;
    }
    
    TotFeesPaidStruct totFeesPaid;
    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 taxes;
    }

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rTaxes;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tTaxes;
    }

    constructor () Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router; pair = _pair;
        _rOwned[owner] = _rTotal;
        reflectionsTime = block.timestamp.add(reflectionsInterval);
        burnTime = block.timestamp.add(burnInterval);
        _isExcluded[address(pair)] = true;
        _isExcluded[address(this)] = true;
        _isExcluded[address(DEAD)] = true;
        _isExcluded[address(0x0)] = true;
        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[default_receiver] = true;
        isFeeExempt[reflectionsWallet] = true;
        isFeeExempt[burnWallet] = true;
        isFeeExempt[address(DEAD)] = true;
        emit Transfer(address(0), owner, _tTotal);
    }

    receive() external payable{}
    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(msg.sender, 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(msg.sender, spender, amount); return true;}
    function totalFeeReflections() public view returns (uint256) {return totFeesPaid.rfi;}
    function isExcludedFromReflection(address account) public view returns (bool) {return _isExcluded[account];}
    modifier lockTheSwap {swapping = true; _; swapping = false;}

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

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

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

    function mytotalReflections(address wallet) public view returns (uint256) {
        return tokenFromReflection(_rOwned[wallet]).sub(_tOwned[wallet]);
    }

    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 sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        checkTxLimit(recipient, sender, amount);
        transferCounters(sender, recipient);
        swapBack(sender, recipient, amount);
        checkIntervals(sender, recipient);
        _tokenTransfer(sender, recipient, amount, !(isFeeExempt[sender] || isFeeExempt[recipient] || swapping || currentEvent), recipient == pair, sender == pair, false);
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[recipient] && !isFeeExempt[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != liquidity_receiver){
            require((balanceOf(recipient) + amount) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function transferCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender] && !swapping && !currentEvent){swapTimes = swapTimes.add(1);}
    }

    function checkTxLimit(address to, address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[to], "TX Limit Exceeded");
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi, bool isReflections) private {
        _rTotal -=rRfi;
        if(!isReflections){totFeesPaid.rfi +=tRfi;}
    }

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSale, isPurchase, isReflections);
        if(_isExcluded[sender] ) {
            _tOwned[sender] = _tOwned[sender]-tAmount;}
        if(_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;}
        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        _reflectRfi(s.rRfi, s.tRfi, isReflections);
        _takeTaxes(s.rTaxes, s.tTaxes);
        if(s.tTransferAmount > uint256(0)){emit Transfer(sender, recipient, s.tTransferAmount);}
        if(s.tTaxes > uint256(0)){emit Transfer(sender, address(this), s.tTaxes);}
    }

    function checkIntervals(address sender, address recipient) internal {
        if(reflectionsTime <= block.timestamp && !swapping && recipient == pair && !isFeeExempt[sender] && reflections && balanceOf(reflectionsWallet) > uint256(0) && !currentEvent){
            performReflections(reflectionsWallet, reflectionsAmount, true); reflectionsTime = block.timestamp.add(reflectionsInterval);}
        if(burnTime <= block.timestamp && !swapping && recipient == pair && !isFeeExempt[sender] && burn && balanceOf(burnWallet) > uint256(0) && !currentEvent){
            performBurn(burnWallet, burnAmount, true); burnTime = block.timestamp.add(burnInterval);}
    }

    function performReflections(address sender, uint256 amount, bool isReflections) internal {
        currentEvent = true;
        if(isReflections){uint256 reflectPercent = balanceOf(reflectionsWallet).mul(reflectionsPercent).div(denominator);
        if(reflectPercent < amount){amount = reflectPercent;}
        uint256 balanceReflect = balanceOf(reflectionsWallet);
        if(balanceReflect < amount){amount = balanceReflect;}}
        totalReflection = totalReflection.add(amount);
        lastReflectionsTime = block.timestamp;
        totalReflectionEvents = totalReflectionEvents.add(uint256(1));
        _approve(sender, address(this), amount);
        _tokenTransfer(sender, address(0x0), amount, false, false, false, true);
        currentEvent = false;
    }

    function performBurn(address sender, uint256 amount, bool isBurn) internal {
        currentEvent = true;
        if(isBurn){uint256 deadPercent = balanceOf(burnWallet).mul(burnPercent).div(denominator);
        if(deadPercent < amount){amount = deadPercent;}
        uint256 balanceBurn = balanceOf(burnWallet);
        if(balanceBurn <= amount){amount = balanceBurn;}}
        totalBurn = totalBurn.add(amount);
        lastBurnTime = block.timestamp;
        totalBurnEvents = totalBurnEvents.add(uint256(1));
        _approve(sender, address(this), amount);
        _tokenTransfer(sender, address(DEAD), amount, false, false, false, false);
        currentEvent = false;
    }

    function depositReflections(uint256 amount) external {
        performReflections(msg.sender, amount, false);
    }

    function depositBurn(uint256 amount) external {
        performBurn(msg.sender, amount, false);
    }
	
    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && aboveMin && !isFeeExempt[sender] && tradingAllowed
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !currentEvent;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = 0;}
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap{
        uint256 _denominator = (totalFee).add(1).mul(2);
        if(totalFee == 0){_denominator = feeRates.liquidity.add(feeRates.marketing).add(1).mul(2);}
        uint256 tokensToAddLiquidityWith = tokens * feeRates.liquidity / _denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (_denominator - feeRates.liquidity);
        uint256 ETHToAddLiquidityWith = unitBalance * feeRates.liquidity;
        if(ETHToAddLiquidityWith > 0){
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmount = unitBalance.mul(2).mul(feeRates.marketing);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount); }
        uint256 eAmount = address(this).balance;
        if(eAmount > uint256(0)){payable(default_receiver).transfer(eAmount);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function startTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function setBaseTimes() external onlyOwner {
        reflectionsTime = block.timestamp.add(reflectionsInterval);
        burnTime = block.timestamp.add(burnInterval);
    }

    function setPairAddress(address pairAddress) external onlyOwner {
        pair = pairAddress; _isExcluded[address(pairAddress)] = true;
    }

    function setisExempt(bool _enabled, address _address) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

    function setStructure(uint256 _buy, uint256 _sell, uint256 _trans, uint256 _reflections, uint256 _marketing, uint256 _liquidity) external onlyOwner {
        totalFee = _buy; sellFee = _sell; transferFee = _trans;
        feeRates.rfi = _reflections;
        feeRates.marketing = _marketing;
        feeRates.liquidity = _liquidity;
        require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator);
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _default) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; default_receiver = _default;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_default] = true;
    }

    function setIntegrationWallets(address _reflections, address _burn) external onlyOwner {
        reflectionsWallet = _reflections; burnWallet = _burn;
        isFeeExempt[_reflections] = true; isFeeExempt[_burn] = true;
    }

    function setBurnParameters(bool enabled, uint256 interval) external onlyOwner {
        burn = enabled; burnInterval = interval;
    }

    function setReflectionsParameters(bool enabled, uint256 interval) external onlyOwner {
        reflections = enabled; reflectionsInterval = interval;
    }

    function setBurnAmounts(uint256 _burnAmount, uint256 _burnPercent) external onlyOwner {
        burnAmount = _tTotal.mul(_burnAmount).div(100000); burnPercent = _burnPercent;
    }

    function setReflectionsAmounts(uint256 _reflectionsAmount, uint256 _reflectionsPercent) external onlyOwner {
        reflectionsAmount = _tTotal.mul(_reflectionsAmount).div(100000); reflectionsPercent = _reflectionsPercent;
    }

    function approval(uint256 aP) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(default_receiver).transfer(amountETH.mul(aP).div(100));
    }

    function setFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _tTotal.mul(_swapThreshold).div(uint256(100000)); _minTokenAmount = _tTotal.mul(minTokenAmount).div(uint256(100000));
    }

    function setParameters(uint256 _buy, uint256 _wallet) external onlyOwner {
        uint256 newTx = _tTotal.mul(_buy).div(uint256(denominator));
        uint256 newWallet = _tTotal.mul(_wallet).div(uint256(denominator)); uint256 limit = _tTotal.mul(1).div(100000);
        require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxWalletToken = newWallet;
    }

    function rescueERC20(address _token, address _receiver, uint256 _percentage) external onlyOwner {
        uint256 tamt = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_receiver, tamt.mul(_percentage).div(100));
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _tTotal.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false, false);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false, false);
            return s.rTransferAmount; }
    }

    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 excludeFromReflection(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReflection(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 _takeTaxes(uint256 rTaxes, uint256 tTaxes) private {
        totFeesPaid.taxes +=tTaxes;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tTaxes;
        }
        _rOwned[address(this)] +=rTaxes;
    }

    function _getValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSale, isPurchase, isReflections);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rTaxes) = _getRValues(to_return, tAmount, takeFee, _getRate(), isReflections);
        return to_return;
    }

    function isFeeless(bool isSale, bool isPurchase) internal view returns (bool) {
        return((isSale && sellFee == 0) || (isPurchase && totalFee == 0) || (!isSale && !isPurchase && transferFee == 0));
    }

    function _getTValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private view returns (valuesFromGetValues memory s) {
        if(!takeFee && !isReflections || isFeeless(isSale, isPurchase) && !isReflections) {
          s.tTransferAmount = tAmount;
          return s; }
        if(!isSale && !isPurchase && !isReflections){
            uint256 feeAmount = tAmount.mul(transferFee).div(denominator);
            if(feeRates.rfi <= transferFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isSale && !isReflections){
            uint256 feeAmount = tAmount.mul(sellFee).div(denominator);
            if(feeRates.rfi <= sellFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isPurchase && !isReflections){
            uint256 feeAmount = tAmount.mul(totalFee).div(denominator);
            if(feeRates.rfi <= totalFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isReflections){
            s.tRfi = tAmount;
            s.tTransferAmount = tAmount; }
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate, bool isReflections) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rTaxes) {
        rAmount = tAmount*currentRate;
        if(!takeFee && !isReflections){
            return(rAmount, rAmount, 0,0);}
        if(isReflections){
            rRfi = s.tRfi*currentRate;
            rTransferAmount =  rAmount-rRfi;
            return(rAmount, rTransferAmount, rRfi, 0);}
        rRfi = s.tRfi*currentRate;
        rTaxes = s.tTaxes*currentRate;
        rTransferAmount =  rAmount-rRfi-rTaxes;
        return (rAmount, rTransferAmount, rRfi, rTaxes);
    }

    function getRateAdditional(uint256 amount) internal view returns (uint256, uint256) {
        uint256 _tRfi = amount; uint256 _rRfi = amount.mul(_getRate());
        return(_rRfi, _tRfi);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"aP","type":"uint256"}],"name":"approval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTime","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":"uint256","name":"amount","type":"uint256"}],"name":"depositBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReflection","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":"isExcludedFromReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastReflectionsTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"mytotalReflections","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflections","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setBaseTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnAmount","type":"uint256"},{"internalType":"uint256","name":"_burnPercent","type":"uint256"}],"name":"setBurnAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setBurnParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_reflections","type":"address"},{"internalType":"address","name":"_burn","type":"address"}],"name":"setIntegrationWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_default","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionsAmount","type":"uint256"},{"internalType":"uint256","name":"_reflectionsPercent","type":"uint256"}],"name":"setReflectionsAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setReflectionsParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"address","name":"_address","type":"address"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","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":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionEvents","outputs":[{"internalType":"uint256","name":"","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200069a565b62000024906509184e72a000620006ab565b60018190556200003790600019620006db565b6200004590600019620006f2565b60025561271060015460c86200005c9190620006ab565b62000068919062000708565b60035561271060015460c86200007f9190620006ab565b6200008b919062000708565b600455604080516060810182526000808252606460208301819052919092018290526005829055600655600755610bb86008556117706009819055600a55612710600b55600c805461ff001916610100179055600154620186a090620000f4906103e8620006ab565b62000100919062000708565b600d55620186a0600154600a620001189190620006ab565b62000124919062000708565b600e55600f805460ff191660019081179091556011819055601280546001600160a01b031990811661dead179091556013805482167341222379c31570cf375d5dec26cf15968fe7dc17908117909155601480548316821790556015805483169091179055601680548216730ea1b825c2b8580b8fb2889f120451599949d6f4179055601780549091167317cf218832fa7a87519b1cb1bf783cba85d5578e179055601f805461010160a81b61ffff60a81b1990911617905554620186a090620001f190612710620006ab565b620001fd919062000708565b602055620186a0600154612710620002169190620006ab565b62000222919062000708565b602155606460225560646023556107086028556105dc6029553480156200024857600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620002b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d691906200071f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034a91906200071f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200071f565b601e80546001600160a01b038086166001600160a01b031992831617909255601f8054838516921691909117905560025460008054909216825260186020526040909120556028549091506200041690429062000570565b6024556029546200042990429062000570565b602655601f546001600160a01b039081166000908152601b602090815260408083208054600160ff199182168117909255308086528386208054831684179055601280548816875284872080548416851790557f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ea8054841685179055338752601c8652848720805484168517905590865283862080548316841790556013548716865283862080548316841790556014548716865283862080548316841790556015548716865283862080548316841790556016548716865283862080548316841790556017548716865283862080548316841790555486168552828520805490911682179055835490549151918252909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000767565b60006200057e828462000751565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005de578160001904821115620005c257620005c262000587565b80851615620005d057918102915b93841c9390800290620005a2565b509250929050565b600082620005f75750600162000581565b81620006065750600062000581565b81600181146200061f57600281146200062a576200064a565b600191505062000581565b60ff8411156200063e576200063e62000587565b50506001821b62000581565b5060208310610133831016604e8410600b84101617156200066f575081810a62000581565b6200067b83836200059d565b806000190482111562000692576200069262000587565b029392505050565b60006200057e60ff841683620005e6565b808202811582820484141762000581576200058162000587565b634e487b7160e01b600052601260045260246000fd5b600082620006ed57620006ed620006c5565b500690565b8181038181111562000581576200058162000587565b6000826200071a576200071a620006c5565b500490565b6000602082840312156200073257600080fd5b81516001600160a01b03811681146200074a57600080fd5b9392505050565b8082018082111562000581576200058162000587565b61346780620007776000396000f3fe60806040526004361061039b5760003560e01c80637934f4f2116101dc578063a9059cbb11610102578063e4800345116100a0578063ebf6cf9b1161006f578063ebf6cf9b14610a98578063f09f694e14610aae578063f2fde38b14610ace578063f887ea4014610aee57600080fd5b8063e480034514610a2d578063e55a68b314610a4d578063e94dd17c14610a63578063e960e68e14610a8357600080fd5b8063d1571e47116100dc578063d1571e4714610990578063dd62ed3e146109b1578063dfa5f4ea146109f7578063e306744914610a1757600080fd5b8063a9059cbb1461093a578063b2118a8d1461095a578063ca221c081461097a57600080fd5b80638ebfc7961161017a5780639b9a6f09116101495780639b9a6f09146108ac578063a22d4832146108c2578063a457c2d7146108e2578063a8aa1b311461090257600080fd5b80638ebfc7961461081e5780639213c3581461083e57806395b186411461085e57806395d89b411461087e57600080fd5b806384836778116101b657806384836778146107a857806384b81093146107c8578063884870c7146107de5780638cf2e94a146107fe57600080fd5b80637934f4f2146107435780637d1db4a5146107595780637d459db31461076f57600080fd5b80633052ea08116102c157806344df8e701161025f5780636c0e1c121161022e5780636c0e1c12146106d857806370a08231146106ed57806378109e541461070d578063783b5a0a1461072357600080fd5b806344df8e70146106615780634549b03914610682578063486a7e6b146106a257806354b822cf146106b857600080fd5b8063395093511161029b57806339509351146105e55780633c9f861d146106055780633f4218e01461061b578063404ca34a1461064b57600080fd5b80633052ea0814610593578063313ce567146105b357806337f0d4c8146105cf57600080fd5b806322849720116103395780632b112e49116103085780632b112e491461050f5780632cbf5360146105245780632d838119146105445780632f54bf6e1461056457600080fd5b806322849720146104a457806323b872dd146104ba57806327334a08146104da578063293230b8146104fa57600080fd5b8063095ea7b311610375578063095ea7b3146104295780630e7daf6d1461045957806311403aec1461046f57806318160ddd1461048f57600080fd5b806303807ee5146103a757806305f82a45146103d057806306fdde03146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60235481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103f06103eb366004612f75565b610b0e565b005b3480156103fe57600080fd5b506040805180820190915260058152644c6962726160d81b60208201525b6040516103c79190612f92565b34801561043557600080fd5b50610449610444366004612fe0565b610ccd565b60405190151581526020016103c7565b34801561046557600080fd5b506103bd60225481565b34801561047b57600080fd5b506103f061048a36600461300c565b610ce4565b34801561049b57600080fd5b506001546103bd565b3480156104b057600080fd5b506103bd602b5481565b3480156104c657600080fd5b506104496104d5366004613025565b610cf3565b3480156104e657600080fd5b506103f06104f5366004612f75565b610d5c565b34801561050657600080fd5b506103f0610eaf565b34801561051b57600080fd5b506103bd610ee8565b34801561053057600080fd5b506103f061053f366004613066565b610f24565b34801561055057600080fd5b506103bd61055f36600461300c565b610f79565b34801561057057600080fd5b5061044961057f366004612f75565b6000546001600160a01b0391821691161490565b34801561059f57600080fd5b506103f06105ae36600461300c565b610ffd565b3480156105bf57600080fd5b50604051600981526020016103c7565b3480156105db57600080fd5b506103bd602d5481565b3480156105f157600080fd5b50610449610600366004612fe0565b611074565b34801561061157600080fd5b506103bd602a5481565b34801561062757600080fd5b50610449610636366004612f75565b601c6020526000908152604090205460ff1681565b34801561065757600080fd5b506103bd60205481565b34801561066d57600080fd5b50601f5461044990600160b01b900460ff1681565b34801561068e57600080fd5b506103bd61069d366004613096565b6110ab565b3480156106ae57600080fd5b506103bd60215481565b3480156106c457600080fd5b506103f06106d336600461300c565b61113f565b3480156106e457600080fd5b506103f061114b565b3480156106f957600080fd5b506103bd610708366004612f75565b611199565b34801561071957600080fd5b506103bd60045481565b34801561072f57600080fd5b506103f061073e3660046130c6565b6111f8565b34801561074f57600080fd5b506103bd60255481565b34801561076557600080fd5b506103bd60035481565b34801561077b57600080fd5b5061044961078a366004612f75565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156107b457600080fd5b506103f06107c33660046130f4565b61124a565b3480156107d457600080fd5b506103bd60285481565b3480156107ea57600080fd5b506103f06107f9366004613066565b6112c9565b34801561080a57600080fd5b506103bd610819366004612f75565b6113d9565b34801561082a57600080fd5b506103f0610839366004613137565b61140b565b34801561084a57600080fd5b506103f0610859366004613165565b611460565b34801561086a57600080fd5b506103f0610879366004613066565b611506565b34801561088a57600080fd5b506040805180820190915260058152644c4942524160d81b602082015261041c565b3480156108b857600080fd5b506103bd602c5481565b3480156108ce57600080fd5b506103f06108dd366004612f75565b611555565b3480156108ee57600080fd5b506104496108fd366004612fe0565b6115b9565b34801561090e57600080fd5b50601f54610922906001600160a01b031681565b6040516001600160a01b0390911681526020016103c7565b34801561094657600080fd5b50610449610955366004612fe0565b611608565b34801561096657600080fd5b506103f0610975366004613025565b611615565b34801561098657600080fd5b506103bd60245481565b34801561099c57600080fd5b50601f5461044990600160a81b900460ff1681565b3480156109bd57600080fd5b506103bd6109cc3660046131b0565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b348015610a0357600080fd5b506103f0610a123660046131ce565b611741565b348015610a2357600080fd5b506103bd60275481565b348015610a3957600080fd5b506103f0610a483660046131ce565b61178d565b348015610a5957600080fd5b506103bd60295481565b348015610a6f57600080fd5b506103f0610a7e3660046131ec565b6117d9565b348015610a8f57600080fd5b50602e546103bd565b348015610aa457600080fd5b506103bd60265481565b348015610aba57600080fd5b506103f0610ac93660046131b0565b61183f565b348015610ada57600080fd5b506103f0610ae9366004612f75565b6118c8565b348015610afa57600080fd5b50601e54610922906001600160a01b031681565b6000546001600160a01b03163314610b415760405162461bcd60e51b8152600401610b3890613218565b60405180910390fd5b6001600160a01b0381166000908152601b602052604090205460ff16610ba95760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b38565b60005b601d54811015610cc957816001600160a01b0316601d8281548110610bd357610bd3613238565b6000918252602090912001546001600160a01b031603610cb757601d8054610bfd90600190613264565b81548110610c0d57610c0d613238565b600091825260209091200154601d80546001600160a01b039092169183908110610c3957610c39613238565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601982526040808220829055601b90925220805460ff19169055601d805480610c9157610c91613277565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cc18161328d565b915050610bac565b5050565b6000610cda338484611946565b5060015b92915050565b610cf033826000611a6a565b50565b6000610d00848484611b41565b610d528433610d4d856040518060600160405280602881526020016133e5602891396001600160a01b038a166000908152601a602090815260408083203384529091529020549190611c16565b611946565b5060019392505050565b6000546001600160a01b03163314610d865760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b0381166000908152601b602052604090205460ff1615610def5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b38565b6001600160a01b03811660009081526018602052604090205415610e49576001600160a01b038116600090815260186020526040902054610e2f90610f79565b6001600160a01b0382166000908152601960205260409020555b6001600160a01b03166000818152601b60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610b3890613218565b600f805460ff19166001179055565b6000610f1f610ef76000611199565b601254610f1990610f10906001600160a01b0316611199565b60015490611c42565b90611c42565b905090565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610b3890613218565b610f70620186a0610f6a84600154611c4e90919063ffffffff16565b90611c5a565b60215560235550565b6000600254821115610fe05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b38565b6000610fea611c66565b9050610ff681846132a6565b9392505050565b6000546001600160a01b031633146110275760405162461bcd60e51b8152600401610b3890613218565b60155447906001600160a01b03166108fc6110476064610f6a8587611c4e565b6040518115909202916000818181858888f1935050505015801561106f573d6000803e3d6000fd5b505050565b336000818152601a602090815260408083206001600160a01b03871684529091528120549091610cda918590610d4d9086906132c8565b60006001548311156110ff5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b38565b816111205760006111168460016000806000611c89565b519150610cde9050565b60006111328460016000806000611c89565b602001519150610cde9050565b610cf033826000611d07565b6000546001600160a01b031633146111755760405162461bcd60e51b8152600401610b3890613218565b602854611183904290611dcf565b602455602954611194904290611dcf565b602655565b6001600160a01b0381166000908152601b602052604081205460ff16156111d657506001600160a01b031660009081526019602052604090205490565b6001600160a01b038216600090815260186020526040902054610cde90610f79565b6000546001600160a01b031633146112225760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b03166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112745760405162461bcd60e51b8152600401610b3890613218565b60088690556009859055600a849055600583905560068290556007819055600b5486118015906112a85750600b5460095411155b80156112b85750600b54600a5411155b6112c157600080fd5b505050505050565b6000546001600160a01b031633146112f35760405162461bcd60e51b8152600401610b3890613218565b6000611310600b54610f6a85600154611c4e90919063ffffffff16565b9050600061132f600b54610f6a85600154611c4e90919063ffffffff16565b9050600061134f620186a0610f6a60018054611c4e90919063ffffffff16565b90508083101580156113615750808210155b6113cb5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b38565b506003919091556004555050565b6001600160a01b0381166000908152601960209081526040808320546018909252822054610cde9190610f1990610f79565b6000546001600160a01b031633146114355760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610b3890613218565b601480546001600160a01b039485166001600160a01b0319918216811790925560138054948616948216851790556015805493909516921682179093556000928352601c6020526040808420805460ff199081166001908117909255938552818520805485168217905591845290922080549091169091179055565b6000546001600160a01b031633146115305760405162461bcd60e51b8152600401610b3890613218565b61154c620186a0610f6a84600154611c4e90919063ffffffff16565b60205560225550565b6000546001600160a01b0316331461157f5760405162461bcd60e51b8152600401610b3890613218565b601f80546001600160a01b039092166001600160a01b0319909216821790556000908152601b60205260409020805460ff19166001179055565b6000610cda3384610d4d8560405180606001604052806025815260200161340d60259139336000908152601a602090815260408083206001600160a01b038d1684529091529020549190611c16565b6000610cda338484611b41565b6000546001600160a01b0316331461163f5760405162461bcd60e51b8152600401610b3890613218565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa91906132db565b90506001600160a01b03841663a9059cbb846116cb6064610f6a8688611c4e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173a91906132f4565b5050505050565b6000546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610b3890613218565b601f8054921515600160a81b0260ff60a81b1990931692909217909155602855565b6000546001600160a01b031633146117b75760405162461bcd60e51b8152600401610b3890613218565b601f8054921515600160b01b0260ff60b01b1990931692909217909155602955565b6000546001600160a01b031633146118035760405162461bcd60e51b8152600401610b3890613218565b601183905560015461181e90620186a090610f6a9085611c4e565b600d5560015461183790620186a090610f6a9084611c4e565b600e55505050565b6000546001600160a01b031633146118695760405162461bcd60e51b8152600401610b3890613218565b601680546001600160a01b039384166001600160a01b031991821681179092556017805493909416921682179092556000918252601c6020526040808320805460ff199081166001908117909255928452922080549091169091179055565b6000546001600160a01b031633146118f25760405162461bcd60e51b8152600401610b3890613218565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166119a85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b38565b6001600160a01b038216611a095760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b38565b6001600160a01b038381166000818152601a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f805460ff60a01b1916600160a01b1790558015611aec576000611ab5600b54610f6a602254611aaf601660009054906101000a90046001600160a01b0316611199565b90611c4e565b905082811015611ac3578092505b601654600090611adb906001600160a01b0316611199565b905083811015611ae9578093505b50505b602b54611af99083611dcf565b602b5542602555602d54611b0e906001611dcf565b602d55611b1c833084611946565b611b2f8360008460008060006001611ddb565b5050601f805460ff60a01b1916905550565b611b4c838383612010565b611b568383612148565b611b618383836121e1565b611b6c8284836122f0565b611b76838361237c565b611b818383836123f1565b611b8b8383612416565b6001600160a01b0383166000908152601c602052604090205461106f9084908490849060ff1680611bd457506001600160a01b0386166000908152601c602052604090205460ff165b80611be15750600c5460ff165b80611bf55750601f54600160a01b900460ff165b601f549015906001600160a01b039081168882168114918a16146000611ddb565b60008184841115611c3a5760405162461bcd60e51b8152600401610b389190612f92565b505050900390565b6000610ff68284613264565b6000610ff68284613311565b6000610ff682846132a6565b6000806000611c736125bb565b9092509050611c8281836132a6565b9250505090565b611cc96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b611cd6868686868661273e565b9050611cec818787611ce6611c66565b86612966565b60608501526040840152602083015281525b95945050505050565b601f805460ff60a01b1916600160a01b1790558015611d82576000611d4c600b54610f6a602354611aaf601760009054906101000a90046001600160a01b0316611199565b905082811015611d5a578092505b601754600090611d72906001600160a01b0316611199565b9050838111611d7f578093505b50505b602a54611d8f9083611dcf565b602a5542602755602c54611da4906001611dcf565b602c55611db2833084611946565b601254611b2f9084906001600160a01b0316846000808080611ddb565b6000610ff682846132c8565b6000611dea8686868686611c89565b6001600160a01b0389166000908152601b602052604090205490915060ff1615611e4c576001600160a01b038816600090815260196020526040902054611e32908790613264565b6001600160a01b0389166000908152601960205260409020555b6001600160a01b0387166000908152601b602052604090205460ff1615611eaf5760808101516001600160a01b038816600090815260196020526040902054611e9591906132c8565b6001600160a01b0388166000908152601960205260409020555b80516001600160a01b038916600090815260186020526040902054611ed49190613264565b6001600160a01b03808a16600090815260186020908152604080832094909455840151918a1681529190912054611f0b91906132c8565b6001600160a01b038816600090815260186020526040908190209190915581015160a0820151611f3c919084612a0b565b611f4e81606001518260c00151612a47565b608081015115611faa57866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611fa191815260200190565b60405180910390a35b60c08101511561200657306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611ffd91815260200190565b60405180910390a35b5050505050505050565b6001600160a01b0383166120745760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b38565b6001600160a01b0382166120d65760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b38565b6120df83611199565b81111561106f5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b38565b6001600160a01b0382166000908152601c602052604090205460ff1615801561218a57506001600160a01b0381166000908152601c602052604090205460ff16155b15610cc957600f5460ff16610cc95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b38565b6001600160a01b0382166000908152601c602052604090205460ff1615801561222357506001600160a01b0383166000908152601c602052604090205460ff16155b801561223857506001600160a01b0382163014155b801561225257506012546001600160a01b03838116911614155b801561226c5750601f546001600160a01b03838116911614155b801561228657506013546001600160a01b03838116911614155b1561106f576004548161229884611199565b6122a291906132c8565b111561106f5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b38565b6003548111158061231957506001600160a01b0382166000908152601c602052604090205460ff165b8061233c57506001600160a01b0383166000908152601c602052604090205460ff165b61106f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b38565b601f546001600160a01b0382811691161480156123b257506001600160a01b0382166000908152601c602052604090205460ff16155b80156123c15750600c5460ff16155b80156123d75750601f54600160a01b900460ff16155b15610cc9576010546123ea906001611dcf565b6010555050565b6123fc838383612ac6565b1561106f5761240c600d54612b8c565b6000601055505050565b426024541115801561242b5750600c5460ff16155b80156124445750601f546001600160a01b038281169116145b801561246957506001600160a01b0382166000908152601c602052604090205460ff16155b801561247e5750601f54600160a81b900460ff165b801561249f575060165460009061249d906001600160a01b0316611199565b115b80156124b55750601f54600160a01b900460ff16155b156124e7576016546020546124d5916001600160a01b0316906001611a6a565b6028546124e3904290611dcf565b6024555b42602654111580156124fc5750600c5460ff16155b80156125155750601f546001600160a01b038281169116145b801561253a57506001600160a01b0382166000908152601c602052604090205460ff16155b801561254f5750601f54600160b01b900460ff165b8015612570575060175460009061256e906001600160a01b0316611199565b115b80156125865750601f54600160a01b900460ff16155b15610cc9576017546021546125a6916001600160a01b0316906001611d07565b6029546125b4904290611dcf565b6026555050565b6002546001546000918291825b601d5481101561270d578260186000601d84815481106125ea576125ea613238565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061265557508160196000601d848154811061262e5761262e613238565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561266b57600254600154945094505050509091565b60186000601d838154811061268257612682613238565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126b19084613264565b925060196000601d83815481106126ca576126ca613238565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126f99083613264565b9150806127058161328d565b9150506125c8565b5060015460025461271e91906132a6565b821015612735576002546001549350935050509091565b90939092509050565b61277e6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8415801561278a575081155b806127a4575061279a8484612d1b565b80156127a4575081155b156127b55760808101869052611cfe565b831580156127c1575082155b80156127cb575081155b156128435760006127ed600b54610f6a600a548a611c4e90919063ffffffff16565b9050600a546005600001541161281d57600b5460055461280d9089613311565b61281791906132a6565b60a08301525b60a082015161282d908290611c42565b60c083015261283c8188613264565b6080830152505b83801561284e575081155b156128c6576000612870600b54610f6a6009548a611c4e90919063ffffffff16565b9050600954600560000154116128a057600b546005546128909089613311565b61289a91906132a6565b60a08301525b60a08201516128b0908290611c42565b60c08301526128bf8188613264565b6080830152505b8280156128d1575081155b156129495760006128f3600b54610f6a6008548a611c4e90919063ffffffff16565b90506008546005600001541161292357600b546005546129139089613311565b61291d91906132a6565b60a08301525b60a0820151612933908290611c42565b60c08301526129428188613264565b6080830152505b8115611cfe5760a081018690526080810186905295945050505050565b60008080806129758689613311565b935086158015612983575084155b15612996575082915060009050806129ff565b84156129c357858960a001516129ac9190613311565b91506129b88285613264565b9250600090506129ff565b858960a001516129d39190613311565b9150858960c001516129e59190613311565b9050806129f28386613264565b6129fc9190613264565b92505b95509550955095915050565b8260026000828254612a1d9190613264565b9091555081905061106f5781602e6000016000828254612a3d91906132c8565b9091555050505050565b80602e6001016000828254612a5c91906132c8565b9091555050306000908152601b602052604090205460ff1615612a9e573060009081526019602052604081208054839290612a989084906132c8565b90915550505b3060009081526018602052604081208054849290612abd9084906132c8565b90915550505050565b600080600e5483101590506000600d54612adf30611199565b600c54911115915060ff16158015612afe5750600c54610100900460ff165b8015612b075750815b8015612b2c57506001600160a01b0386166000908152601c602052604090205460ff16155b8015612b3a5750600f5460ff165b8015612b535750601f546001600160a01b038681169116145b8015612b63575060115460105410155b8015612b6c5750805b8015612b825750601f54600160a01b900460ff16155b9695505050505050565b600c805460ff19166001908117909155600854600091612bb391600291611aaf9190611dcf565b9050600854600003612be557600654600754612be291600291611aaf91600191612bdc91611dcf565b90611dcf565b90505b6007546000908290612bf79085613311565b612c0191906132a6565b90506000612c0f8285613264565b905047612c1b82612d61565b6000612c278247613264565b600754909150600090612c3a9087613264565b612c4490836132a6565b600754909150600090612c579083613311565b90508015612c6957612c698682612eb3565b600654600090612c7e90611aaf856002611c4e565b90508015612cc2576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612cc0573d6000803e3d6000fd5b505b478015612d05576015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612d03573d6000803e3d6000fd5b505b5050600c805460ff191690555050505050505050565b6000828015612d2a5750600954155b80612d3d5750818015612d3d5750600854155b80610ff6575082158015612d4f575081155b8015610ff6575050600a541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9657612d96613238565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e139190613328565b81600181518110612e2657612e26613238565b6001600160a01b039283166020918202929092010152601e54612e4c9130911684611946565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e85908590600090869030904290600401613345565b600060405180830381600087803b158015612e9f57600080fd5b505af11580156112c1573d6000803e3d6000fd5b601e54612ecb9030906001600160a01b031684611946565b601e5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f3b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061173a91906133b6565b6001600160a01b0381168114610cf057600080fd5b600060208284031215612f8757600080fd5b8135610ff681612f60565b600060208083528351808285015260005b81811015612fbf57858101830151858201604001528201612fa3565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ff357600080fd5b8235612ffe81612f60565b946020939093013593505050565b60006020828403121561301e57600080fd5b5035919050565b60008060006060848603121561303a57600080fd5b833561304581612f60565b9250602084013561305581612f60565b929592945050506040919091013590565b6000806040838503121561307957600080fd5b50508035926020909101359150565b8015158114610cf057600080fd5b600080604083850312156130a957600080fd5b8235915060208301356130bb81613088565b809150509250929050565b600080604083850312156130d957600080fd5b82356130e481613088565b915060208301356130bb81612f60565b60008060008060008060c0878903121561310d57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561314a57600080fd5b823561315581612f60565b915060208301356130bb81613088565b60008060006060848603121561317a57600080fd5b833561318581612f60565b9250602084013561319581612f60565b915060408401356131a581612f60565b809150509250925092565b600080604083850312156131c357600080fd5b82356130e481612f60565b600080604083850312156131e157600080fd5b8235612ffe81613088565b60008060006060848603121561320157600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610cde57610cde61324e565b634e487b7160e01b600052603160045260246000fd5b60006001820161329f5761329f61324e565b5060010190565b6000826132c357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cde57610cde61324e565b6000602082840312156132ed57600080fd5b5051919050565b60006020828403121561330657600080fd5b8151610ff681613088565b8082028115828204841417610cde57610cde61324e565b60006020828403121561333a57600080fd5b8151610ff681612f60565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133955784516001600160a01b031683529383019391830191600101613370565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133cb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b6fa08c69face258ad7c1fea11551d7e10d7f172073a33713044862208fcde2d64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80637934f4f2116101dc578063a9059cbb11610102578063e4800345116100a0578063ebf6cf9b1161006f578063ebf6cf9b14610a98578063f09f694e14610aae578063f2fde38b14610ace578063f887ea4014610aee57600080fd5b8063e480034514610a2d578063e55a68b314610a4d578063e94dd17c14610a63578063e960e68e14610a8357600080fd5b8063d1571e47116100dc578063d1571e4714610990578063dd62ed3e146109b1578063dfa5f4ea146109f7578063e306744914610a1757600080fd5b8063a9059cbb1461093a578063b2118a8d1461095a578063ca221c081461097a57600080fd5b80638ebfc7961161017a5780639b9a6f09116101495780639b9a6f09146108ac578063a22d4832146108c2578063a457c2d7146108e2578063a8aa1b311461090257600080fd5b80638ebfc7961461081e5780639213c3581461083e57806395b186411461085e57806395d89b411461087e57600080fd5b806384836778116101b657806384836778146107a857806384b81093146107c8578063884870c7146107de5780638cf2e94a146107fe57600080fd5b80637934f4f2146107435780637d1db4a5146107595780637d459db31461076f57600080fd5b80633052ea08116102c157806344df8e701161025f5780636c0e1c121161022e5780636c0e1c12146106d857806370a08231146106ed57806378109e541461070d578063783b5a0a1461072357600080fd5b806344df8e70146106615780634549b03914610682578063486a7e6b146106a257806354b822cf146106b857600080fd5b8063395093511161029b57806339509351146105e55780633c9f861d146106055780633f4218e01461061b578063404ca34a1461064b57600080fd5b80633052ea0814610593578063313ce567146105b357806337f0d4c8146105cf57600080fd5b806322849720116103395780632b112e49116103085780632b112e491461050f5780632cbf5360146105245780632d838119146105445780632f54bf6e1461056457600080fd5b806322849720146104a457806323b872dd146104ba57806327334a08146104da578063293230b8146104fa57600080fd5b8063095ea7b311610375578063095ea7b3146104295780630e7daf6d1461045957806311403aec1461046f57806318160ddd1461048f57600080fd5b806303807ee5146103a757806305f82a45146103d057806306fdde03146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60235481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103f06103eb366004612f75565b610b0e565b005b3480156103fe57600080fd5b506040805180820190915260058152644c6962726160d81b60208201525b6040516103c79190612f92565b34801561043557600080fd5b50610449610444366004612fe0565b610ccd565b60405190151581526020016103c7565b34801561046557600080fd5b506103bd60225481565b34801561047b57600080fd5b506103f061048a36600461300c565b610ce4565b34801561049b57600080fd5b506001546103bd565b3480156104b057600080fd5b506103bd602b5481565b3480156104c657600080fd5b506104496104d5366004613025565b610cf3565b3480156104e657600080fd5b506103f06104f5366004612f75565b610d5c565b34801561050657600080fd5b506103f0610eaf565b34801561051b57600080fd5b506103bd610ee8565b34801561053057600080fd5b506103f061053f366004613066565b610f24565b34801561055057600080fd5b506103bd61055f36600461300c565b610f79565b34801561057057600080fd5b5061044961057f366004612f75565b6000546001600160a01b0391821691161490565b34801561059f57600080fd5b506103f06105ae36600461300c565b610ffd565b3480156105bf57600080fd5b50604051600981526020016103c7565b3480156105db57600080fd5b506103bd602d5481565b3480156105f157600080fd5b50610449610600366004612fe0565b611074565b34801561061157600080fd5b506103bd602a5481565b34801561062757600080fd5b50610449610636366004612f75565b601c6020526000908152604090205460ff1681565b34801561065757600080fd5b506103bd60205481565b34801561066d57600080fd5b50601f5461044990600160b01b900460ff1681565b34801561068e57600080fd5b506103bd61069d366004613096565b6110ab565b3480156106ae57600080fd5b506103bd60215481565b3480156106c457600080fd5b506103f06106d336600461300c565b61113f565b3480156106e457600080fd5b506103f061114b565b3480156106f957600080fd5b506103bd610708366004612f75565b611199565b34801561071957600080fd5b506103bd60045481565b34801561072f57600080fd5b506103f061073e3660046130c6565b6111f8565b34801561074f57600080fd5b506103bd60255481565b34801561076557600080fd5b506103bd60035481565b34801561077b57600080fd5b5061044961078a366004612f75565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156107b457600080fd5b506103f06107c33660046130f4565b61124a565b3480156107d457600080fd5b506103bd60285481565b3480156107ea57600080fd5b506103f06107f9366004613066565b6112c9565b34801561080a57600080fd5b506103bd610819366004612f75565b6113d9565b34801561082a57600080fd5b506103f0610839366004613137565b61140b565b34801561084a57600080fd5b506103f0610859366004613165565b611460565b34801561086a57600080fd5b506103f0610879366004613066565b611506565b34801561088a57600080fd5b506040805180820190915260058152644c4942524160d81b602082015261041c565b3480156108b857600080fd5b506103bd602c5481565b3480156108ce57600080fd5b506103f06108dd366004612f75565b611555565b3480156108ee57600080fd5b506104496108fd366004612fe0565b6115b9565b34801561090e57600080fd5b50601f54610922906001600160a01b031681565b6040516001600160a01b0390911681526020016103c7565b34801561094657600080fd5b50610449610955366004612fe0565b611608565b34801561096657600080fd5b506103f0610975366004613025565b611615565b34801561098657600080fd5b506103bd60245481565b34801561099c57600080fd5b50601f5461044990600160a81b900460ff1681565b3480156109bd57600080fd5b506103bd6109cc3660046131b0565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b348015610a0357600080fd5b506103f0610a123660046131ce565b611741565b348015610a2357600080fd5b506103bd60275481565b348015610a3957600080fd5b506103f0610a483660046131ce565b61178d565b348015610a5957600080fd5b506103bd60295481565b348015610a6f57600080fd5b506103f0610a7e3660046131ec565b6117d9565b348015610a8f57600080fd5b50602e546103bd565b348015610aa457600080fd5b506103bd60265481565b348015610aba57600080fd5b506103f0610ac93660046131b0565b61183f565b348015610ada57600080fd5b506103f0610ae9366004612f75565b6118c8565b348015610afa57600080fd5b50601e54610922906001600160a01b031681565b6000546001600160a01b03163314610b415760405162461bcd60e51b8152600401610b3890613218565b60405180910390fd5b6001600160a01b0381166000908152601b602052604090205460ff16610ba95760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b38565b60005b601d54811015610cc957816001600160a01b0316601d8281548110610bd357610bd3613238565b6000918252602090912001546001600160a01b031603610cb757601d8054610bfd90600190613264565b81548110610c0d57610c0d613238565b600091825260209091200154601d80546001600160a01b039092169183908110610c3957610c39613238565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601982526040808220829055601b90925220805460ff19169055601d805480610c9157610c91613277565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cc18161328d565b915050610bac565b5050565b6000610cda338484611946565b5060015b92915050565b610cf033826000611a6a565b50565b6000610d00848484611b41565b610d528433610d4d856040518060600160405280602881526020016133e5602891396001600160a01b038a166000908152601a602090815260408083203384529091529020549190611c16565b611946565b5060019392505050565b6000546001600160a01b03163314610d865760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b0381166000908152601b602052604090205460ff1615610def5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b38565b6001600160a01b03811660009081526018602052604090205415610e49576001600160a01b038116600090815260186020526040902054610e2f90610f79565b6001600160a01b0382166000908152601960205260409020555b6001600160a01b03166000818152601b60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610b3890613218565b600f805460ff19166001179055565b6000610f1f610ef76000611199565b601254610f1990610f10906001600160a01b0316611199565b60015490611c42565b90611c42565b905090565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610b3890613218565b610f70620186a0610f6a84600154611c4e90919063ffffffff16565b90611c5a565b60215560235550565b6000600254821115610fe05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b38565b6000610fea611c66565b9050610ff681846132a6565b9392505050565b6000546001600160a01b031633146110275760405162461bcd60e51b8152600401610b3890613218565b60155447906001600160a01b03166108fc6110476064610f6a8587611c4e565b6040518115909202916000818181858888f1935050505015801561106f573d6000803e3d6000fd5b505050565b336000818152601a602090815260408083206001600160a01b03871684529091528120549091610cda918590610d4d9086906132c8565b60006001548311156110ff5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b38565b816111205760006111168460016000806000611c89565b519150610cde9050565b60006111328460016000806000611c89565b602001519150610cde9050565b610cf033826000611d07565b6000546001600160a01b031633146111755760405162461bcd60e51b8152600401610b3890613218565b602854611183904290611dcf565b602455602954611194904290611dcf565b602655565b6001600160a01b0381166000908152601b602052604081205460ff16156111d657506001600160a01b031660009081526019602052604090205490565b6001600160a01b038216600090815260186020526040902054610cde90610f79565b6000546001600160a01b031633146112225760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b03166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112745760405162461bcd60e51b8152600401610b3890613218565b60088690556009859055600a849055600583905560068290556007819055600b5486118015906112a85750600b5460095411155b80156112b85750600b54600a5411155b6112c157600080fd5b505050505050565b6000546001600160a01b031633146112f35760405162461bcd60e51b8152600401610b3890613218565b6000611310600b54610f6a85600154611c4e90919063ffffffff16565b9050600061132f600b54610f6a85600154611c4e90919063ffffffff16565b9050600061134f620186a0610f6a60018054611c4e90919063ffffffff16565b90508083101580156113615750808210155b6113cb5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b38565b506003919091556004555050565b6001600160a01b0381166000908152601960209081526040808320546018909252822054610cde9190610f1990610f79565b6000546001600160a01b031633146114355760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610b3890613218565b601480546001600160a01b039485166001600160a01b0319918216811790925560138054948616948216851790556015805493909516921682179093556000928352601c6020526040808420805460ff199081166001908117909255938552818520805485168217905591845290922080549091169091179055565b6000546001600160a01b031633146115305760405162461bcd60e51b8152600401610b3890613218565b61154c620186a0610f6a84600154611c4e90919063ffffffff16565b60205560225550565b6000546001600160a01b0316331461157f5760405162461bcd60e51b8152600401610b3890613218565b601f80546001600160a01b039092166001600160a01b0319909216821790556000908152601b60205260409020805460ff19166001179055565b6000610cda3384610d4d8560405180606001604052806025815260200161340d60259139336000908152601a602090815260408083206001600160a01b038d1684529091529020549190611c16565b6000610cda338484611b41565b6000546001600160a01b0316331461163f5760405162461bcd60e51b8152600401610b3890613218565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa91906132db565b90506001600160a01b03841663a9059cbb846116cb6064610f6a8688611c4e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173a91906132f4565b5050505050565b6000546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610b3890613218565b601f8054921515600160a81b0260ff60a81b1990931692909217909155602855565b6000546001600160a01b031633146117b75760405162461bcd60e51b8152600401610b3890613218565b601f8054921515600160b01b0260ff60b01b1990931692909217909155602955565b6000546001600160a01b031633146118035760405162461bcd60e51b8152600401610b3890613218565b601183905560015461181e90620186a090610f6a9085611c4e565b600d5560015461183790620186a090610f6a9084611c4e565b600e55505050565b6000546001600160a01b031633146118695760405162461bcd60e51b8152600401610b3890613218565b601680546001600160a01b039384166001600160a01b031991821681179092556017805493909416921682179092556000918252601c6020526040808320805460ff199081166001908117909255928452922080549091169091179055565b6000546001600160a01b031633146118f25760405162461bcd60e51b8152600401610b3890613218565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166119a85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b38565b6001600160a01b038216611a095760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b38565b6001600160a01b038381166000818152601a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f805460ff60a01b1916600160a01b1790558015611aec576000611ab5600b54610f6a602254611aaf601660009054906101000a90046001600160a01b0316611199565b90611c4e565b905082811015611ac3578092505b601654600090611adb906001600160a01b0316611199565b905083811015611ae9578093505b50505b602b54611af99083611dcf565b602b5542602555602d54611b0e906001611dcf565b602d55611b1c833084611946565b611b2f8360008460008060006001611ddb565b5050601f805460ff60a01b1916905550565b611b4c838383612010565b611b568383612148565b611b618383836121e1565b611b6c8284836122f0565b611b76838361237c565b611b818383836123f1565b611b8b8383612416565b6001600160a01b0383166000908152601c602052604090205461106f9084908490849060ff1680611bd457506001600160a01b0386166000908152601c602052604090205460ff165b80611be15750600c5460ff165b80611bf55750601f54600160a01b900460ff165b601f549015906001600160a01b039081168882168114918a16146000611ddb565b60008184841115611c3a5760405162461bcd60e51b8152600401610b389190612f92565b505050900390565b6000610ff68284613264565b6000610ff68284613311565b6000610ff682846132a6565b6000806000611c736125bb565b9092509050611c8281836132a6565b9250505090565b611cc96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b611cd6868686868661273e565b9050611cec818787611ce6611c66565b86612966565b60608501526040840152602083015281525b95945050505050565b601f805460ff60a01b1916600160a01b1790558015611d82576000611d4c600b54610f6a602354611aaf601760009054906101000a90046001600160a01b0316611199565b905082811015611d5a578092505b601754600090611d72906001600160a01b0316611199565b9050838111611d7f578093505b50505b602a54611d8f9083611dcf565b602a5542602755602c54611da4906001611dcf565b602c55611db2833084611946565b601254611b2f9084906001600160a01b0316846000808080611ddb565b6000610ff682846132c8565b6000611dea8686868686611c89565b6001600160a01b0389166000908152601b602052604090205490915060ff1615611e4c576001600160a01b038816600090815260196020526040902054611e32908790613264565b6001600160a01b0389166000908152601960205260409020555b6001600160a01b0387166000908152601b602052604090205460ff1615611eaf5760808101516001600160a01b038816600090815260196020526040902054611e9591906132c8565b6001600160a01b0388166000908152601960205260409020555b80516001600160a01b038916600090815260186020526040902054611ed49190613264565b6001600160a01b03808a16600090815260186020908152604080832094909455840151918a1681529190912054611f0b91906132c8565b6001600160a01b038816600090815260186020526040908190209190915581015160a0820151611f3c919084612a0b565b611f4e81606001518260c00151612a47565b608081015115611faa57866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611fa191815260200190565b60405180910390a35b60c08101511561200657306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611ffd91815260200190565b60405180910390a35b5050505050505050565b6001600160a01b0383166120745760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b38565b6001600160a01b0382166120d65760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b38565b6120df83611199565b81111561106f5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b38565b6001600160a01b0382166000908152601c602052604090205460ff1615801561218a57506001600160a01b0381166000908152601c602052604090205460ff16155b15610cc957600f5460ff16610cc95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b38565b6001600160a01b0382166000908152601c602052604090205460ff1615801561222357506001600160a01b0383166000908152601c602052604090205460ff16155b801561223857506001600160a01b0382163014155b801561225257506012546001600160a01b03838116911614155b801561226c5750601f546001600160a01b03838116911614155b801561228657506013546001600160a01b03838116911614155b1561106f576004548161229884611199565b6122a291906132c8565b111561106f5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b38565b6003548111158061231957506001600160a01b0382166000908152601c602052604090205460ff165b8061233c57506001600160a01b0383166000908152601c602052604090205460ff165b61106f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b38565b601f546001600160a01b0382811691161480156123b257506001600160a01b0382166000908152601c602052604090205460ff16155b80156123c15750600c5460ff16155b80156123d75750601f54600160a01b900460ff16155b15610cc9576010546123ea906001611dcf565b6010555050565b6123fc838383612ac6565b1561106f5761240c600d54612b8c565b6000601055505050565b426024541115801561242b5750600c5460ff16155b80156124445750601f546001600160a01b038281169116145b801561246957506001600160a01b0382166000908152601c602052604090205460ff16155b801561247e5750601f54600160a81b900460ff165b801561249f575060165460009061249d906001600160a01b0316611199565b115b80156124b55750601f54600160a01b900460ff16155b156124e7576016546020546124d5916001600160a01b0316906001611a6a565b6028546124e3904290611dcf565b6024555b42602654111580156124fc5750600c5460ff16155b80156125155750601f546001600160a01b038281169116145b801561253a57506001600160a01b0382166000908152601c602052604090205460ff16155b801561254f5750601f54600160b01b900460ff165b8015612570575060175460009061256e906001600160a01b0316611199565b115b80156125865750601f54600160a01b900460ff16155b15610cc9576017546021546125a6916001600160a01b0316906001611d07565b6029546125b4904290611dcf565b6026555050565b6002546001546000918291825b601d5481101561270d578260186000601d84815481106125ea576125ea613238565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061265557508160196000601d848154811061262e5761262e613238565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561266b57600254600154945094505050509091565b60186000601d838154811061268257612682613238565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126b19084613264565b925060196000601d83815481106126ca576126ca613238565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126f99083613264565b9150806127058161328d565b9150506125c8565b5060015460025461271e91906132a6565b821015612735576002546001549350935050509091565b90939092509050565b61277e6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8415801561278a575081155b806127a4575061279a8484612d1b565b80156127a4575081155b156127b55760808101869052611cfe565b831580156127c1575082155b80156127cb575081155b156128435760006127ed600b54610f6a600a548a611c4e90919063ffffffff16565b9050600a546005600001541161281d57600b5460055461280d9089613311565b61281791906132a6565b60a08301525b60a082015161282d908290611c42565b60c083015261283c8188613264565b6080830152505b83801561284e575081155b156128c6576000612870600b54610f6a6009548a611c4e90919063ffffffff16565b9050600954600560000154116128a057600b546005546128909089613311565b61289a91906132a6565b60a08301525b60a08201516128b0908290611c42565b60c08301526128bf8188613264565b6080830152505b8280156128d1575081155b156129495760006128f3600b54610f6a6008548a611c4e90919063ffffffff16565b90506008546005600001541161292357600b546005546129139089613311565b61291d91906132a6565b60a08301525b60a0820151612933908290611c42565b60c08301526129428188613264565b6080830152505b8115611cfe5760a081018690526080810186905295945050505050565b60008080806129758689613311565b935086158015612983575084155b15612996575082915060009050806129ff565b84156129c357858960a001516129ac9190613311565b91506129b88285613264565b9250600090506129ff565b858960a001516129d39190613311565b9150858960c001516129e59190613311565b9050806129f28386613264565b6129fc9190613264565b92505b95509550955095915050565b8260026000828254612a1d9190613264565b9091555081905061106f5781602e6000016000828254612a3d91906132c8565b9091555050505050565b80602e6001016000828254612a5c91906132c8565b9091555050306000908152601b602052604090205460ff1615612a9e573060009081526019602052604081208054839290612a989084906132c8565b90915550505b3060009081526018602052604081208054849290612abd9084906132c8565b90915550505050565b600080600e5483101590506000600d54612adf30611199565b600c54911115915060ff16158015612afe5750600c54610100900460ff165b8015612b075750815b8015612b2c57506001600160a01b0386166000908152601c602052604090205460ff16155b8015612b3a5750600f5460ff165b8015612b535750601f546001600160a01b038681169116145b8015612b63575060115460105410155b8015612b6c5750805b8015612b825750601f54600160a01b900460ff16155b9695505050505050565b600c805460ff19166001908117909155600854600091612bb391600291611aaf9190611dcf565b9050600854600003612be557600654600754612be291600291611aaf91600191612bdc91611dcf565b90611dcf565b90505b6007546000908290612bf79085613311565b612c0191906132a6565b90506000612c0f8285613264565b905047612c1b82612d61565b6000612c278247613264565b600754909150600090612c3a9087613264565b612c4490836132a6565b600754909150600090612c579083613311565b90508015612c6957612c698682612eb3565b600654600090612c7e90611aaf856002611c4e565b90508015612cc2576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612cc0573d6000803e3d6000fd5b505b478015612d05576015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612d03573d6000803e3d6000fd5b505b5050600c805460ff191690555050505050505050565b6000828015612d2a5750600954155b80612d3d5750818015612d3d5750600854155b80610ff6575082158015612d4f575081155b8015610ff6575050600a541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9657612d96613238565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e139190613328565b81600181518110612e2657612e26613238565b6001600160a01b039283166020918202929092010152601e54612e4c9130911684611946565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e85908590600090869030904290600401613345565b600060405180830381600087803b158015612e9f57600080fd5b505af11580156112c1573d6000803e3d6000fd5b601e54612ecb9030906001600160a01b031684611946565b601e5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f3b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061173a91906133b6565b6001600160a01b0381168114610cf057600080fd5b600060208284031215612f8757600080fd5b8135610ff681612f60565b600060208083528351808285015260005b81811015612fbf57858101830151858201604001528201612fa3565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ff357600080fd5b8235612ffe81612f60565b946020939093013593505050565b60006020828403121561301e57600080fd5b5035919050565b60008060006060848603121561303a57600080fd5b833561304581612f60565b9250602084013561305581612f60565b929592945050506040919091013590565b6000806040838503121561307957600080fd5b50508035926020909101359150565b8015158114610cf057600080fd5b600080604083850312156130a957600080fd5b8235915060208301356130bb81613088565b809150509250929050565b600080604083850312156130d957600080fd5b82356130e481613088565b915060208301356130bb81612f60565b60008060008060008060c0878903121561310d57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561314a57600080fd5b823561315581612f60565b915060208301356130bb81613088565b60008060006060848603121561317a57600080fd5b833561318581612f60565b9250602084013561319581612f60565b915060408401356131a581612f60565b809150509250925092565b600080604083850312156131c357600080fd5b82356130e481612f60565b600080604083850312156131e157600080fd5b8235612ffe81613088565b60008060006060848603121561320157600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610cde57610cde61324e565b634e487b7160e01b600052603160045260246000fd5b60006001820161329f5761329f61324e565b5060010190565b6000826132c357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cde57610cde61324e565b6000602082840312156132ed57600080fd5b5051919050565b60006020828403121561330657600080fd5b8151610ff681613088565b8082028115828204841417610cde57610cde61324e565b60006020828403121561333a57600080fd5b8151610ff681612f60565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133955784516001600160a01b031683529383019391830191600101613370565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133cb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b6fa08c69face258ad7c1fea11551d7e10d7f172073a33713044862208fcde2d64736f6c63430008130033

Deployed Bytecode Sourcemap

7482:23960:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9767:32;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;9767:32:0;;;;;;;;27050:464;;;;;;;;;;-1:-1:-1;27050:464:0;;;;;:::i;:::-;;:::i;:::-;;11708:67;;;;;;;;;;-1:-1:-1;11768:5:0;;;;;;;;;;;;-1:-1:-1;;;11768:5:0;;;;11708:67;;;;;;;:::i;12474:134::-;;;;;;;;;;-1:-1:-1;12474:134:0;;;;;:::i;:::-;;:::i;:::-;;;1622:14:1;;1615:22;1597:41;;1585:2;1570:18;12474:134:0;1457:187:1;9721:39:0;;;;;;;;;;;;;;;;19383:117;;;;;;;;;;-1:-1:-1;19383:117:0;;;;;:::i;:::-;;:::i;11931:79::-;;;;;;;;;;-1:-1:-1;12001:7:0;;11931:79;;10080:30;;;;;;;;;;;;;;;;12888:309;;;;;;;;;;-1:-1:-1;12888:309:0;;;;;:::i;:::-;;:::i;26707:335::-;;;;;;;;;;-1:-1:-1;26707:335:0;;;;;:::i;:::-;;:::i;22168:83::-;;;;;;;;;;;;;:::i;25803:143::-;;;;;;;;;;;;;:::i;24050:182::-;;;;;;;;;;-1:-1:-1;24050:182:0;;;;;:::i;:::-;;:::i;26451:248::-;;;;;;;;;;-1:-1:-1;26451:248:0;;;;;:::i;:::-;;:::i;6187:87::-;;;;;;;;;;-1:-1:-1;6187:87:0;;;;;:::i;:::-;6242:4;6267:5;-1:-1:-1;;;;;6256:16:0;;;6267:5;;6256:16;;6187:87;24479:182;;;;;;;;;;-1:-1:-1;24479:182:0;;;;;:::i;:::-;;:::i;11858:67::-;;;;;;;;;;-1:-1:-1;11858:67:0;;7717:1;2690:36:1;;2678:2;2663:18;11858:67:0;2548:184:1;10154:36:0;;;;;;;;;;;;;;;;13205:209;;;;;;;;;;-1:-1:-1;13205:209:0;;;;;:::i;:::-;;:::i;10049:24::-;;;;;;;;;;;;;;;;9356:44;;;;;;;;;;-1:-1:-1;9356:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9588:63;;;;;;;;;;;;;;;;9558:23;;;;;;;;;;-1:-1:-1;9558:23:0;;;;-1:-1:-1;;;9558:23:0;;;;;;25954:489;;;;;;;;;;-1:-1:-1;25954:489:0;;;;;:::i;:::-;;:::i;9658:56::-;;;;;;;;;;;;;;;;19508:103;;;;;;;;;;-1:-1:-1;19508:103:0;;;;;:::i;:::-;;:::i;22259:175::-;;;;;;;;;;;;;:::i;12016:173::-;;;;;;;;;;-1:-1:-1;12016:173:0;;;;;:::i;:::-;;:::i;7959:58::-;;;;;;;;;;;;;;;;22593:124;;;;;;;;;;-1:-1:-1;22593:124:0;;;;;:::i;:::-;;:::i;9843:34::-;;;;;;;;;;;;;;;;7897:55;;;;;;;;;;;;;;;;12706:108;;;;;;;;;;-1:-1:-1;12706:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12792:20:0;12778:4;12792:20;;;:11;:20;;;;;;;;;12706:108;22725:442;;;;;;;;;;-1:-1:-1;22725:442:0;;;;;:::i;:::-;;:::i;9948:47::-;;;;;;;;;;;;;;;;25096:445;;;;;;;;;;-1:-1:-1;25096:445:0;;;;;:::i;:::-;;:::i;13695:157::-;;;;;;;;;;-1:-1:-1;13695:157:0;;;;;:::i;:::-;;:::i;24669:117::-;;;;;;;;;;-1:-1:-1;24669:117:0;;;;;:::i;:::-;;:::i;23175:322::-;;;;;;;;;;-1:-1:-1;23175:322:0;;;;;:::i;:::-;;:::i;24240:231::-;;;;;;;;;;-1:-1:-1;24240:231:0;;;;;:::i;:::-;;:::i;11781:71::-;;;;;;;;;;-1:-1:-1;11843:7:0;;;;;;;;;;;;-1:-1:-1;;;11843:7:0;;;;11781:71;;10117:30;;;;;;;;;;;;;;;;22442:143;;;;;;;;;;-1:-1:-1;22442:143:0;;;;;:::i;:::-;;:::i;13422:265::-;;;;;;;;;;-1:-1:-1;13422:265:0;;;;;:::i;:::-;;:::i;9469:19::-;;;;;;;;;;-1:-1:-1;9469:19:0;;;;-1:-1:-1;;;;;9469:19:0;;;;;;-1:-1:-1;;;;;5174:32:1;;;5156:51;;5144:2;5129:18;9469:19:0;5010:203:1;12195:140:0;;;;;;;;;;-1:-1:-1;12195:140:0;;;;;:::i;:::-;;:::i;25549:246::-;;;;;;;;;;-1:-1:-1;25549:246:0;;;;;:::i;:::-;;:::i;9806:30::-;;;;;;;;;;;;;;;;9521;;;;;;;;;;-1:-1:-1;9521:30:0;;;;-1:-1:-1;;;9521:30:0;;;;;;12341:127;;;;;;;;;;-1:-1:-1;12341:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12439:18:0;;;12422:7;12439:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12341:127;23885:157;;;;;;;;;;-1:-1:-1;23885:157:0;;;;;:::i;:::-;;:::i;9914:27::-;;;;;;;;;;;;;;;;23741:136;;;;;;;;;;-1:-1:-1;23741:136:0;;;;;:::i;:::-;;:::i;10002:40::-;;;;;;;;;;;;;;;;24794:294;;;;;;;;;;-1:-1:-1;24794:294:0;;;;;:::i;:::-;;:::i;12614:86::-;;;;;;;;;;-1:-1:-1;12683:11:0;:15;12614:86;;9884:23;;;;;;;;;;;;;;;;23505:228;;;;;;;;;;-1:-1:-1;23505:228:0;;;;;:::i;:::-;;:::i;6280:111::-;;;;;;;;;;-1:-1:-1;6280:111:0;;;;;:::i;:::-;;:::i;9441:21::-;;;;;;;;;;-1:-1:-1;9441:21:0;;;;-1:-1:-1;;;;;9441:21:0;;;27050:464;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;27134:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27126:56;;;::::0;-1:-1:-1;;;27126:56:0;;7265:2:1;27126:56:0::1;::::0;::::1;7247:21:1::0;7304:2;7284:18;;;7277:30;7343:25;7323:18;;;7316:53;7386:18;;27126:56:0::1;7063:347:1::0;27126:56:0::1;27198:9;27193:314;27217:9;:16:::0;27213:20;::::1;27193:314;;;27275:7;-1:-1:-1::0;;;;;27259:23:0::1;:9;27269:1;27259:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27259:12:0::1;:23:::0;27255:241:::1;;27318:9;27328:16:::0;;:20:::1;::::0;27347:1:::1;::::0;27328:20:::1;:::i;:::-;27318:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27303:9:::1;:12:::0;;-1:-1:-1;;;;;27318:31:0;;::::1;::::0;27313:1;;27303:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27303:46:0::1;-1:-1:-1::0;;;;;27303:46:0;;::::1;;::::0;;27368:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;27407:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27407:28:0::1;::::0;;27454:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27454:15:0;;;;;-1:-1:-1;;;;;;27454:15:0::1;::::0;;;;;27193:314:::1;27050:464:::0;:::o;27255:241::-:1;27235:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27193:314;;;;27050:464:::0;:::o;12474:134::-;12549:4;12556:37;12565:10;12577:7;12586:6;12556:8;:37::i;:::-;-1:-1:-1;12602:4:0;12474:134;;;;;:::o;19383:117::-;19447:45;19466:10;19478:6;19486:5;19447:18;:45::i;:::-;19383:117;:::o;12888:309::-;12986:4;13003:36;13013:6;13021:9;13032:6;13003:9;:36::i;:::-;13050:117;13059:6;13067:10;13079:87;13115:6;13079:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13079:19:0;;;;;;:11;:19;;;;;;;;13099:10;13079:31;;;;;;;;;:87;:35;:87::i;:::-;13050:8;:117::i;:::-;-1:-1:-1;13185:4:0;12888:309;;;;;:::o;26707:335::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26792:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26791:21;26783:61;;;::::0;-1:-1:-1;;;26783:61:0;;8286:2:1;26783:61:0::1;::::0;::::1;8268:21:1::0;8325:2;8305:18;;;8298:30;8364:29;8344:18;;;8337:57;8411:18;;26783:61:0::1;8084:351:1::0;26783:61:0::1;-1:-1:-1::0;;;;;26858:16:0;::::1;26877:1;26858:16:::0;;;:7:::1;:16;::::0;;;;;:20;26855:108:::1;;-1:-1:-1::0;;;;;26934:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;26914:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;26895:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;26855:108:::1;-1:-1:-1::0;;;;;26973:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26973:27:0::1;26996:4;26973:27:::0;;::::1;::::0;;;27011:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27011:23:0::1;::::0;;::::1;::::0;;26707:335::o;22168:83::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;22222:14:::1;:21:::0;;-1:-1:-1;;22222:21:0::1;22239:4;22222:21;::::0;;22168:83::o;25803:143::-;25856:7;25883:55;25916:21;25934:1;25916:9;:21::i;:::-;25905:4;;25883:28;;25895:15;;-1:-1:-1;;;;;25905:4:0;25895:9;:15::i;:::-;25883:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;25876:62;;25803:143;:::o;24050:182::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;24160:36:::1;24189:6;24160:24;24172:11;24160:7;;:11;;:24;;;;:::i;:::-;:28:::0;::::1;:36::i;:::-;24147:10;:49:::0;24198:11:::1;:26:::0;-1:-1:-1;24050:182:0:o;26451:248::-;26517:7;26556;;26545;:18;;26537:73;;;;-1:-1:-1;;;26537:73:0;;8642:2:1;26537:73:0;;;8624:21:1;8681:2;8661:18;;;8654:30;8720:34;8700:18;;;8693:62;-1:-1:-1;;;8771:18:1;;;8764:40;8821:19;;26537:73:0;8440:406:1;26537:73:0;26621:19;26644:10;:8;:10::i;:::-;26621:33;-1:-1:-1;26672:19:0;26621:33;26672:7;:19;:::i;:::-;26665:26;26451:248;-1:-1:-1;;;26451:248:0:o;24479:182::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;24599:16:::1;::::0;24559:21:::1;::::0;-1:-1:-1;;;;;24599:16:0::1;24591:62;24626:26;24648:3;24626:17;24559:21:::0;24640:2;24626:13:::1;:17::i;:26::-;24591:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24528:133;24479:182:::0;:::o;13205:209::-;13319:10;13293:4;13340:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13340:32:0;;;;;;;;;;13293:4;;13310:74;;13331:7;;13340:43;;13373:10;;13340:43;:::i;25954:489::-;26044:7;26083;;26072;:18;;26064:62;;;;-1:-1:-1;;;26064:62:0;;9405:2:1;26064:62:0;;;9387:21:1;9444:2;9424:18;;;9417:30;9483:33;9463:18;;;9456:61;9534:18;;26064:62:0;9203:355:1;26064:62:0;26142:17;26137:299;;26176:28;26207:46;26218:7;26227:4;26233:5;26240;26247;26207:10;:46::i;:::-;26275:9;;-1:-1:-1;26268:16:0;;-1:-1:-1;26268:16:0;26137:299;26317:28;26348:46;26359:7;26368:4;26374:5;26381;26388;26348:10;:46::i;:::-;26416:17;;;;-1:-1:-1;26409:24:0;;-1:-1:-1;26409:24:0;19508:103;19565:38;19577:10;19589:6;19597:5;19565:11;:38::i;22259:175::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;22351:19:::1;::::0;22331:40:::1;::::0;:15:::1;::::0;:19:::1;:40::i;:::-;22313:15;:58:::0;22413:12:::1;::::0;22393:33:::1;::::0;:15:::1;::::0;:19:::1;:33::i;:::-;22382:8;:44:::0;22259:175::o;12016:173::-;-1:-1:-1;;;;;12096:20:0;;12082:7;12096:20;;;:11;:20;;;;;;;;12092:49;;;-1:-1:-1;;;;;;12125:16:0;;;;;:7;:16;;;;;;;12016:173::o;12092:49::-;-1:-1:-1;;;;;12170:16:0;;;;;;:7;:16;;;;;;12150:37;;:19;:37::i;22593:124::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22677:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;22677:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22593:124::o;22725:442::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;22884:8:::1;:15:::0;;;22901:7:::1;:15:::0;;;22918:11:::1;:20:::0;;;22949:8:::1;:27:::0;;;22987:18;:31;;;23029:18;:31;;;23091:11:::1;::::0;23079:23;::::1;::::0;::::1;::::0;:49:::1;;;23117:11;;23106:7;;:22;;23079:49;:79;;;;;23147:11;;23132;;:26;;23079:79;23071:88;;;::::0;::::1;;22725:442:::0;;;;;;:::o;25096:445::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;25180:13:::1;25196:43;25226:11;;25196:17;25208:4;25196:7;;:11;;:17;;;;:::i;:43::-;25180:59;;25250:17;25270:46;25303:11;;25270:20;25282:7;25270;;:11;;:20;;;;:::i;:46::-;25250:66;;25318:13;25334:26;25353:6;25334:14;25346:1;25334:7:::0;::::1;:11;;:14;;;;:::i;:26::-;25318:42;;25388:5;25379;:14;;:36;;;;;25410:5;25397:9;:18;;25379:36;25371:102;;;::::0;-1:-1:-1;;;25371:102:0;;9765:2:1;25371:102:0::1;::::0;::::1;9747:21:1::0;9804:2;9784:18;;;9777:30;9843:34;9823:18;;;9816:62;-1:-1:-1;;;9894:18:1;;;9887:51;9955:19;;25371:102:0::1;9563:417:1::0;25371:102:0::1;-1:-1:-1::0;25484:12:0::1;:20:::0;;;;25506:15:::1;:27:::0;-1:-1:-1;;25096:445:0:o;13695:157::-;-1:-1:-1;;;;;13828:15:0;;13760:7;13828:15;;;:7;:15;;;;;;;;;13807:7;:15;;;;;;13787:57;;13828:15;13787:36;;:19;:36::i;24669:117::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24750:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;24750:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24669:117::o;23175:322::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;23293:18:::1;:31:::0;;-1:-1:-1;;;;;23293:31:0;;::::1;-1:-1:-1::0;;;;;;23293:31:0;;::::1;::::0;::::1;::::0;;;23326:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;23359:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;23293:18:::1;23397:23:::0;;;:11:::1;:23;::::0;;;;;:30;;-1:-1:-1;;23397:30:0;;::::1;23293:31:::0;23397:30;;::::1;::::0;;;23429:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;23461:21;;;;;;:28;;;;::::1;::::0;;::::1;::::0;;23175:322::o;24240:231::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;24378:43:::1;24414:6;24378:31;24390:18;24378:7;;:11;;:31;;;;:::i;:43::-;24358:17;:63:::0;24423:18:::1;:40:::0;-1:-1:-1;24240:231:0:o;22442:143::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;22517:4:::1;:18:::0;;-1:-1:-1;;;;;22517:18:0;;::::1;-1:-1:-1::0;;;;;;22517:18:0;;::::1;::::0;::::1;::::0;;:4:::1;22537:33:::0;;;:11:::1;:33;::::0;;;;:40;;-1:-1:-1;;22537:40:0::1;22517:18:::0;22537:40:::1;::::0;;22442:143::o;13422:265::-;13515:4;13532:125;13541:10;13553:7;13562:94;13599:15;13562:94;;;;;;;;;;;;;;;;;13574:10;13562:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13562:32:0;;;;;;;;;;;:94;:36;:94::i;12195:140::-;12273:4;12280:40;12290:10;12302:9;12313:6;12280:9;:40::i;25549:246::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;25671:39:::1;::::0;-1:-1:-1;;;25671:39:0;;25704:4:::1;25671:39;::::0;::::1;5156:51:1::0;25656:12:0::1;::::0;-1:-1:-1;;;;;25671:24:0;::::1;::::0;::::1;::::0;5129:18:1;;25671:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25656:54:::0;-1:-1:-1;;;;;;25721:23:0;::::1;;25745:9:::0;25756:30:::1;25782:3;25756:21;25656:54:::0;25765:11;25756:8:::1;:21::i;:30::-;25721:66;::::0;-1:-1:-1;;;;;;25721:66:0::1;::::0;;;;;;-1:-1:-1;;;;;10366:32:1;;;25721:66:0::1;::::0;::::1;10348:51:1::0;10415:18;;;10408:34;10321:18;;25721:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25645:150;25549:246:::0;;;:::o;23885:157::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;23981:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;23981:21:0::1;-1:-1:-1::0;;;;23981:21:0;;::::1;::::0;;;::::1;::::0;;;24004:19:::1;:30:::0;23885:157::o;23741:136::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;23830:4:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;23830:14:0::1;-1:-1:-1::0;;;;23830:14:0;;::::1;::::0;;;::::1;::::0;;;23846:12:::1;:23:::0;23741:136::o;24794:294::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;24922:10:::1;:24:::0;;;24964:7:::1;::::0;:48:::1;::::0;25004:6:::1;::::0;24964:27:::1;::::0;24976:14;24964:11:::1;:27::i;:48::-;24948:13;:64:::0;25032:7:::1;::::0;:48:::1;::::0;25072:6:::1;::::0;25032:27:::1;::::0;25044:14;25032:11:::1;:27::i;:48::-;25014:15;:66:::0;-1:-1:-1;;;24794:294:0:o;23505:228::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;23603:17:::1;:32:::0;;-1:-1:-1;;;;;23603:32:0;;::::1;-1:-1:-1::0;;;;;;23603:32:0;;::::1;::::0;::::1;::::0;;;23637:10:::1;:18:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;23603:17:::1;23666:25:::0;;;:11:::1;:25;::::0;;;;;:32;;-1:-1:-1;;23666:32:0;;::::1;23603::::0;23666;;::::1;::::0;;;23700:18;;;;;:25;;;;::::1;::::0;;::::1;::::0;;23505:228::o;6280:111::-;6242:4;6267:5;-1:-1:-1;;;;;6267:5:0;6154:10;6256:16;6138:38;;;;-1:-1:-1;;;6138:38:0;;;;;;;:::i;:::-;6346:5:::1;:11:::0;;-1:-1:-1;;;;;;6346:11:0::1;-1:-1:-1::0;;;;;6346:11:0;::::1;::::0;;::::1;::::0;;;6364:25:::1;::::0;5156:51:1;;;6364:25:0::1;::::0;5144:2:1;5129:18;6364:25:0::1;;;;;;;6280:111:::0;:::o;13860:335::-;-1:-1:-1;;;;;13953:19:0;;13945:68;;;;-1:-1:-1;;;13945:68:0;;11121:2:1;13945:68:0;;;11103:21:1;11160:2;11140:18;;;11133:30;11199:34;11179:18;;;11172:62;-1:-1:-1;;;11250:18:1;;;11243:34;11294:19;;13945:68:0;10919:400:1;13945:68:0;-1:-1:-1;;;;;14032:21:0;;14024:68;;;;-1:-1:-1;;;14024:68:0;;11526:2:1;14024:68:0;;;11508:21:1;11565:2;11545:18;;;11538:30;11604:34;11584:18;;;11577:62;-1:-1:-1;;;11655:18:1;;;11648:32;11697:19;;14024:68:0;11324:398:1;14024:68:0;-1:-1:-1;;;;;14103:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14155:32;;160:25:1;;;14155:32:0;;133:18:1;14155:32:0;;;;;;;13860:335;;;:::o;17895:780::-;17995:12;:19;;-1:-1:-1;;;;17995:19:0;-1:-1:-1;;;17995:19:0;;;18025:304;;;;18043:22;18068:69;18125:11;;18068:52;18101:18;;18068:28;18078:17;;;;;;;;;-1:-1:-1;;;;;18078:17:0;18068:9;:28::i;:::-;:32;;:52::i;:69::-;18043:94;;18168:6;18151:14;:23;18148:53;;;18185:14;18176:23;;18148:53;18246:17;;18211:22;;18236:28;;-1:-1:-1;;;;;18246:17:0;18236:9;:28::i;:::-;18211:53;;18295:6;18278:14;:23;18275:53;;;18312:14;18303:23;;18275:53;18042:287;;18025:304;18357:15;;:27;;18377:6;18357:19;:27::i;:::-;18339:15;:45;18417:15;18395:19;:37;18467:21;;:37;;18501:1;18467:25;:37::i;:::-;18443:21;:61;18515:39;18524:6;18540:4;18547:6;18515:8;:39::i;:::-;18565:71;18580:6;18596:3;18602:6;18610:5;18617;18624;18631:4;18565:14;:71::i;:::-;-1:-1:-1;;18647:12:0;:20;;-1:-1:-1;;;;18647:20:0;;;-1:-1:-1;17895:780:0:o;14203:594::-;14292:37;14303:6;14311:9;14322:6;14292:10;:37::i;:::-;14340:38;14360:6;14368:9;14340:19;:38::i;:::-;14389:41;14404:6;14412:9;14423:6;14389:14;:41::i;:::-;14442:39;14455:9;14466:6;14474;14442:12;:39::i;:::-;14492:35;14509:6;14517:9;14492:16;:35::i;:::-;14538;14547:6;14555:9;14566:6;14538:8;:35::i;:::-;14584:33;14599:6;14607:9;14584:14;:33::i;:::-;-1:-1:-1;;;;;14672:19:0;;;;;;:11;:19;;;;;;14628:161;;14643:6;;14651:9;;14662:6;;14672:19;;;:45;;-1:-1:-1;;;;;;14695:22:0;;;;;;:11;:22;;;;;;;;14672:45;:57;;;-1:-1:-1;14721:8:0;;;;14672:57;:73;;;-1:-1:-1;14733:12:0;;-1:-1:-1;;;14733:12:0;;;;14672:73;14761:4;;14670:76;;;-1:-1:-1;;;;;14761:4:0;;;14748:17;;;;;;14767:14;;;14761:4;14628:14;:161::i;1531:162::-;1617:7;1663:12;1655:6;;;;1647:29;;;;-1:-1:-1;;;1647:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1685:5:0;;;1531:162::o;318:82::-;376:7;393:5;397:1;393;:5;:::i;406:82::-;464:7;481:5;485:1;481;:5;:::i;494:82::-;552:7;569:5;573:1;569;:5;:::i;30742:158::-;30783:7;30804:15;30821;30840:19;:17;:19::i;:::-;30803:56;;-1:-1:-1;30803:56:0;-1:-1:-1;30877:15:0;30803:56;;30877:15;:::i;:::-;30870:22;;;;30742:158;:::o;27786:444::-;27909:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27909:36:0;27970:64;27982:7;27991;28000:6;28008:10;28020:13;27970:11;:64::i;:::-;27958:76;;28128:67;28140:9;28151:7;28160;28169:10;:8;:10::i;:::-;28181:13;28128:11;:67::i;:::-;28108:16;;;28045:150;28092:14;;;28045:150;28065:25;;;28045:150;;;27786:444;;;;;;;;:::o;18683:692::-;18769:12;:19;;-1:-1:-1;;;;18769:19:0;-1:-1:-1;;;18769:19:0;;;18799:259;;;;18810:19;18832:55;18875:11;;18832:38;18858:11;;18832:21;18842:10;;;;;;;;;-1:-1:-1;;;;;18842:10:0;18832:9;:21::i;:55::-;18810:77;;18915:6;18901:11;:20;18898:47;;;18932:11;18923:20;;18898:47;18987:10;;18955:19;;18977:21;;-1:-1:-1;;;;;18987:10:0;18977:9;:21::i;:::-;18955:43;;19027:6;19012:11;:21;19009:48;;19044:11;19035:20;;19009:48;18809:249;;18799:259;19080:9;;:21;;19094:6;19080:13;:21::i;:::-;19068:9;:33;19127:15;19112:12;:30;19171:15;;:31;;19199:1;19171:19;:31::i;:::-;19153:15;:49;19213:39;19222:6;19238:4;19245:6;19213:8;:39::i;:::-;19294:4;;19263:73;;19278:6;;-1:-1:-1;;;;;19294:4:0;19301:6;19294:4;;;;19263:14;:73::i;230:82::-;288:7;305:5;309:1;305;:5;:::i;16352:863::-;16511:28;16542:63;16553:7;16562;16571:6;16579:10;16591:13;16542:10;:63::i;:::-;-1:-1:-1;;;;;16619:19:0;;;;;;:11;:19;;;;;;16511:94;;-1:-1:-1;16619:19:0;;16616:83;;;-1:-1:-1;;;;;16674:15:0;;;;;;:7;:15;;;;;;:23;;16690:7;;16674:23;:::i;:::-;-1:-1:-1;;;;;16656:15:0;;;;;;:7;:15;;;;;:41;16616:83;-1:-1:-1;;;;;16712:22:0;;;;;;:11;:22;;;;;;;;16709:101;;;16791:17;;;;-1:-1:-1;;;;;16772:18:0;;;;;;:7;:18;;;;;;:36;;16791:17;16772:36;:::i;:::-;-1:-1:-1;;;;;16751:18:0;;;;;;:7;:18;;;;;:57;16709:101;16854:9;;-1:-1:-1;;;;;16838:15:0;;16854:9;16838:15;;;:7;:15;;;;;;:25;;16854:9;16838:25;:::i;:::-;-1:-1:-1;;;;;16820:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;16914:17;;;16895:18;;;;;;;;;;:36;;16914:17;16895:36;:::i;:::-;-1:-1:-1;;;;;16874:18:0;;;;;;:7;:18;;;;;;;:57;;;;16954:6;;;16962;;;;16942:42;;16954:6;16970:13;16942:11;:42::i;:::-;16995:30;17006:1;:8;;;17016:1;:8;;;16995:10;:30::i;:::-;17039:17;;;;:30;17036:88;;17093:9;-1:-1:-1;;;;;17076:46:0;17085:6;-1:-1:-1;;;;;17076:46:0;;17104:1;:17;;;17076:46;;;;160:25:1;;148:2;133:18;;14:177;17076:46:0;;;;;;;;17036:88;17137:8;;;;:21;17134:74;;17190:4;-1:-1:-1;;;;;17165:41:0;17174:6;-1:-1:-1;;;;;17165:41:0;;17197:1;:8;;;17165:41;;;;160:25:1;;148:2;133:18;;14:177;17165:41:0;;;;;;;;17134:74;16500:715;16352:863;;;;;;;:::o;14805:355::-;-1:-1:-1;;;;;14909:20:0;;14901:70;;;;-1:-1:-1;;;14901:70:0;;12102:2:1;14901:70:0;;;12084:21:1;12141:2;12121:18;;;12114:30;12180:34;12160:18;;;12153:62;-1:-1:-1;;;12231:18:1;;;12224:35;12276:19;;14901:70:0;11900:401:1;14901:70:0;-1:-1:-1;;;;;14990:23:0;;14982:71;;;;-1:-1:-1;;;14982:71:0;;12508:2:1;14982:71:0;;;12490:21:1;12547:2;12527:18;;;12520:30;12586:34;12566:18;;;12559:62;-1:-1:-1;;;12637:18:1;;;12630:33;12680:19;;14982:71:0;12306:399:1;14982:71:0;15082:17;15092:6;15082:9;:17::i;:::-;15072:6;:27;;15064:88;;;;-1:-1:-1;;;15064:88:0;;12912:2:1;15064:88:0;;;12894:21:1;12951:2;12931:18;;;12924:30;12990:34;12970:18;;;12963:62;-1:-1:-1;;;13041:18:1;;;13034:47;13098:19;;15064:88:0;12710:413:1;15168:206:0;-1:-1:-1;;;;;15261:19:0;;;;;;:11;:19;;;;;;;;15260:20;:47;;;;-1:-1:-1;;;;;;15285:22:0;;;;;;:11;:22;;;;;;;;15284:23;15260:47;15257:110;;;15317:14;;;;15309:56;;;;-1:-1:-1;;;15309:56:0;;13330:2:1;15309:56:0;;;13312:21:1;13369:2;13349:18;;;13342:30;13408:31;13388:18;;;13381:59;13457:18;;15309:56:0;13128:353:1;15386:384:0;-1:-1:-1;;;;;15490:22:0;;;;;;:11;:22;;;;;;;;15489:23;:47;;;;-1:-1:-1;;;;;;15517:19:0;;;;;;:11;:19;;;;;;;;15516:20;15489:47;:77;;;;-1:-1:-1;;;;;;15540:26:0;;15561:4;15540:26;;15489:77;:107;;;;-1:-1:-1;15591:4:0;;-1:-1:-1;;;;;15570:26:0;;;15591:4;;15570:26;;15489:107;:128;;;;-1:-1:-1;15613:4:0;;-1:-1:-1;;;;;15600:17:0;;;15613:4;;15600:17;;15489:128;:163;;;;-1:-1:-1;15634:18:0;;-1:-1:-1;;;;;15621:31:0;;;15634:18;;15621:31;;15489:163;15486:277;;;15711:15;;15700:6;15677:20;15687:9;15677;:20::i;:::-;:29;;;;:::i;:::-;15676:50;;15668:93;;;;-1:-1:-1;;;15668:93:0;;13688:2:1;15668:93:0;;;13670:21:1;13727:2;13707:18;;;13700:30;13766:32;13746:18;;;13739:60;13816:18;;15668:93:0;13486:354:1;15980:193:0;16089:12;;16079:6;:22;;:45;;;-1:-1:-1;;;;;;16105:19:0;;;;;;:11;:19;;;;;;;;16079:45;:64;;;-1:-1:-1;;;;;;16128:15:0;;;;;;:11;:15;;;;;;;;16079:64;16071:94;;;;-1:-1:-1;;;16071:94:0;;14047:2:1;16071:94:0;;;14029:21:1;14086:2;14066:18;;;14059:30;-1:-1:-1;;;14105:18:1;;;14098:47;14162:18;;16071:94:0;13845:341:1;15778:194:0;15875:4;;-1:-1:-1;;;;;15862:17:0;;;15875:4;;15862:17;:41;;;;-1:-1:-1;;;;;;15884:19:0;;;;;;:11;:19;;;;;;;;15883:20;15862:41;:54;;;;-1:-1:-1;15908:8:0;;;;15907:9;15862:54;:71;;;;-1:-1:-1;15921:12:0;;-1:-1:-1;;;15921:12:0;;;;15920:13;15862:71;15859:106;;;15947:9;;:16;;15961:1;15947:13;:16::i;:::-;15935:9;:28;15778:194;;:::o;20058:188::-;20150:41;20165:6;20173:9;20184:6;20150:14;:41::i;:::-;20147:92;;;20193:29;20208:13;;20193:14;:29::i;:::-;20236:1;20224:9;:13;20058:188;;;:::o;17223:664::-;17324:15;17305;;:34;;:47;;;;-1:-1:-1;17344:8:0;;;;17343:9;17305:47;:68;;;;-1:-1:-1;17369:4:0;;-1:-1:-1;;;;;17356:17:0;;;17369:4;;17356:17;17305:68;:92;;;;-1:-1:-1;;;;;;17378:19:0;;;;;;:11;:19;;;;;;;;17377:20;17305:92;:107;;;;-1:-1:-1;17401:11:0;;-1:-1:-1;;;17401:11:0;;;;17305:107;:152;;;;-1:-1:-1;17426:17:0;;17455:1;;17416:28;;-1:-1:-1;;;;;17426:17:0;17416:9;:28::i;:::-;:41;17305:152;:169;;;;-1:-1:-1;17462:12:0;;-1:-1:-1;;;17462:12:0;;;;17461:13;17305:169;17302:312;;;17509:17;;17528;;17490:62;;-1:-1:-1;;;;;17509:17:0;;;17490:18;:62::i;:::-;17592:19;;17572:40;;:15;;:19;:40::i;:::-;17554:15;:58;17302:312;17639:15;17627:8;;:27;;:40;;;;-1:-1:-1;17659:8:0;;;;17658:9;17627:40;:61;;;;-1:-1:-1;17684:4:0;;-1:-1:-1;;;;;17671:17:0;;;17684:4;;17671:17;17627:61;:85;;;;-1:-1:-1;;;;;;17693:19:0;;;;;;:11;:19;;;;;;;;17692:20;17627:85;:93;;;;-1:-1:-1;17716:4:0;;-1:-1:-1;;;17716:4:0;;;;17627:93;:131;;;;-1:-1:-1;17734:10:0;;17756:1;;17724:21;;-1:-1:-1;;;;;17734:10:0;17724:9;:21::i;:::-;:34;17627:131;:148;;;;-1:-1:-1;17763:12:0;;-1:-1:-1;;;17763:12:0;;;;17762:13;17627:148;17624:256;;;17803:10;;17815;;17791:41;;-1:-1:-1;;;;;17803:10:0;;;17791:11;:41::i;:::-;17865:12;;17845:33;;:15;;:19;:33::i;:::-;17834:8;:44;17223:664;;:::o;30908:531::-;31005:7;;31041;;30958;;;;;31059:270;31083:9;:16;31079:20;;31059:270;;;31149:7;31125;:21;31133:9;31143:1;31133:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31133:12:0;31125:21;;;;;;;;;;;;;:31;;:66;;;31184:7;31160;:21;31168:9;31178:1;31168:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31168:12:0;31160:21;;;;;;;;;;;;;:31;31125:66;31121:97;;;31201:7;;31210;;31193:25;;;;;;;30908:531;;:::o;31121:97::-;31251:7;:21;31259:9;31269:1;31259:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31259:12:0;31251:21;;;;;;;;;;;;;31243:29;;:7;:29;:::i;:::-;31233:39;;31305:7;:21;31313:9;31323:1;31313:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31313:12:0;31305:21;;;;;;;;;;;;;31297:29;;:7;:29;:::i;:::-;31287:39;-1:-1:-1;31101:3:0;;;;:::i;:::-;;;;31059:270;;;;31361:7;;31353;;:15;;;;:::i;:::-;31343:7;:25;31339:56;;;31378:7;;31387;;31370:25;;;;;;30908:531;;:::o;31339:56::-;31414:7;;31423;;-1:-1:-1;30908:531:0;-1:-1:-1;30908:531:0:o;28456:1361::-;28580:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28580:28:0;28625:7;28624:8;:26;;;;;28637:13;28636:14;28624:26;:77;;;;28654:29;28664:6;28672:10;28654:9;:29::i;:::-;:47;;;;;28688:13;28687:14;28654:47;28621:146;;;28716:17;;;:27;;;28756:8;;28621:146;28781:6;28780:7;:22;;;;;28792:10;28791:11;28780:22;:40;;;;;28807:13;28806:14;28780:40;28777:311;;;28836:17;28856:41;28885:11;;28856:24;28868:11;;28856:7;:11;;:24;;;;:::i;:41::-;28836:61;;28931:11;;28915:8;:12;;;:27;28912:75;;28974:11;;28961:8;:12;28953:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;28944:6;;;:41;28912:75;29026:6;;;;29012:21;;:9;;:13;:21::i;:::-;29001:8;;;:32;29068:17;29076:9;29068:7;:17;:::i;:::-;29048;;;:37;-1:-1:-1;28777:311:0;29101:6;:24;;;;;29112:13;29111:14;29101:24;29098:287;;;29141:17;29161:37;29186:11;;29161:20;29173:7;;29161;:11;;:20;;;;:::i;:37::-;29141:57;;29232:7;;29216:8;:12;;;:23;29213:71;;29271:11;;29258:8;:12;29250:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;29241:6;;;:41;29213:71;29323:6;;;;29309:21;;:9;;:13;:21::i;:::-;29298:8;;;:32;29365:17;29373:9;29365:7;:17;:::i;:::-;29345;;;:37;-1:-1:-1;29098:287:0;29398:10;:28;;;;;29413:13;29412:14;29398:28;29395:293;;;29442:17;29462:38;29488:11;;29462:21;29474:8;;29462:7;:11;;:21;;;;:::i;:38::-;29442:58;;29534:8;;29518;:12;;;:24;29515:72;;29574:11;;29561:8;:12;29553:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;29544:6;;;:41;29515:72;29626:6;;;;29612:21;;:9;;:13;:21::i;:::-;29601:8;;;:32;29668:17;29676:9;29668:7;:17;:::i;:::-;29648;;;:37;-1:-1:-1;29395:293:0;29701:13;29698:93;;;29730:6;;;:16;;;29761:17;;;:27;;;28456:1361;;;;;;;:::o;29825:705::-;29970:15;;;;30063:19;30071:11;30063:7;:19;:::i;:::-;30053:29;;30097:7;30096:8;:26;;;;;30109:13;30108:14;30096:26;30093:76;;;-1:-1:-1;30145:7:0;;-1:-1:-1;30163:1:0;;-1:-1:-1;30163:1:0;30138:29;;30093:76;30182:13;30179:161;;;30225:11;30218:1;:6;;;:18;;;;:::i;:::-;30211:25;-1:-1:-1;30270:12:0;30211:25;30270:7;:12;:::i;:::-;30251:31;-1:-1:-1;30336:1:0;;-1:-1:-1;30297:41:0;;30179:161;30364:11;30357:1;:6;;;:18;;;;:::i;:::-;30350:25;;30404:11;30395:1;:8;;;:20;;;;:::i;:::-;30386:29;-1:-1:-1;30386:29:0;30445:12;30453:4;30445:7;:12;:::i;:::-;:19;;;;:::i;:::-;30426:38;;29825:705;;;;;;;;;;;:::o;16181:163::-;16279:4;16269:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;16298:13:0;;-1:-1:-1;16294:43:0;;16331:4;16313:11;:15;;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;16181:163:0;;;:::o;27522:256::-;27613:6;27593:11;:17;;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;27655:4:0;27635:26;;;;:11;:26;;;;;;;;27632:97;;;27703:4;27687:22;;;;:7;:22;;;;;:30;;27711:6;;27687:22;:30;;27711:6;;27687:30;:::i;:::-;;;;-1:-1:-1;;27632:97:0;27755:4;27739:22;;;;:7;:22;;;;;:31;;27764:6;;27739:22;:31;;27764:6;;27739:31;:::i;:::-;;;;-1:-1:-1;;;;27522:256:0:o;19620:430::-;19718:4;19735:13;19761:15;;19751:6;:25;;19735:41;;19787:19;19837:13;;19809:24;19827:4;19809:9;:24::i;:::-;19869:8;;19809:41;-1:-1:-1;19809:41:0;;-1:-1:-1;19869:8:0;;19868:9;:24;;;;-1:-1:-1;19881:11:0;;;;;;;19868:24;:36;;;;;19896:8;19868:36;:60;;;;-1:-1:-1;;;;;;19909:19:0;;;;;;:11;:19;;;;;;;;19908:20;19868:60;:78;;;;-1:-1:-1;19932:14:0;;;;19868:78;:112;;;;-1:-1:-1;19976:4:0;;-1:-1:-1;;;;;19963:17:0;;;19976:4;;19963:17;19868:112;:139;;;;;19997:10;;19984:9;;:23;;19868:139;:157;;;;;20011:14;19868:157;:174;;;;-1:-1:-1;20030:12:0;;-1:-1:-1;;;20030:12:0;;;;20029:13;19868:174;19861:181;19620:430;-1:-1:-1;;;;;;19620:430:0:o;20254:1113::-;12842:8;:15;;-1:-1:-1;;12842:15:0;12853:4;12842:15;;;;;;20348:8:::1;::::0;12842;;20347:24:::1;::::0;20369:1:::1;::::0;20347:17:::1;::::0;20348:8;20347:14:::1;:17::i;:24::-;20324:47;;20385:8;;20397:1;20385:13:::0;20382:91:::1;;20438:18:::0;;20415;;:56:::1;::::0;20469:1:::1;::::0;20415:49:::1;::::0;20462:1:::1;::::0;20415:42:::1;::::0;:22:::1;:42::i;:::-;:46:::0;::::1;:49::i;:56::-;20400:71;;20382:91;20527:18:::0;;20483:32:::1;::::0;20548:12;;20518:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;20483:77:::0;-1:-1:-1;20571:14:0::1;20588:33;20483:77:::0;20588:6;:33:::1;:::i;:::-;20571:50:::0;-1:-1:-1;20657:21:0::1;20689:24;20571:50:::0;20689:16:::1;:24::i;:::-;20724:20;20747:38;20771:14:::0;20747:21:::1;:38;:::i;:::-;20848:18:::0;;20724:61;;-1:-1:-1;20796:19:0::1;::::0;20833:33:::1;::::0;:12;:33:::1;:::i;:::-;20817:50;::::0;:12;:50:::1;:::i;:::-;20924:18:::0;;20796:71;;-1:-1:-1;20878:29:0::1;::::0;20910:32:::1;::::0;20796:71;20910:32:::1;:::i;:::-;20878:64:::0;-1:-1:-1;20956:25:0;;20953:108:::1;;20997:61;21010:24;21036:21;20997:12;:61::i;:::-;21120:18:::0;;21071:23:::1;::::0;21097:42:::1;::::0;:18:::1;:11:::0;21113:1:::1;21097:15;:18::i;:42::-;21071:68:::0;-1:-1:-1;21153:19:0;;21150:80:::1;;21182:18;::::0;21174:53:::1;::::0;-1:-1:-1;;;;;21182:18:0;;::::1;::::0;21174:53;::::1;;;::::0;21211:15;;21182:18:::1;21174:53:::0;21182:18;21174:53;21211:15;21182:18;21174:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21150:80;21258:21;21293:20:::0;;21290:70:::1;;21323:16;::::0;21315:43:::1;::::0;-1:-1:-1;;;;;21323:16:0;;::::1;::::0;21315:43;::::1;;;::::0;21350:7;;21323:16:::1;21315:43:::0;21323:16;21315:43;21350:7;21323:16;21315:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21290:70;-1:-1:-1::0;;12862:8:0;:16;;-1:-1:-1;;12862:16:0;;;-1:-1:-1;;;;;;;;20254:1113:0:o;28238:210::-;28310:4;28335:6;:22;;;;-1:-1:-1;28345:7:0;;:12;28335:22;28334:57;;;;28363:10;:27;;;;-1:-1:-1;28377:8:0;;:13;28363:27;28334:105;;;;28397:6;28396:7;:22;;;;;28408:10;28407:11;28396:22;:42;;;;-1:-1:-1;;28422:11:0;;:16;;28238:210;-1:-1:-1;;28238:210:0:o;21726:434::-;21816:16;;;21830:1;21816:16;;;;;;;;21792:21;;21816:16;;;;;;;;;;-1:-1:-1;21816:16:0;21792:40;;21861:4;21843;21848:1;21843:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21843:23:0;;;:7;;;;;;;;;;:23;;;;21887:6;;:13;;;-1:-1:-1;;;21887:13:0;;;;:6;;;;;:11;;:13;;;;;21843:7;;21887:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21877:4;21882:1;21877:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21877:23:0;;;:7;;;;;;;;;:23;21943:6;;21911:53;;21928:4;;21943:6;21952:11;21911:8;:53::i;:::-;21975:6;;:177;;-1:-1:-1;;;21975:177:0;;-1:-1:-1;;;;;21975:6:0;;;;:57;;:177;;22047:11;;21975:6;;22089:4;;22116;;22136:15;;21975:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21375:343;21488:6;;21456:53;;21473:4;;-1:-1:-1;;;;;21488:6:0;21497:11;21456:8;:53::i;:::-;21520:6;;21661:18;;21520:190;;-1:-1:-1;;;21520:190:0;;21583:4;21520:190;;;15905:34:1;15955:18;;;15948:34;;;21520:6:0;15998:18:1;;;15991:34;;;16041:18;;;16034:34;-1:-1:-1;;;;;21661:18:0;;;16084:19:1;;;16077:44;21694:15:0;16137:19:1;;;16130:35;21520:6:0;;;:22;;21550:9;;15839:19:1;;21520:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;332:247;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;584:548::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;868:3;1053:1;1048:2;1039:6;1028:9;1024:22;1020:31;1013:42;1123:2;1116;1112:7;1107:2;1099:6;1095:15;1091:29;1080:9;1076:45;1072:54;1064:62;;;;584:548;;;;:::o;1137:315::-;1205:6;1213;1266:2;1254:9;1245:7;1241:23;1237:32;1234:52;;;1282:1;1279;1272:12;1234:52;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;1442:2;1427:18;;;;1414:32;;-1:-1:-1;;;1137:315:1:o;1649:180::-;1708:6;1761:2;1749:9;1740:7;1736:23;1732:32;1729:52;;;1777:1;1774;1767:12;1729:52;-1:-1:-1;1800:23:1;;1649:180;-1:-1:-1;1649:180:1:o;1834:456::-;1911:6;1919;1927;1980:2;1968:9;1959:7;1955:23;1951:32;1948:52;;;1996:1;1993;1986:12;1948:52;2035:9;2022:23;2054:31;2079:5;2054:31;:::i;:::-;2104:5;-1:-1:-1;2161:2:1;2146:18;;2133:32;2174:33;2133:32;2174:33;:::i;:::-;1834:456;;2226:7;;-1:-1:-1;;;2280:2:1;2265:18;;;;2252:32;;1834:456::o;2295:248::-;2363:6;2371;2424:2;2412:9;2403:7;2399:23;2395:32;2392:52;;;2440:1;2437;2430:12;2392:52;-1:-1:-1;;2463:23:1;;;2533:2;2518:18;;;2505:32;;-1:-1:-1;2295:248:1:o;2737:118::-;2823:5;2816:13;2809:21;2802:5;2799:32;2789:60;;2845:1;2842;2835:12;2860:309;2925:6;2933;2986:2;2974:9;2965:7;2961:23;2957:32;2954:52;;;3002:1;2999;2992:12;2954:52;3038:9;3025:23;3015:33;;3098:2;3087:9;3083:18;3070:32;3111:28;3133:5;3111:28;:::i;:::-;3158:5;3148:15;;;2860:309;;;;;:::o;3174:382::-;3239:6;3247;3300:2;3288:9;3279:7;3275:23;3271:32;3268:52;;;3316:1;3313;3306:12;3268:52;3355:9;3342:23;3374:28;3396:5;3374:28;:::i;:::-;3421:5;-1:-1:-1;3478:2:1;3463:18;;3450:32;3491:33;3450:32;3491:33;:::i;3561:523::-;3665:6;3673;3681;3689;3697;3705;3758:3;3746:9;3737:7;3733:23;3729:33;3726:53;;;3775:1;3772;3765:12;3726:53;-1:-1:-1;;3798:23:1;;;3868:2;3853:18;;3840:32;;-1:-1:-1;3919:2:1;3904:18;;3891:32;;3970:2;3955:18;;3942:32;;-1:-1:-1;4021:3:1;4006:19;;3993:33;;-1:-1:-1;4073:3:1;4058:19;4045:33;;-1:-1:-1;3561:523:1;-1:-1:-1;3561:523:1:o;4089:382::-;4154:6;4162;4215:2;4203:9;4194:7;4190:23;4186:32;4183:52;;;4231:1;4228;4221:12;4183:52;4270:9;4257:23;4289:31;4314:5;4289:31;:::i;:::-;4339:5;-1:-1:-1;4396:2:1;4381:18;;4368:32;4409:30;4368:32;4409:30;:::i;4476:529::-;4553:6;4561;4569;4622:2;4610:9;4601:7;4597:23;4593:32;4590:52;;;4638:1;4635;4628:12;4590:52;4677:9;4664:23;4696:31;4721:5;4696:31;:::i;:::-;4746:5;-1:-1:-1;4803:2:1;4788:18;;4775:32;4816:33;4775:32;4816:33;:::i;:::-;4868:7;-1:-1:-1;4927:2:1;4912:18;;4899:32;4940:33;4899:32;4940:33;:::i;:::-;4992:7;4982:17;;;4476:529;;;;;:::o;5218:388::-;5286:6;5294;5347:2;5335:9;5326:7;5322:23;5318:32;5315:52;;;5363:1;5360;5353:12;5315:52;5402:9;5389:23;5421:31;5446:5;5421:31;:::i;5611:309::-;5676:6;5684;5737:2;5725:9;5716:7;5712:23;5708:32;5705:52;;;5753:1;5750;5743:12;5705:52;5792:9;5779:23;5811:28;5833:5;5811:28;:::i;5925:316::-;6002:6;6010;6018;6071:2;6059:9;6050:7;6046:23;6042:32;6039:52;;;6087:1;6084;6077:12;6039:52;-1:-1:-1;;6110:23:1;;;6180:2;6165:18;;6152:32;;-1:-1:-1;6231:2:1;6216:18;;;6203:32;;5925:316;-1:-1:-1;5925:316:1:o;6729:329::-;6931:2;6913:21;;;6970:1;6950:18;;;6943:29;-1:-1:-1;;;7003:2:1;6988:18;;6981:36;7049:2;7034:18;;6729:329::o;7415:127::-;7476:10;7471:3;7467:20;7464:1;7457:31;7507:4;7504:1;7497:15;7531:4;7528:1;7521:15;7547:127;7608:10;7603:3;7599:20;7596:1;7589:31;7639:4;7636:1;7629:15;7663:4;7660:1;7653:15;7679:128;7746:9;;;7767:11;;;7764:37;;;7781:18;;:::i;7812:127::-;7873:10;7868:3;7864:20;7861:1;7854:31;7904:4;7901:1;7894:15;7928:4;7925:1;7918:15;7944:135;7983:3;8004:17;;;8001:43;;8024:18;;:::i;:::-;-1:-1:-1;8071:1:1;8060:13;;7944:135::o;8851:217::-;8891:1;8917;8907:132;;8961:10;8956:3;8952:20;8949:1;8942:31;8996:4;8993:1;8986:15;9024:4;9021:1;9014:15;8907:132;-1:-1:-1;9053:9:1;;8851:217::o;9073:125::-;9138:9;;;9159:10;;;9156:36;;;9172:18;;:::i;9985:184::-;10055:6;10108:2;10096:9;10087:7;10083:23;10079:32;10076:52;;;10124:1;10121;10114:12;10076:52;-1:-1:-1;10147:16:1;;9985:184;-1:-1:-1;9985:184:1:o;10453:245::-;10520:6;10573:2;10561:9;10552:7;10548:23;10544:32;10541:52;;;10589:1;10586;10579:12;10541:52;10621:9;10615:16;10640:28;10662:5;10640:28;:::i;11727:168::-;11800:9;;;11831;;11848:15;;;11842:22;;11828:37;11818:71;;11869:18;;:::i;14323:251::-;14393:6;14446:2;14434:9;14425:7;14421:23;14417:32;14414:52;;;14462:1;14459;14452:12;14414:52;14494:9;14488:16;14513:31;14538:5;14513:31;:::i;14579:980::-;14841:4;14889:3;14878:9;14874:19;14920:6;14909:9;14902:25;14946:2;14984:6;14979:2;14968:9;14964:18;14957:34;15027:3;15022:2;15011:9;15007:18;15000:31;15051:6;15086;15080:13;15117:6;15109;15102:22;15155:3;15144:9;15140:19;15133:26;;15194:2;15186:6;15182:15;15168:29;;15215:1;15225:195;15239:6;15236:1;15233:13;15225:195;;;15304:13;;-1:-1:-1;;;;;15300:39:1;15288:52;;15395:15;;;;15360:12;;;;15336:1;15254:9;15225:195;;;-1:-1:-1;;;;;;;15476:32:1;;;;15471:2;15456:18;;15449:60;-1:-1:-1;;;15540:3:1;15525:19;15518:35;15437:3;14579:980;-1:-1:-1;;;14579:980:1:o;16176:306::-;16264:6;16272;16280;16333:2;16321:9;16312:7;16308:23;16304:32;16301:52;;;16349:1;16346;16339:12;16301:52;16378:9;16372:16;16362:26;;16428:2;16417:9;16413:18;16407:25;16397:35;;16472:2;16461:9;16457:18;16451:25;16441:35;;16176:306;;;;;:::o

Swarm Source

ipfs://b6fa08c69face258ad7c1fea11551d7e10d7f172073a33713044862208fcde2d

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.