FTM Price: $0.48 (+3.97%)
Gas: 52 GWei

Contract

0xC3f069D7439baf6D4D6E9478D9Cc77778E62D147
 

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Value
Transfer765478852024-02-29 19:18:497 mins ago1709234329IN
Fantom Libero: FLIBERO Token
0 FTM0.0057018365.269014
Approve765470232024-02-29 19:04:2322 mins ago1709233463IN
Fantom Libero: FLIBERO Token
0 FTM0.0018305463.06790235
Approve765465972024-02-29 18:57:1829 mins ago1709233038IN
Fantom Libero: FLIBERO Token
0 FTM0.00290963.06790235
Approve765404172024-02-29 17:14:232 hrs 12 mins ago1709226863IN
Fantom Libero: FLIBERO Token
0 FTM0.0040010286.7206126
Approve765383862024-02-29 16:37:472 hrs 48 mins ago1709224667IN
Fantom Libero: FLIBERO Token
0 FTM0.0041014788.8977591
Approve765293912024-02-29 13:52:075 hrs 34 mins ago1709214727IN
Fantom Libero: FLIBERO Token
0 FTM0.0045626997.91613774
Approve765281842024-02-29 13:31:015 hrs 55 mins ago1709213461IN
Fantom Libero: FLIBERO Token
0 FTM0.00313265106.95673144
Approve765276612024-02-29 13:21:386 hrs 4 mins ago1709212898IN
Fantom Libero: FLIBERO Token
0 FTM0.00472527102.41838448
Approve765274482024-02-29 13:17:596 hrs 8 mins ago1709212679IN
Fantom Libero: FLIBERO Token
0 FTM0.0028385497.75621813
Approve765267662024-02-29 13:06:496 hrs 19 mins ago1709212009IN
Fantom Libero: FLIBERO Token
0 FTM0.0038952384.49354632
Approve765263862024-02-29 13:00:116 hrs 26 mins ago1709211611IN
Fantom Libero: FLIBERO Token
0 FTM0.003715280.52548165
Approve765243732024-02-29 12:21:547 hrs 4 mins ago1709209314IN
Fantom Libero: FLIBERO Token
0 FTM0.0017777560.69285246
Approve765242972024-02-29 12:20:147 hrs 6 mins ago1709209214IN
Fantom Libero: FLIBERO Token
0 FTM0.0017778160.69285246
Approve765242132024-02-29 12:18:417 hrs 7 mins ago1709209121IN
Fantom Libero: FLIBERO Token
0 FTM0.0017777560.69285246
Approve765179342024-02-29 10:13:549 hrs 12 mins ago1709201634IN
Fantom Libero: FLIBERO Token
0 FTM0.0045555398.20297493
Approve764890842024-02-29 0:43:4218 hrs 42 mins ago1709167422IN
Fantom Libero: FLIBERO Token
0 FTM0.0020657670.52327499
Approve764706592024-02-28 18:58:021 day 28 mins ago1709146682IN
Fantom Libero: FLIBERO Token
0 FTM0.00380392129.75597521
Approve764652132024-02-28 17:20:291 day 2 hrs ago1709140829IN
Fantom Libero: FLIBERO Token
0 FTM0.0031176766.94028851
Approve764651642024-02-28 17:19:401 day 2 hrs ago1709140780IN
Fantom Libero: FLIBERO Token
0 FTM0.0031176766.94028851
Approve764651262024-02-28 17:19:011 day 2 hrs ago1709140741IN
Fantom Libero: FLIBERO Token
0 FTM0.0031176766.94028851
Approve764650732024-02-28 17:18:001 day 2 hrs ago1709140680IN
Fantom Libero: FLIBERO Token
0 FTM0.0031176766.94028851
Approve764625522024-02-28 16:31:371 day 2 hrs ago1709137897IN
Fantom Libero: FLIBERO Token
0 FTM0.0034375774.52732388
Approve764624582024-02-28 16:30:061 day 2 hrs ago1709137806IN
Fantom Libero: FLIBERO Token
0 FTM0.0034378974.53440843
Approve764622952024-02-28 16:27:011 day 2 hrs ago1709137621IN
Fantom Libero: FLIBERO Token
0 FTM0.0034311374.3877354
Approve764571512024-02-28 14:44:031 day 4 hrs ago1709131443IN
Fantom Libero: FLIBERO Token
0 FTM0.0047028499.39238255
View all transactions

Latest 25 internal transactions (View All)

Parent Txn Hash Block From To Value
348002222022-03-30 14:09:16701 days 5 hrs ago1648649356
Fantom Libero: FLIBERO Token
452.1627362 FTM
348002222022-03-30 14:09:16701 days 5 hrs ago1648649356
Fantom Libero: FLIBERO Token
452.1627362 FTM
348002222022-03-30 14:09:16701 days 5 hrs ago1648649356
Fantom Libero: FLIBERO Token
493.6912121 FTM
348002222022-03-30 14:09:16701 days 5 hrs ago1648649356
Fantom Libero: FLIBERO Token
493.6912121 FTM
348002222022-03-30 14:09:16701 days 5 hrs ago1648649356
Fantom Libero: FLIBERO Token
493.6912121 FTM
348002222022-03-30 14:09:16701 days 5 hrs ago1648649356
Fantom Libero: FLIBERO Token
493.6912121 FTM
348002222022-03-30 14:09:16701 days 5 hrs ago1648649356
Fantom Libero: FLIBERO Token
452.1627362 FTM
348002212022-03-30 14:09:15701 days 5 hrs ago1648649355
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002212022-03-30 14:09:15701 days 5 hrs ago1648649355
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
489.30558893 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
489.30558893 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002202022-03-30 14:09:14701 days 5 hrs ago1648649354
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002192022-03-30 14:09:12701 days 5 hrs ago1648649352
Fantom Libero: FLIBERO Token
489.30558893 FTM
348002192022-03-30 14:09:12701 days 5 hrs ago1648649352
Fantom Libero: FLIBERO Token
489.30558893 FTM
348002182022-03-30 14:09:12701 days 5 hrs ago1648649352
Fantom Libero: FLIBERO Token
490.25300307 FTM
348002182022-03-30 14:09:12701 days 5 hrs ago1648649352
Fantom Libero: FLIBERO Token
490.25300307 FTM
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FLiberoToken

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 25000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at ftmscan.com on 2022-03-29
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.4;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

abstract contract Auth is Context{
    address owner;
    mapping (address => bool) private authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender)); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender)); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
        emit Authorized(adr);
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
        emit Unauthorized(adr);
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
    event Authorized(address adr);
    event Unauthorized(address adr);
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

}

interface InterfaceLP {
    function sync() external;
}

library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint8 _tokenDecimals
    ) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = _tokenDecimals;
    }

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

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

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

interface IDEXRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
    external
    returns (
        uint256 amountA,
        uint256 amountB,
        uint256 liquidity
    );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
    external
    payable
    returns (
        uint256 amountToken,
        uint256 amountETH,
        uint256 liquidity
    );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

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

contract FLiberoToken is ERC20Detailed, Auth {
    using SafeMath for uint256;
    using SafeMathInt for int256;

    bool public initialDistributionFinished = false;
    bool public autoRebase = false;
    bool public feesOnNormalTransfers = true;
    bool public isLiquidityInFtm = true;
    bool public isRfvInFtm = true;
    bool public isLiquidityEnabled = true;

    uint256 public rewardYield = 1402777;
    uint256 public rebaseFrequency = 600;
    uint256 public nextRebase = block.timestamp + 31536000;
    uint256 public maxSellTransactionAmount = 2000000 * 10 ** 18;
    uint256 public swapThreshold = 400000 * 10**18;

    mapping(address => bool) _isFeeExempt;
    address[] private _makerPairs;
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private constant REWARD_YIELD_DENOMINATOR = 10000000000;
    uint256 private constant MAX_TOTAL_BUY_FEE_RATE = 250;
    uint256 private constant MAX_TOTAL_SELL_FEE_RATE = 500;
    uint256 private constant FEE_DENOMINATOR = 1000;
    uint256 private constant MIN_MAX_SELL_AMOUNT = 1000 * 10**18;
    uint256 private constant MAX_REBASE_FREQUENCY = 1800;
    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = ~uint256(0);
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 15 * 10**8 * 10**DECIMALS;
    uint256 private constant TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant MAX_SUPPLY = ~uint128(0);

    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = 0x0000000000000000000000000000000000000000;
    address public constant usdcToken = 0x04068DA6C83AFCFA0e13ba15A6696662335D5B75;
    
    address public liquidityReceiver = 0x730736E3cdffc531b74eb8B30bD2CC50beb8Ab3c;
    address public treasuryReceiver = 0x3ff8970f17d463b83D289827B7B8E5Eed61Cc3e8;
    address public riskFreeValueReceiver = 0x14c02711A4678fc7De388e77e99B07753C856e84;
    address public xLiberoReceiver = 0x8689EDAb5Bdb17b11273a5C9412C4BBC8f2Ec4F8;

    IDEXRouter public router;
    address public pair;

    uint256 public liquidityFee = 40;
    uint256 public treasuryFee = 30;
    uint256 public buyFeeRFV = 50;
    uint256 public buyBurnFee = 20;
    uint256 public buyxLiberoFee = 0;
    uint256 public sellFeeTreasuryAdded = 20;
    uint256 public sellFeeRFVAdded = 40;
    uint256 public sellBurnFeeAdded = 0;
    uint256 public sellxLiberoFeeAdded = 0;
    uint256 public totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV).add(buyBurnFee).add(buyxLiberoFee);
    uint256 public totalSellFee = totalBuyFee.add(sellFeeTreasuryAdded).add(sellFeeRFVAdded).add(sellBurnFeeAdded).add(sellxLiberoFeeAdded);

    bool inSwap;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;

    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;

    constructor() ERC20Detailed("Fantom Libero Financial Freedom", "FLIBERO", uint8(DECIMALS)) Auth(msg.sender) {
        router = IDEXRouter(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        pair = IDEXFactory(router.factory()).createPair(address(this), router.WETH());
        address pairUsdc = IDEXFactory(router.factory()).createPair(address(this), usdcToken);

        _allowedFragments[address(this)][address(router)] = uint256(-1);
        _allowedFragments[address(this)][pair] = uint256(-1);
        _allowedFragments[address(this)][address(this)] = uint256(-1);
        _allowedFragments[address(this)][pairUsdc] = uint256(-1);

        setAutomatedMarketMakerPair(pair, true);
        setAutomatedMarketMakerPair(pairUsdc, true);

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[msg.sender] = TOTAL_GONS;
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        _isFeeExempt[treasuryReceiver] = true;
        _isFeeExempt[riskFreeValueReceiver] = true;
        _isFeeExempt[address(this)] = true;
        _isFeeExempt[msg.sender] = true;

        IERC20(usdcToken).approve(address(router), uint256(-1));
        IERC20(usdcToken).approve(address(pairUsdc), uint256(-1));
        IERC20(usdcToken).approve(address(this), uint256(-1));

        emit Transfer(address(0x0), msg.sender, _totalSupply);
    }

    receive() external payable {}

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

    function allowance(address owner_, address spender) external view override returns (uint256){
        return _allowedFragments[owner_][spender];
    }

    function balanceOf(address who) public view override returns (uint256) {
        return _gonBalances[who].div(_gonsPerFragment);
    }

    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isFeeExempt[_addr];
    }

    function shouldRebase() internal view returns (bool) {
        return nextRebase <= block.timestamp;
    }

    function shouldTakeFee(address from, address to) internal view returns (bool) {
        if(_isFeeExempt[from] || _isFeeExempt[to]){
            return false;
        }else if (feesOnNormalTransfers){
            return true;
        }else{
            return (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]);
        }
    }

    function shouldSwapBack() internal view returns (bool) {
        return
        !automatedMarketMakerPairs[msg.sender] &&
        !inSwap &&
        swapThreshold > 0 &&
        totalBuyFee.add(totalSellFee) > 0 &&
        balanceOf(address(this)) >= swapThreshold;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div(_gonsPerFragment);
    }

    function manualSync() public {
        for(uint i = 0; i < _makerPairs.length; i++){
            try InterfaceLP(_makerPairs[i]).sync() {

            }catch Error (string memory reason) {
                emit GenericErrorEvent("manualSync(): _makerPairs.sync() Failed");
                emit GenericErrorEvent(reason);
            }
        }
    }

    function transfer(address to, uint256 value) external override validRecipient(to) returns (bool){
        _transferFrom(msg.sender, to, value);
        return true;
    }

    function _basicTransfer(address from, address to, uint256 amount) internal returns (bool) {
        uint256 gonAmount = amount.mul(_gonsPerFragment);
        _gonBalances[from] = _gonBalances[from].sub(gonAmount);
        _gonBalances[to] = _gonBalances[to].add(gonAmount);

        emit Transfer(from, to, amount);

        return true;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        bool excludedAccount = _isFeeExempt[sender] || _isFeeExempt[recipient];

        require(initialDistributionFinished || excludedAccount, "Trading not started");

        if (
            automatedMarketMakerPairs[recipient] &&
            !excludedAccount
        ) {
            require(amount <= maxSellTransactionAmount, "Error amount");
        }

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        uint256 gonAmount = amount.mul(_gonsPerFragment);

        if (shouldSwapBack()) {
            swapBack();
        }

        _gonBalances[sender] = _gonBalances[sender].sub(gonAmount);

        uint256 gonAmountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, gonAmount) : gonAmount;
        _gonBalances[recipient] = _gonBalances[recipient].add(gonAmountReceived);

        emit Transfer(
            sender,
            recipient,
            gonAmountReceived.div(_gonsPerFragment)
        );

        if(
            shouldRebase() &&
            autoRebase &&
            !automatedMarketMakerPairs[sender] &&
            !automatedMarketMakerPairs[recipient]
        ) {
            _rebase();
            manualSync();
        }

        return true;
    }

    function transferFrom(address from, address to, uint256 value) external override validRecipient(to) returns (bool) {
        if (_allowedFragments[from][msg.sender] != uint256(-1)) {
            _allowedFragments[from][msg.sender] = _allowedFragments[from][
            msg.sender
            ].sub(value, "Insufficient Allowance");
        }

        _transferFrom(from, to, value);
        return true;
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        if(isLiquidityInFtm){
            uint256 initialBalance = address(this).balance;

            _swapTokensForFTM(half, address(this));

            uint256 newBalance = address(this).balance.sub(initialBalance);

            _addLiquidity(otherHalf, newBalance);

            emit SwapAndLiquify(half, newBalance, otherHalf);
        }else{
            uint256 initialBalance = IERC20(usdcToken).balanceOf(address(this));

            _swapTokensForUsdc(half, address(this));

            uint256 newBalance = IERC20(usdcToken).balanceOf(address(this)).sub(initialBalance);

            addLiquidityUsdc(otherHalf, newBalance);

            emit SwapAndLiquifyUsdc(half, newBalance, otherHalf);
        }
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ftmAmount) private {
        router.addLiquidityETH{value: ftmAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityReceiver,
            block.timestamp
        );
    }

    function addLiquidityUsdc(uint256 tokenAmount, uint256 usdcAmount) private {
        router.addLiquidity(
            address(this),
            usdcToken,
            tokenAmount,
            usdcAmount,
            0,
            0,
            liquidityReceiver,
            block.timestamp
        );
    }

    function _swapTokensForFTM(uint256 tokenAmount, address receiver) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            receiver,
            block.timestamp
        );
    }

    function swapBack() internal swapping {
        uint256 realTotalFee = totalBuyFee.add(totalSellFee);

        uint256 dynamicLiquidityFee = isLiquidityEnabled ? liquidityFee : 0;
        uint256 contractTokenBalance = _gonBalances[address(this)].div(_gonsPerFragment);

        uint256 amountToLiquify = contractTokenBalance.mul(dynamicLiquidityFee.mul(2)).div(realTotalFee);
        uint256 amountToBurn = contractTokenBalance.mul(buyBurnFee.mul(2).add(sellBurnFeeAdded)).div(realTotalFee);
        uint256 amountToRFV = contractTokenBalance.mul(buyFeeRFV.mul(2).add(sellFeeRFVAdded)).div(realTotalFee);
        uint256 amountToxLibero = contractTokenBalance.mul(buyxLiberoFee.mul(2).add(sellxLiberoFeeAdded)).div(realTotalFee);
        uint256 amountToTreasury = contractTokenBalance.sub(amountToLiquify).sub(amountToBurn).sub(amountToRFV).sub(amountToxLibero);

        if(amountToLiquify > 0){
            _swapAndLiquify(amountToLiquify);
        }

        if(amountToBurn > 0){
            _basicTransfer(address(this), DEAD, amountToBurn);
        }

        if(amountToRFV > 0){
            if(isRfvInFtm){
                _swapTokensForFTM(amountToRFV, riskFreeValueReceiver);
            }else{
                _swapTokensForUsdc(amountToRFV, riskFreeValueReceiver);
            }
        }

        if(amountToxLibero > 0){
            _swapTokensForUsdc(amountToxLibero, xLiberoReceiver);
        }

        if(amountToTreasury > 0){
            _swapTokensForFTM(amountToTreasury, treasuryReceiver);
        }

        emit SwapBack(contractTokenBalance, amountToLiquify, amountToRFV, amountToTreasury);
    }

    function takeFee(address sender, address recipient, uint256 gonAmount) internal returns (uint256){
        uint256 _realFee = totalBuyFee;
        if(automatedMarketMakerPairs[recipient]) _realFee = totalSellFee;

        uint256 feeAmount = gonAmount.mul(_realFee).div(FEE_DENOMINATOR);

        _gonBalances[address(this)] = _gonBalances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment));

        return gonAmount.sub(feeAmount);
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool){
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] = oldValue.sub(
                subtractedValue
            );
        }
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool){
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][
        spender
        ].add(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    function approve(address spender, uint256 value) external override returns (bool){
        _allowedFragments[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function _rebase() private {
        if(!inSwap) {
            int256 supplyDelta = int256(_totalSupply.mul(rewardYield).div(REWARD_YIELD_DENOMINATOR));

            coreRebase(supplyDelta);
        }
    }

    function coreRebase(int256 supplyDelta) private returns (uint256) {
        uint256 epoch = block.timestamp;

        if (supplyDelta == 0) {
            emit LogRebase(epoch, _totalSupply);
            return _totalSupply;
        }

        if (supplyDelta < 0) {
            _totalSupply = _totalSupply.sub(uint256(-supplyDelta));
        } else {
            _totalSupply = _totalSupply.add(uint256(supplyDelta));
        }

        if (_totalSupply > MAX_SUPPLY) {
            _totalSupply = MAX_SUPPLY;
        }

        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        nextRebase = epoch + rebaseFrequency;

        emit LogRebase(epoch, _totalSupply);
        return _totalSupply;
    }

    function manualRebase() external authorized{
        require(!inSwap, "Try again");
        require(nextRebase <= block.timestamp, "Not in time");

        int256 supplyDelta = int256(_totalSupply.mul(rewardYield).div(REWARD_YIELD_DENOMINATOR));

        coreRebase(supplyDelta);
        manualSync();
    }

    function setAutomatedMarketMakerPair(address _pair, bool _value) public onlyOwner {
        require(automatedMarketMakerPairs[_pair] != _value, "Value already set");

        automatedMarketMakerPairs[_pair] = _value;

        if(_value){
            _makerPairs.push(_pair);
        }else{
            require(_makerPairs.length > 1, "Required 1 pair");
            for (uint256 i = 0; i < _makerPairs.length; i++) {
                if (_makerPairs[i] == _pair) {
                    _makerPairs[i] = _makerPairs[_makerPairs.length - 1];
                    _makerPairs.pop();
                    break;
                }
            }
        }

        emit SetAutomatedMarketMakerPair(_pair, _value);
    }

    function setInitialDistributionFinished(bool _value) external onlyOwner {
        require(initialDistributionFinished != _value, "Not changed");
        initialDistributionFinished = _value;
    }

    function setFeeExempt(address _addr, bool _value) external onlyOwner {
        require(_isFeeExempt[_addr] != _value, "Not changed");
        _isFeeExempt[_addr] = _value;
    }

    function setSwapThreshold(uint256 _value) external onlyOwner {
        require(swapThreshold != _value, "Not changed");
        swapThreshold = _value;
    }

    function setFeeReceivers(
        address _liquidityReceiver,
        address _treasuryReceiver,
        address _riskFreeValueReceiver,
        address _xLiberoReceiver
    ) external onlyOwner {
        require(_liquidityReceiver != address(0), "Invalid _liquidityReceiver");
        require(_treasuryReceiver != address(0), "Invalid _treasuryReceiver");
        require(_riskFreeValueReceiver != address(0), "Invalid _riskFreeValueReceiver");
        require(_xLiberoReceiver != address(0), "Invalid _xLiberoReceiver");

        liquidityReceiver = _liquidityReceiver;
        treasuryReceiver = _treasuryReceiver;
        riskFreeValueReceiver = _riskFreeValueReceiver;
        xLiberoReceiver = _xLiberoReceiver;
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _riskFreeValue,
        uint256 _treasuryFee,
        uint256 _burnFee,
        uint256 _xLiberoFee,
        uint256 _sellFeeTreasuryAdded,
        uint256 _sellFeeRFVAdded,
        uint256 _sellBurnFeeAdded,
        uint256 _sellxLiberoFeeAdded
    ) external onlyOwner {
        liquidityFee = _liquidityFee;
        buyFeeRFV = _riskFreeValue;
        treasuryFee = _treasuryFee;
        buyBurnFee = _burnFee;
        buyxLiberoFee = _xLiberoFee;
        sellFeeTreasuryAdded = _sellFeeTreasuryAdded;
        sellFeeRFVAdded = _sellFeeRFVAdded;
        sellBurnFeeAdded = _sellBurnFeeAdded;
        sellxLiberoFeeAdded = _sellxLiberoFeeAdded;

        totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV).add(buyBurnFee).add(buyxLiberoFee);
        totalSellFee = totalBuyFee.add(sellFeeTreasuryAdded).add(sellFeeRFVAdded).add(sellBurnFeeAdded).add(sellxLiberoFeeAdded);

        require(totalBuyFee < MAX_TOTAL_BUY_FEE_RATE, "Total buy fee too high");
        require(totalSellFee < MAX_TOTAL_SELL_FEE_RATE, "Total sell fee too high");
    }

    function clearStuckBalance(address _receiver) external onlyOwner {
        uint256 balance = address(this).balance;
        payable(_receiver).transfer(balance);
    }

    function rescueToken(address tokenAddress) external onlyOwner returns (bool success){
        require(tokenAddress != address(this),"Not allow recuse Libero");
        uint256 amount = ERC20Detailed(tokenAddress).balanceOf(address(this));
        return ERC20Detailed(tokenAddress).transfer(msg.sender, amount);
    }

    function setAutoRebase(bool _autoRebase) external onlyOwner {
        require(autoRebase != _autoRebase, "Not changed");
        autoRebase = _autoRebase;
    }

    function setRebaseFrequency(uint256 _rebaseFrequency) external onlyOwner {
        require(_rebaseFrequency <= MAX_REBASE_FREQUENCY, "Too high");
        rebaseFrequency = _rebaseFrequency;
    }

    function setRewardYield(uint256 _rewardYield) external onlyOwner {
        require(rewardYield != _rewardYield, "Not changed");
        rewardYield = _rewardYield;
    }

    function setFeesOnNormalTransfers(bool _enabled) external onlyOwner {
        require(feesOnNormalTransfers != _enabled, "Not changed");
        feesOnNormalTransfers = _enabled;
    }

    function setIsLiquidityEnabled(bool _value) external onlyOwner {
        require(isLiquidityEnabled != _value, "Not changed");
        isLiquidityEnabled = _value;
    }

    function setIsLiquidityInFtm(bool _value) external onlyOwner {
        require(isLiquidityInFtm != _value, "Not changed");
        isLiquidityInFtm = _value;
    }

    function setIsRfvInFtm(bool _value) external onlyOwner {
        require(isRfvInFtm != _value, "Not changed");
        isRfvInFtm = _value;
    }

    function setNextRebase(uint256 _nextRebase) external onlyOwner {
        nextRebase = _nextRebase;
    }

    function setMaxSellTransaction(uint256 _maxTxn) external onlyOwner {
        require(_maxTxn >= MIN_MAX_SELL_AMOUNT, "Too small");
        maxSellTransactionAmount = _maxTxn;
    }

    event SwapBack(uint256 contractTokenBalance,uint256 amountToLiquify,uint256 amountToRFV,uint256 amountToTreasury);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ftmReceived, uint256 tokensIntoLiqudity);
    event SwapAndLiquifyUsdc(uint256 tokensSwapped, uint256 usdcReceived, uint256 tokensIntoLiqudity);
    event LogRebase(uint256 indexed epoch, uint256 totalSupply);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event GenericErrorEvent(string reason);
}

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":"adr","type":"address"}],"name":"Authorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"GenericErrorEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ftmReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdcReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquifyUsdc","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToLiquify","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRFV","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToTreasury","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"}],"name":"Unauthorized","type":"event"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeRFV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyxLiberoFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesOnNormalTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityInFtm","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":"isRfvInFtm","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"riskFreeValueReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFeeAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeRFVAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeTreasuryAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellxLiberoFeeAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoRebase","type":"bool"}],"name":"setAutoRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"},{"internalType":"address","name":"_riskFreeValueReceiver","type":"address"},{"internalType":"address","name":"_xLiberoReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_riskFreeValue","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_xLiberoFee","type":"uint256"},{"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFeeAdded","type":"uint256"},{"internalType":"uint256","name":"_sellxLiberoFeeAdded","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsLiquidityEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsLiquidityInFtm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsRfvInFtm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxn","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setNextRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rebaseFrequency","type":"uint256"}],"name":"setRebaseFrequency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardYield","type":"uint256"}],"name":"setRewardYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdcToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xLiberoReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526004805460ff60281b1960ff60201b1963ff0000001962ffffff1990931662010000179290921663010000001791909116640100000000171665010000000000179055621567996005556102586006556301e1338042016007556a01a784379d99db420000006008556954b40b1f852bda000000600955600d80546001600160a01b031990811673730736e3cdffc531b74eb8b30bd2cc50beb8ab3c17909155600e80548216733ff8970f17d463b83d289827b7b8e5eed61cc3e8179055600f805482167314c02711a4678fc7de388e77e99b07753c856e8417905560108054909116738689edab5bdb17b11273a5c9412c4bbc8f2ec4f817905560286013819055601e60148181556032601581905560168290556000601781905560188390556019859055601a819055601b819055620001719490936200015d93928492909183919062002def62000839602090811b91909117901c565b6200083960201b62002def1790919060201c565b601c55620001a7601b546200015d601a546200015d6019546200015d601854601c546200083960201b62002def1790919060201c565b601d55348015620001b757600080fd5b50604080518082018252601f81527f46616e746f6d204c696265726f2046696e616e6369616c2046726565646f6d00602080830191825283518085019094526007845266464c494245524f60c81b9084015281513393916012916200021f9160009162000c11565b5081516200023590600190602085019062000c11565b50600280546001600160a01b039586166101008102610100600160a81b031960ff90951660ff199384161794909416939093179091556000918252600360209081526040928390208054909216600117909155601180546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c291790819055825163c45a015560e01b8152925195169463c45a01559450600480840194509192909190829003018186803b158015620002e957600080fd5b505afa158015620002fe573d6000803e3d6000fd5b505050506040513d60208110156200031557600080fd5b5051601154604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b1580156200036857600080fd5b505afa1580156200037d573d6000803e3d6000fd5b505050506040513d60208110156200039457600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620003e757600080fd5b505af1158015620003fc573d6000803e3d6000fd5b505050506040513d60208110156200041357600080fd5b5051601280546001600160a01b0319166001600160a01b039283161790556011546040805163c45a015560e01b81529051600093929092169163c45a015591600480820192602092909190829003018186803b1580156200047357600080fd5b505afa15801562000488573d6000803e3d6000fd5b505050506040513d60208110156200049f57600080fd5b5051604080516364e329cb60e11b81523060048201527304068da6c83afcfa0e13ba15a6696662335d5b75602482015290516001600160a01b039092169163c9c65396916044808201926020929091908290030181600087803b1580156200050657600080fd5b505af11580156200051b573d6000803e3d6000fd5b505050506040513d60208110156200053257600080fd5b50513060008181526022602090815260408083206011546001600160a01b03908116855292528083206000199081905560128054841685528285208290559484528184208190558286168452922091909155905491925062000597911660016200089b565b620005a48160016200089b565b6b04d8c55aefb8c05b5c000000601f9081553360009081526021602090815260409091206b0370271e937e2b9a33ffffff19908190559154620005f1929162002e6a62000b07821b17901c565b6020908155600e546001600160a01b039081166000908152600a835260408082208054600160ff199182168117909255600f54851684528284208054821683179055308452828420805482168317905533845282842080549091169091179055601154815163095ea7b360e01b8152931660048401526000196024840152517304068da6c83afcfa0e13ba15a6696662335d5b759363095ea7b393604480820194929392918390030190829087803b158015620006ad57600080fd5b505af1158015620006c2573d6000803e3d6000fd5b505050506040513d6020811015620006d957600080fd5b50506040805163095ea7b360e01b81526001600160a01b0383166004820152600019602482015290517304068da6c83afcfa0e13ba15a6696662335d5b759163095ea7b39160448083019260209291908290030181600087803b1580156200074057600080fd5b505af115801562000755573d6000803e3d6000fd5b505050506040513d60208110156200076c57600080fd5b50506040805163095ea7b360e01b8152306004820152600019602482015290517304068da6c83afcfa0e13ba15a6696662335d5b759163095ea7b39160448083019260209291908290030181600087803b158015620007ca57600080fd5b505af1158015620007df573d6000803e3d6000fd5b505050506040513d6020811015620007f657600080fd5b5050601f54604080519182525133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35062000cbd565b60008282018381101562000894576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b620008a63362000b51565b620008b057600080fd5b6001600160a01b0382166000908152600c602052604090205460ff161515811515141562000919576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600c60205260409020805460ff191682158015919091179091556200099857600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b03841617905562000acb565b600b54600110620009e2576040805162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015290519081900360640190fd5b60005b600b5481101562000ac957826001600160a01b0316600b828154811062000a0857fe5b6000918252602090912001546001600160a01b0316141562000ac057600b8054600019810190811062000a3757fe5b600091825260209091200154600b80546001600160a01b03909216918390811062000a5e57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b80548062000a9857fe5b600082815260209020810160001990810180546001600160a01b031916905501905562000ac9565b600101620009e5565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60006200089483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000b6a60201b60201c565b60025461010090046001600160a01b0390811691161490565b6000818362000bfa5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000bbe57818101518382015260200162000ba4565b50505050905090810190601f16801562000bec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000c0757fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000c49576000855562000c94565b82601f1062000c6457805160ff191683800117855562000c94565b8280016001018555821562000c94579182015b8281111562000c9457825182559160200191906001019062000c77565b5062000ca292915062000ca6565b5090565b5b8082111562000ca2576000815560010162000ca7565b6144cd8062000ccd6000396000f3fe6080604052600436106104185760003560e01c80638102c57011610228578063b62496f511610128578063e15beb80116100bb578063f2fde38b1161008a578063f887ea401161006f578063f887ea4014610ed8578063fd06e24614610eed578063fe9fbb8014610f025761041f565b8063f2fde38b14610e6c578063f3a54f2c14610eac5761041f565b8063e15beb8014610dd6578063e71dc3f514610e02578063e98ca27614610e17578063f0b37c0414610e2c5761041f565b8063cc32d176116100f7578063cc32d17614610d24578063d1fce26414610d39578063d439979014610d4e578063dd62ed3e14610d8e5761041f565b8063b62496f514610c7a578063b6a5d7de14610cba578063b9a6a13c14610cfa578063bc7e68a314610d0f5761041f565b80639ae7372d116101bb578063a8aa1b311161018a578063add5df661161016f578063add5df6614610bf4578063ae74df3314610c50578063af9b800e14610c655761041f565b8063a8aa1b3114610b99578063a9059cbb14610bae5761041f565b80639ae7372d14610aea5780639d0014b114610b145780639d9241ec14610b3e578063a457c2d714610b535761041f565b806395d89b41116101f757806395d89b4114610a635780639763eec414610a7857806398118cb414610a8d5780639a7a23d614610aa25761041f565b80638102c570146109dc57806389375abf146109f15780638ebfc79614610a065780639079f93214610a4e5761041f565b8063313ce567116103335780635abe6711116102c657806370a0823111610295578063764d72bf1161027a578063764d72bf146109725780637ac82927146109b25780637d4b5017146109c75761041f565b806370a082311461091d578063753d02a11461095d5761041f565b80635abe67111461089d5780635c38ffe2146108b257806361a9d1b1146108dc57806369511136146108f15761041f565b806343e1f26b1161030257806343e1f26b146108095780634460d3cf1461081e5780634cd9ddf21461085e57806359b107b9146108885761041f565b8063313ce567146107145780633643f1d51461073f578063395093511461076b5780633c8e556d146107b15761041f565b80631276089b116103ab578063264d26dd1161037a578063264d26dd14610680578063266579f6146106955780632b112e49146106bf5780632f54bf6e146106d45761041f565b80631276089b146105c157806318160ddd146105ef5780631c37b3151461060457806323b872dd146106305761041f565b806308b1fd8f116103e757806308b1fd8f146104ff578063095ea7b31461053d5780630af083141461059757806311eac855146105ac5761041f565b806302259e9e146104245780630445b6671461044b57806306fdde03146104605780630719b36d146104ea5761041f565b3661041f57005b600080fd5b34801561043057600080fd5b50610439610f42565b60408051918252519081900360200190f35b34801561045757600080fd5b50610439610f48565b34801561046c57600080fd5b50610475610f4e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104af578181015183820152602001610497565b50505050905090810190601f1680156104dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104f657600080fd5b50610439611003565b34801561050b57600080fd5b50610514611009565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561054957600080fd5b506105836004803603604081101561056057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611025565b604080519115158252519081900360200190f35b3480156105a357600080fd5b50610439611099565b3480156105b857600080fd5b5061051461109f565b3480156105cd57600080fd5b506105ed600480360360208110156105e457600080fd5b503515156110b7565b005b3480156105fb57600080fd5b50610439611172565b34801561061057600080fd5b506105ed6004803603602081101561062757600080fd5b50351515611178565b34801561063c57600080fd5b506105836004803603606081101561065357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611245565b34801561068c57600080fd5b50610514611378565b3480156106a157600080fd5b506105ed600480360360208110156106b857600080fd5b5035611394565b3480156106cb57600080fd5b5061043961141c565b3480156106e057600080fd5b50610583600480360360208110156106f757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114ba565b34801561072057600080fd5b506107296114e3565b6040805160ff9092168252519081900360200190f35b34801561074b57600080fd5b506105ed6004803603602081101561076257600080fd5b503515156114ec565b34801561077757600080fd5b506105836004803603604081101561078e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356115bb565b3480156107bd57600080fd5b506105ed600480360360808110156107d457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201358116916060013516611668565b34801561081557600080fd5b506104396118f7565b34801561082a57600080fd5b506105836004803603602081101561084157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118fd565b34801561086a57600080fd5b506105ed6004803603602081101561088157600080fd5b5035611ad7565b34801561089457600080fd5b50610439611b5f565b3480156108a957600080fd5b50610583611b65565b3480156108be57600080fd5b506105ed600480360360208110156108d557600080fd5b5035611b74565b3480156108e857600080fd5b506105ed611c03565b3480156108fd57600080fd5b506105ed6004803603602081101561091457600080fd5b50351515611d31565b34801561092957600080fd5b506104396004803603602081101561094057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611dfc565b34801561096957600080fd5b506105ed611e2f565b34801561097e57600080fd5b506105ed6004803603602081101561099557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611fdb565b3480156109be57600080fd5b50610439612037565b3480156109d357600080fd5b5061051461203d565b3480156109e857600080fd5b50610439612059565b3480156109fd57600080fd5b5061043961205f565b348015610a1257600080fd5b506105ed60048036036040811015610a2957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515612065565b348015610a5a57600080fd5b50610583612168565b348015610a6f57600080fd5b50610475612176565b348015610a8457600080fd5b506104396121f4565b348015610a9957600080fd5b506104396121fa565b348015610aae57600080fd5b506105ed60048036036040811015610ac557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515612200565b348015610af657600080fd5b506105ed60048036036020811015610b0d57600080fd5b50356125aa565b348015610b2057600080fd5b506105ed60048036036020811015610b3757600080fd5b50356125c1565b348015610b4a57600080fd5b50610439612649565b348015610b5f57600080fd5b5061058360048036036040811015610b7657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561264f565b348015610ba557600080fd5b5061051461276c565b348015610bba57600080fd5b5061058360048036036040811015610bd157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612788565b348015610c0057600080fd5b506105ed6004803603610120811015610c1857600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c08101359060e08101359061010001356127c1565b348015610c5c57600080fd5b50610439612938565b348015610c7157600080fd5b5061058361293e565b348015610c8657600080fd5b5061058360048036036020811015610c9d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612950565b348015610cc657600080fd5b506105ed60048036036020811015610cdd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612965565b348015610d0657600080fd5b506105146129fd565b348015610d1b57600080fd5b50610439612a19565b348015610d3057600080fd5b50610439612a1f565b348015610d4557600080fd5b50610583612a25565b348015610d5a57600080fd5b5061058360048036036020811015610d7157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612a2e565b348015610d9a57600080fd5b5061043960048036036040811015610db157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612a59565b348015610de257600080fd5b506105ed60048036036020811015610df957600080fd5b50351515612a91565b348015610e0e57600080fd5b50610439612b58565b348015610e2357600080fd5b50610583612b5e565b348015610e3857600080fd5b506105ed60048036036020811015610e4f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612b6f565b348015610e7857600080fd5b506105ed60048036036020811015610e8f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612c04565b348015610eb857600080fd5b506105ed60048036036020811015610ecf57600080fd5b50351515612ccf565b348015610ee457600080fd5b50610514612d98565b348015610ef957600080fd5b50610583612db4565b348015610f0e57600080fd5b5061058360048036036020811015610f2557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612dc4565b60085481565b60095481565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ff85780601f10610fcd57610100808354040283529160200191610ff8565b820191906000526020600020905b815481529060010190602001808311610fdb57829003601f168201915b505050505090505b90565b60175481565b600e5473ffffffffffffffffffffffffffffffffffffffff1681565b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60055481565b7304068da6c83afcfa0e13ba15a6696662335d5b7581565b6110c0336114ba565b6110c957600080fd5b60045460ff161515811515141561114157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b601f5490565b611181336114ba565b61118a57600080fd5b60045460ff640100000000909104161515811515141561120b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054911515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909216919091179055565b60008273ffffffffffffffffffffffffffffffffffffffff811661126857600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660009081526022602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461136157604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e63650000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8816600090815260228252838120338252909152919091205461132f918590612eac565b73ffffffffffffffffffffffffffffffffffffffff861660009081526022602090815260408083203384529091529020555b61136c858585612f5d565b50600195945050505050565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b61139d336114ba565b6113a657600080fd5b80600554141561141757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600555565b6020805460219091527f97ea4a93fb5e400340102ffa4fa5d31ef170c1e583d2cb268c876db385f80bb05461dead60009081527fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c05490926114b59290916114af91906114a9907ffffffffffffffffffffffffffffffffffffffffffc8fd8e16c81d465cc000000906132e6565b906132e6565b90612e6a565b905090565b60025473ffffffffffffffffffffffffffffffffffffffff82811661010090920416145b919050565b60025460ff1690565b6114f5336114ba565b6114fe57600080fd5b60045460ff65010000000000909104161515811515141561158057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6004805491151565010000000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff909216919091179055565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120546115f69083612def565b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b611671336114ba565b61167a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166116fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964205f6c69717569646974795265636569766572000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831661177e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e76616c6964205f7472656173757279526563656976657200000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821661180057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f496e76616c6964205f7269736b4672656556616c756552656365697665720000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661188257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c6964205f784c696265726f52656365697665720000000000000000604482015290519081900360640190fd5b600d805473ffffffffffffffffffffffffffffffffffffffff9586167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600e805494861694821694909417909355600f80549285169284169290921790915560108054919093169116179055565b601b5481565b6000611908336114ba565b61191157600080fd5b73ffffffffffffffffffffffffffffffffffffffff821630141561199657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420616c6c6f7720726563757365204c696265726f000000000000000000604482015290519081900360640190fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119ff57600080fd5b505afa158015611a13573d6000803e3d6000fd5b505050506040513d6020811015611a2957600080fd5b5051604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff85169163a9059cbb916044808201926020929091908290030181600087803b158015611aa457600080fd5b505af1158015611ab8573d6000803e3d6000fd5b505050506040513d6020811015611ace57600080fd5b50519392505050565b611ae0336114ba565b611ae957600080fd5b610708811115611b5a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f546f6f2068696768000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600655565b601c5481565b60045462010000900460ff1681565b611b7d336114ba565b611b8657600080fd5b683635c9adc5dea00000811015611bfe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f546f6f20736d616c6c0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600855565b611c0c33612dc4565b611c1557600080fd5b601e5460ff1615611c8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f54727920616761696e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b426007541115611cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f7420696e2074696d65000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000611d1a6402540be4006114af600554601f5461332890919063ffffffff16565b9050611d258161339b565b50611d2e611e2f565b50565b611d3a336114ba565b611d4357600080fd5b60045460ff63010000009091041615158115151415611dc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600480549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b6020805473ffffffffffffffffffffffffffffffffffffffff831660009081526021909252604082205461109391612e6a565b60005b600b54811015611d2e57600b8181548110611e4957fe5b6000918252602082200154604080517ffff6cae9000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263fff6cae99260048084019382900301818387803b158015611eb757600080fd5b505af1925050508015611ec8575060015b611fd357611ed461436e565b80611edf5750611fc9565b7f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c23836040518080602001828103825260278152602001806144716027913960400191505060405180910390a17f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c2383816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611f89578181015183820152602001611f71565b50505050905090810190601f168015611fb65780820380516001836020036101000a031916815260200191505b509250505060405180910390a150611fd3565b3d6000803e3d6000fd5b600101611e32565b611fe4336114ba565b611fed57600080fd5b604051479073ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015612032573d6000803e3d6000fd5b505050565b60195481565b600f5473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b60065481565b61206e336114ba565b61207757600080fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090205460ff161515811515141561211257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600454610100900460ff1681565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ff85780601f10610fcd57610100808354040283529160200191610ff8565b60155481565b60135481565b612209336114ba565b61221257600080fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604090205460ff16151581151514156122ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f56616c756520616c726561647920736574000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821580159190911790915561237a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612561565b600b546001106123eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5265717569726564203120706169720000000000000000000000000000000000604482015290519081900360640190fd5b60005b600b5481101561255f578273ffffffffffffffffffffffffffffffffffffffff16600b828154811061241c57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561255757600b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061247457fe5b600091825260209091200154600b805473ffffffffffffffffffffffffffffffffffffffff90921691839081106124a757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b8054806124fa57fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905561255f565b6001016123ee565b505b6040518115159073ffffffffffffffffffffffffffffffffffffffff8416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6125b3336114ba565b6125bc57600080fd5b600755565b6125ca336114ba565b6125d357600080fd5b80600954141561264457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600955565b601d5481565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548083106126bd5733600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091528120556126f9565b6126c781846132e6565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091529020555b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60125473ffffffffffffffffffffffffffffffffffffffff1681565b60008273ffffffffffffffffffffffffffffffffffffffff81166127ab57600080fd5b6127b6338585612f5d565b506001949350505050565b6127ca336114ba565b6127d357600080fd5b6013899055601588905560148790556016869055601785905560188490556019839055601a829055601b8190556128188561281288818c818f8e612def565b90612def565b601c81905550612847601b54612812601a54612812601954612812601854601c54612def90919063ffffffff16565b601d55601c5460fa116128bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f546f74616c206275792066656520746f6f206869676800000000000000000000604482015290519081900360640190fd5b6101f4601d541061292d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f74616c2073656c6c2066656520746f6f2068696768000000000000000000604482015290519081900360640190fd5b505050505050505050565b601a5481565b60045465010000000000900460ff1681565b600c6020526000908152604090205460ff1681565b61296e336114ba565b61297757600080fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835290517fdc84e3a4c83602050e3865df792a4e6800211a79ac60db94e703a820ce8929249281900390910190a150565b60105473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60145481565b60045460ff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152600a602052604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260226020908152604080832093909416825291909152205490565b612a9a336114ba565b612aa357600080fd5b60045460ff6101009091041615158115151415612b2157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b60165481565b600454640100000000900460ff1681565b612b78336114ba565b612b8157600080fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055815192835290517f8e4a23d6a5d81f013eca4bc92aeb9214ccafcaebd1f097c350c922d6e19122d59281900390910190a150565b612c0d336114ba565b612c1657600080fd5b600280547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835290517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639281900390910190a150565b612cd8336114ba565b612ce157600080fd5b60045460ff620100009091041615158115151415612d6057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6004805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60115473ffffffffffffffffffffffffffffffffffffffff1681565b6004546301000000900460ff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205460ff1690565b600082820183811015612e6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000612e6383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134c1565b60008184841115612f55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f1a578181015183820152602001612f02565b50505050905090810190601f168015612f475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a6020526040812054819060ff1680612fb8575073ffffffffffffffffffffffffffffffffffffffff84166000908152600a602052604090205460ff165b60045490915060ff1680612fc95750805b61303457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f54726164696e67206e6f74207374617274656400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600c602052604090205460ff168015613067575080155b156130dd576008548311156130dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4572726f7220616d6f756e740000000000000000000000000000000000000000604482015290519081900360640190fd5b601e5460ff16156130fb576130f3858585613540565b915050612e63565b60006131126020548561332890919063ffffffff16565b905061311c613636565b15613129576131296136a3565b73ffffffffffffffffffffffffffffffffffffffff861660009081526021602052604090205461315990826132e6565b73ffffffffffffffffffffffffffffffffffffffff871660009081526021602052604081209190915561318c878761393d565b61319657816131a1565b6131a1878784613a1c565b73ffffffffffffffffffffffffffffffffffffffff87166000908152602160205260409020549091506131d49082612def565b73ffffffffffffffffffffffffffffffffffffffff8088166000818152602160209081526040909120939093559154908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613234908590612e6a565b60408051918252519081900360200190a361324d613b06565b80156132605750600454610100900460ff165b8015613292575073ffffffffffffffffffffffffffffffffffffffff87166000908152600c602052604090205460ff16155b80156132c4575073ffffffffffffffffffffffffffffffffffffffff86166000908152600c602052604090205460ff16155b156132d9576132d1613b0f565b6132d9611e2f565b5060019695505050505050565b6000612e6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612eac565b60008261333757506000611093565b8282028284828161334457fe5b0414612e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806144506021913960400191505060405180910390fd5b600042826133e557601f54604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050601f546114de565b600083121561340757601f546133ff9060008590036132e6565b601f55613418565b601f546134149084612def565b601f555b601f546fffffffffffffffffffffffffffffffff1015613447576fffffffffffffffffffffffffffffffff601f555b601f54613475907ffffffffffffffffffffffffffffffffffffffffffc8fd8e16c81d465cc00000090612e6a565b60209081556006548201600755601f54604080519182525183927f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2928290030190a25050601f54919050565b6000818361352a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612f1a578181015183820152602001612f02565b50600083858161353657fe5b0495945050505050565b6000806135586020548461332890919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff861660009081526021602052604090205490915061358b90826132e6565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526021602052604080822093909355908616815220546135c79082612def565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526021602090815260409182902094909455805187815290519193928916927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3506001949350505050565b336000908152600c602052604081205460ff161580156136595750601e5460ff16155b801561366757506000600954115b801561368957506000613687601d54601c54612def90919063ffffffff16565b115b80156114b5575060095461369c30611dfc565b1015905090565b601e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055601d54601c546000916136e19190612def565b60045490915060009065010000000000900460ff16613701576000613705565b6013545b6020805430600090815260219092526040822054929350909161372791612e6a565b90506000613744846114af61373d866002613328565b8590613328565b90506000613772856114af61376b601a54612812600260165461332890919063ffffffff16565b8690613328565b905060006137a0866114af613799601954612812600260155461332890919063ffffffff16565b8790613328565b905060006137ce876114af6137c7601b54612812600260175461332890919063ffffffff16565b8890613328565b905060006137e4826114a9858188818c8c6132e6565b905084156137f5576137f585613b4b565b831561380a576138083061dead86613540565b505b821561387057600454640100000000900460ff161561384c57600f5461384790849073ffffffffffffffffffffffffffffffffffffffff16613d91565b613870565b600f5461387090849073ffffffffffffffffffffffffffffffffffffffff16613fb6565b811561389a5760105461389a90839073ffffffffffffffffffffffffffffffffffffffff16613fb6565b80156138c457600e546138c490829073ffffffffffffffffffffffffffffffffffffffff16613d91565b60408051878152602081018790528082018590526060810183905290517fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9181900360800190a15050601e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604081205460ff1680613996575073ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090205460ff165b156139a357506000611093565b60045462010000900460ff16156139bc57506001611093565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600c602052604090205460ff1680613a15575073ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604090205460ff165b9050611093565b601c5473ffffffffffffffffffffffffffffffffffffffff83166000908152600c602052604081205490919060ff1615613a555750601d545b6000613a676103e86114af8685613328565b30600090815260216020526040902054909150613a849082612def565b30600081815260216020908152604090912092909255905473ffffffffffffffffffffffffffffffffffffffff8816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613ae1908590612e6a565b60408051918252519081900360200190a3613afc84826132e6565b9695505050505050565b60075442101590565b601e5460ff16613b49576000613b3b6402540be4006114af600554601f5461332890919063ffffffff16565b9050613b468161339b565b50505b565b6000613b58826002612e6a565b90506000613b6683836132e6565b6004549091506301000000900460ff1615613be55747613b868330613d91565b6000613b9247836132e6565b9050613b9e83826141b5565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050612032565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000917304068da6c83afcfa0e13ba15a6696662335d5b75916370a0823191602480820192602092909190829003018186803b158015613c5357600080fd5b505afa158015613c67573d6000803e3d6000fd5b505050506040513d6020811015613c7d57600080fd5b50519050613c8b8330613fb6565b6000613d3e827304068da6c83afcfa0e13ba15a6696662335d5b7573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613d0c57600080fd5b505afa158015613d20573d6000803e3d6000fd5b505050506040513d6020811015613d3657600080fd5b5051906132e6565b9050613d4a8382614281565b604080518581526020810183905280820185905290517f42563dfd1c3e559df99e21ffc35d82ea7e18a20669e5d3a6d69a4e63af3200e09181900360600190a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613dc057fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613e3a57600080fd5b505afa158015613e4e573d6000803e3d6000fd5b505050506040513d6020811015613e6457600080fd5b5051815182906001908110613e7557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613f70578181015183820152602001613f58565b505050509050019650505050505050600060405180830381600087803b158015613f9957600080fd5b505af1158015613fad573d6000803e3d6000fd5b50505050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110613fe757fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561406157600080fd5b505afa158015614075573d6000803e3d6000fd5b505050506040513d602081101561408b57600080fd5b505181518290600190811061409c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507304068da6c83afcfa0e13ba15a6696662335d5b75816002815181106140f857fe5b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092018101919091526011546040517f5c11d795000000000000000000000000000000000000000000000000000000008152600481018781526000602483018190528786166064840152426084840181905260a060448501908152885160a486015288519590971696635c11d795968b9693958a958c9590939260c49092019187810191028083838b8315613f70578181015183820152602001613f58565b601154600d54604080517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015273ffffffffffffffffffffffffffffffffffffffff92831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b15801561425057600080fd5b505af1158015614264573d6000803e3d6000fd5b50505050506040513d606081101561427b57600080fd5b50505050565b601154600d54604080517fe8e337000000000000000000000000000000000000000000000000000000000081523060048201527304068da6c83afcfa0e13ba15a6696662335d5b756024820152604481018690526064810185905260006084820181905260a4820181905273ffffffffffffffffffffffffffffffffffffffff93841660c48301524260e48301529151929093169263e8e33700926101048083019360609383900390910190829087803b15801561433e57600080fd5b505af1158015614352573d6000803e3d6000fd5b505050506040513d606081101561427b57600080fd5b60e01c90565b600060443d101561437e57611000565b600481823e6308c379a06143928251614368565b1461439c57611000565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff81602484011181841117156143ea5750505050611000565b828401925082519150808211156144045750505050611000565b503d8301602082840101111561441c57505050611000565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d616e75616c53796e6328293a205f6d616b657250616972732e73796e632829204661696c6564a2646970667358221220d3bf1dbef9d0fbdff8215978209d74d09a236613d6706a59439d28c6dae7cf0864736f6c63430007060033

Deployed Bytecode

0x6080604052600436106104185760003560e01c80638102c57011610228578063b62496f511610128578063e15beb80116100bb578063f2fde38b1161008a578063f887ea401161006f578063f887ea4014610ed8578063fd06e24614610eed578063fe9fbb8014610f025761041f565b8063f2fde38b14610e6c578063f3a54f2c14610eac5761041f565b8063e15beb8014610dd6578063e71dc3f514610e02578063e98ca27614610e17578063f0b37c0414610e2c5761041f565b8063cc32d176116100f7578063cc32d17614610d24578063d1fce26414610d39578063d439979014610d4e578063dd62ed3e14610d8e5761041f565b8063b62496f514610c7a578063b6a5d7de14610cba578063b9a6a13c14610cfa578063bc7e68a314610d0f5761041f565b80639ae7372d116101bb578063a8aa1b311161018a578063add5df661161016f578063add5df6614610bf4578063ae74df3314610c50578063af9b800e14610c655761041f565b8063a8aa1b3114610b99578063a9059cbb14610bae5761041f565b80639ae7372d14610aea5780639d0014b114610b145780639d9241ec14610b3e578063a457c2d714610b535761041f565b806395d89b41116101f757806395d89b4114610a635780639763eec414610a7857806398118cb414610a8d5780639a7a23d614610aa25761041f565b80638102c570146109dc57806389375abf146109f15780638ebfc79614610a065780639079f93214610a4e5761041f565b8063313ce567116103335780635abe6711116102c657806370a0823111610295578063764d72bf1161027a578063764d72bf146109725780637ac82927146109b25780637d4b5017146109c75761041f565b806370a082311461091d578063753d02a11461095d5761041f565b80635abe67111461089d5780635c38ffe2146108b257806361a9d1b1146108dc57806369511136146108f15761041f565b806343e1f26b1161030257806343e1f26b146108095780634460d3cf1461081e5780634cd9ddf21461085e57806359b107b9146108885761041f565b8063313ce567146107145780633643f1d51461073f578063395093511461076b5780633c8e556d146107b15761041f565b80631276089b116103ab578063264d26dd1161037a578063264d26dd14610680578063266579f6146106955780632b112e49146106bf5780632f54bf6e146106d45761041f565b80631276089b146105c157806318160ddd146105ef5780631c37b3151461060457806323b872dd146106305761041f565b806308b1fd8f116103e757806308b1fd8f146104ff578063095ea7b31461053d5780630af083141461059757806311eac855146105ac5761041f565b806302259e9e146104245780630445b6671461044b57806306fdde03146104605780630719b36d146104ea5761041f565b3661041f57005b600080fd5b34801561043057600080fd5b50610439610f42565b60408051918252519081900360200190f35b34801561045757600080fd5b50610439610f48565b34801561046c57600080fd5b50610475610f4e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104af578181015183820152602001610497565b50505050905090810190601f1680156104dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104f657600080fd5b50610439611003565b34801561050b57600080fd5b50610514611009565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561054957600080fd5b506105836004803603604081101561056057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611025565b604080519115158252519081900360200190f35b3480156105a357600080fd5b50610439611099565b3480156105b857600080fd5b5061051461109f565b3480156105cd57600080fd5b506105ed600480360360208110156105e457600080fd5b503515156110b7565b005b3480156105fb57600080fd5b50610439611172565b34801561061057600080fd5b506105ed6004803603602081101561062757600080fd5b50351515611178565b34801561063c57600080fd5b506105836004803603606081101561065357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611245565b34801561068c57600080fd5b50610514611378565b3480156106a157600080fd5b506105ed600480360360208110156106b857600080fd5b5035611394565b3480156106cb57600080fd5b5061043961141c565b3480156106e057600080fd5b50610583600480360360208110156106f757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114ba565b34801561072057600080fd5b506107296114e3565b6040805160ff9092168252519081900360200190f35b34801561074b57600080fd5b506105ed6004803603602081101561076257600080fd5b503515156114ec565b34801561077757600080fd5b506105836004803603604081101561078e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356115bb565b3480156107bd57600080fd5b506105ed600480360360808110156107d457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201358116916060013516611668565b34801561081557600080fd5b506104396118f7565b34801561082a57600080fd5b506105836004803603602081101561084157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118fd565b34801561086a57600080fd5b506105ed6004803603602081101561088157600080fd5b5035611ad7565b34801561089457600080fd5b50610439611b5f565b3480156108a957600080fd5b50610583611b65565b3480156108be57600080fd5b506105ed600480360360208110156108d557600080fd5b5035611b74565b3480156108e857600080fd5b506105ed611c03565b3480156108fd57600080fd5b506105ed6004803603602081101561091457600080fd5b50351515611d31565b34801561092957600080fd5b506104396004803603602081101561094057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611dfc565b34801561096957600080fd5b506105ed611e2f565b34801561097e57600080fd5b506105ed6004803603602081101561099557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611fdb565b3480156109be57600080fd5b50610439612037565b3480156109d357600080fd5b5061051461203d565b3480156109e857600080fd5b50610439612059565b3480156109fd57600080fd5b5061043961205f565b348015610a1257600080fd5b506105ed60048036036040811015610a2957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515612065565b348015610a5a57600080fd5b50610583612168565b348015610a6f57600080fd5b50610475612176565b348015610a8457600080fd5b506104396121f4565b348015610a9957600080fd5b506104396121fa565b348015610aae57600080fd5b506105ed60048036036040811015610ac557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515612200565b348015610af657600080fd5b506105ed60048036036020811015610b0d57600080fd5b50356125aa565b348015610b2057600080fd5b506105ed60048036036020811015610b3757600080fd5b50356125c1565b348015610b4a57600080fd5b50610439612649565b348015610b5f57600080fd5b5061058360048036036040811015610b7657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561264f565b348015610ba557600080fd5b5061051461276c565b348015610bba57600080fd5b5061058360048036036040811015610bd157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612788565b348015610c0057600080fd5b506105ed6004803603610120811015610c1857600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c08101359060e08101359061010001356127c1565b348015610c5c57600080fd5b50610439612938565b348015610c7157600080fd5b5061058361293e565b348015610c8657600080fd5b5061058360048036036020811015610c9d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612950565b348015610cc657600080fd5b506105ed60048036036020811015610cdd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612965565b348015610d0657600080fd5b506105146129fd565b348015610d1b57600080fd5b50610439612a19565b348015610d3057600080fd5b50610439612a1f565b348015610d4557600080fd5b50610583612a25565b348015610d5a57600080fd5b5061058360048036036020811015610d7157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612a2e565b348015610d9a57600080fd5b5061043960048036036040811015610db157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612a59565b348015610de257600080fd5b506105ed60048036036020811015610df957600080fd5b50351515612a91565b348015610e0e57600080fd5b50610439612b58565b348015610e2357600080fd5b50610583612b5e565b348015610e3857600080fd5b506105ed60048036036020811015610e4f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612b6f565b348015610e7857600080fd5b506105ed60048036036020811015610e8f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612c04565b348015610eb857600080fd5b506105ed60048036036020811015610ecf57600080fd5b50351515612ccf565b348015610ee457600080fd5b50610514612d98565b348015610ef957600080fd5b50610583612db4565b348015610f0e57600080fd5b5061058360048036036020811015610f2557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612dc4565b60085481565b60095481565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ff85780601f10610fcd57610100808354040283529160200191610ff8565b820191906000526020600020905b815481529060010190602001808311610fdb57829003601f168201915b505050505090505b90565b60175481565b600e5473ffffffffffffffffffffffffffffffffffffffff1681565b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60055481565b7304068da6c83afcfa0e13ba15a6696662335d5b7581565b6110c0336114ba565b6110c957600080fd5b60045460ff161515811515141561114157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b601f5490565b611181336114ba565b61118a57600080fd5b60045460ff640100000000909104161515811515141561120b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054911515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909216919091179055565b60008273ffffffffffffffffffffffffffffffffffffffff811661126857600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660009081526022602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461136157604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e63650000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8816600090815260228252838120338252909152919091205461132f918590612eac565b73ffffffffffffffffffffffffffffffffffffffff861660009081526022602090815260408083203384529091529020555b61136c858585612f5d565b50600195945050505050565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b61139d336114ba565b6113a657600080fd5b80600554141561141757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600555565b6020805460219091527f97ea4a93fb5e400340102ffa4fa5d31ef170c1e583d2cb268c876db385f80bb05461dead60009081527fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c05490926114b59290916114af91906114a9907ffffffffffffffffffffffffffffffffffffffffffc8fd8e16c81d465cc000000906132e6565b906132e6565b90612e6a565b905090565b60025473ffffffffffffffffffffffffffffffffffffffff82811661010090920416145b919050565b60025460ff1690565b6114f5336114ba565b6114fe57600080fd5b60045460ff65010000000000909104161515811515141561158057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6004805491151565010000000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff909216919091179055565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120546115f69083612def565b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b611671336114ba565b61167a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166116fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964205f6c69717569646974795265636569766572000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831661177e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e76616c6964205f7472656173757279526563656976657200000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821661180057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f496e76616c6964205f7269736b4672656556616c756552656365697665720000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661188257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c6964205f784c696265726f52656365697665720000000000000000604482015290519081900360640190fd5b600d805473ffffffffffffffffffffffffffffffffffffffff9586167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600e805494861694821694909417909355600f80549285169284169290921790915560108054919093169116179055565b601b5481565b6000611908336114ba565b61191157600080fd5b73ffffffffffffffffffffffffffffffffffffffff821630141561199657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420616c6c6f7720726563757365204c696265726f000000000000000000604482015290519081900360640190fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119ff57600080fd5b505afa158015611a13573d6000803e3d6000fd5b505050506040513d6020811015611a2957600080fd5b5051604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff85169163a9059cbb916044808201926020929091908290030181600087803b158015611aa457600080fd5b505af1158015611ab8573d6000803e3d6000fd5b505050506040513d6020811015611ace57600080fd5b50519392505050565b611ae0336114ba565b611ae957600080fd5b610708811115611b5a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f546f6f2068696768000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600655565b601c5481565b60045462010000900460ff1681565b611b7d336114ba565b611b8657600080fd5b683635c9adc5dea00000811015611bfe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f546f6f20736d616c6c0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600855565b611c0c33612dc4565b611c1557600080fd5b601e5460ff1615611c8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f54727920616761696e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b426007541115611cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f7420696e2074696d65000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000611d1a6402540be4006114af600554601f5461332890919063ffffffff16565b9050611d258161339b565b50611d2e611e2f565b50565b611d3a336114ba565b611d4357600080fd5b60045460ff63010000009091041615158115151415611dc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600480549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b6020805473ffffffffffffffffffffffffffffffffffffffff831660009081526021909252604082205461109391612e6a565b60005b600b54811015611d2e57600b8181548110611e4957fe5b6000918252602082200154604080517ffff6cae9000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263fff6cae99260048084019382900301818387803b158015611eb757600080fd5b505af1925050508015611ec8575060015b611fd357611ed461436e565b80611edf5750611fc9565b7f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c23836040518080602001828103825260278152602001806144716027913960400191505060405180910390a17f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c2383816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611f89578181015183820152602001611f71565b50505050905090810190601f168015611fb65780820380516001836020036101000a031916815260200191505b509250505060405180910390a150611fd3565b3d6000803e3d6000fd5b600101611e32565b611fe4336114ba565b611fed57600080fd5b604051479073ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015612032573d6000803e3d6000fd5b505050565b60195481565b600f5473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b60065481565b61206e336114ba565b61207757600080fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090205460ff161515811515141561211257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600454610100900460ff1681565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ff85780601f10610fcd57610100808354040283529160200191610ff8565b60155481565b60135481565b612209336114ba565b61221257600080fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604090205460ff16151581151514156122ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f56616c756520616c726561647920736574000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821580159190911790915561237a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612561565b600b546001106123eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5265717569726564203120706169720000000000000000000000000000000000604482015290519081900360640190fd5b60005b600b5481101561255f578273ffffffffffffffffffffffffffffffffffffffff16600b828154811061241c57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561255757600b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061247457fe5b600091825260209091200154600b805473ffffffffffffffffffffffffffffffffffffffff90921691839081106124a757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b8054806124fa57fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905561255f565b6001016123ee565b505b6040518115159073ffffffffffffffffffffffffffffffffffffffff8416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6125b3336114ba565b6125bc57600080fd5b600755565b6125ca336114ba565b6125d357600080fd5b80600954141561264457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600955565b601d5481565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548083106126bd5733600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091528120556126f9565b6126c781846132e6565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091529020555b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60125473ffffffffffffffffffffffffffffffffffffffff1681565b60008273ffffffffffffffffffffffffffffffffffffffff81166127ab57600080fd5b6127b6338585612f5d565b506001949350505050565b6127ca336114ba565b6127d357600080fd5b6013899055601588905560148790556016869055601785905560188490556019839055601a829055601b8190556128188561281288818c818f8e612def565b90612def565b601c81905550612847601b54612812601a54612812601954612812601854601c54612def90919063ffffffff16565b601d55601c5460fa116128bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f546f74616c206275792066656520746f6f206869676800000000000000000000604482015290519081900360640190fd5b6101f4601d541061292d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f74616c2073656c6c2066656520746f6f2068696768000000000000000000604482015290519081900360640190fd5b505050505050505050565b601a5481565b60045465010000000000900460ff1681565b600c6020526000908152604090205460ff1681565b61296e336114ba565b61297757600080fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835290517fdc84e3a4c83602050e3865df792a4e6800211a79ac60db94e703a820ce8929249281900390910190a150565b60105473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60145481565b60045460ff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152600a602052604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260226020908152604080832093909416825291909152205490565b612a9a336114ba565b612aa357600080fd5b60045460ff6101009091041615158115151415612b2157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b60165481565b600454640100000000900460ff1681565b612b78336114ba565b612b8157600080fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055815192835290517f8e4a23d6a5d81f013eca4bc92aeb9214ccafcaebd1f097c350c922d6e19122d59281900390910190a150565b612c0d336114ba565b612c1657600080fd5b600280547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835290517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639281900390910190a150565b612cd8336114ba565b612ce157600080fd5b60045460ff620100009091041615158115151415612d6057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6004805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60115473ffffffffffffffffffffffffffffffffffffffff1681565b6004546301000000900460ff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205460ff1690565b600082820183811015612e6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000612e6383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134c1565b60008184841115612f55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f1a578181015183820152602001612f02565b50505050905090810190601f168015612f475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a6020526040812054819060ff1680612fb8575073ffffffffffffffffffffffffffffffffffffffff84166000908152600a602052604090205460ff165b60045490915060ff1680612fc95750805b61303457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f54726164696e67206e6f74207374617274656400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600c602052604090205460ff168015613067575080155b156130dd576008548311156130dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4572726f7220616d6f756e740000000000000000000000000000000000000000604482015290519081900360640190fd5b601e5460ff16156130fb576130f3858585613540565b915050612e63565b60006131126020548561332890919063ffffffff16565b905061311c613636565b15613129576131296136a3565b73ffffffffffffffffffffffffffffffffffffffff861660009081526021602052604090205461315990826132e6565b73ffffffffffffffffffffffffffffffffffffffff871660009081526021602052604081209190915561318c878761393d565b61319657816131a1565b6131a1878784613a1c565b73ffffffffffffffffffffffffffffffffffffffff87166000908152602160205260409020549091506131d49082612def565b73ffffffffffffffffffffffffffffffffffffffff8088166000818152602160209081526040909120939093559154908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613234908590612e6a565b60408051918252519081900360200190a361324d613b06565b80156132605750600454610100900460ff165b8015613292575073ffffffffffffffffffffffffffffffffffffffff87166000908152600c602052604090205460ff16155b80156132c4575073ffffffffffffffffffffffffffffffffffffffff86166000908152600c602052604090205460ff16155b156132d9576132d1613b0f565b6132d9611e2f565b5060019695505050505050565b6000612e6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612eac565b60008261333757506000611093565b8282028284828161334457fe5b0414612e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806144506021913960400191505060405180910390fd5b600042826133e557601f54604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050601f546114de565b600083121561340757601f546133ff9060008590036132e6565b601f55613418565b601f546134149084612def565b601f555b601f546fffffffffffffffffffffffffffffffff1015613447576fffffffffffffffffffffffffffffffff601f555b601f54613475907ffffffffffffffffffffffffffffffffffffffffffc8fd8e16c81d465cc00000090612e6a565b60209081556006548201600755601f54604080519182525183927f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2928290030190a25050601f54919050565b6000818361352a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612f1a578181015183820152602001612f02565b50600083858161353657fe5b0495945050505050565b6000806135586020548461332890919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff861660009081526021602052604090205490915061358b90826132e6565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526021602052604080822093909355908616815220546135c79082612def565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526021602090815260409182902094909455805187815290519193928916927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3506001949350505050565b336000908152600c602052604081205460ff161580156136595750601e5460ff16155b801561366757506000600954115b801561368957506000613687601d54601c54612def90919063ffffffff16565b115b80156114b5575060095461369c30611dfc565b1015905090565b601e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055601d54601c546000916136e19190612def565b60045490915060009065010000000000900460ff16613701576000613705565b6013545b6020805430600090815260219092526040822054929350909161372791612e6a565b90506000613744846114af61373d866002613328565b8590613328565b90506000613772856114af61376b601a54612812600260165461332890919063ffffffff16565b8690613328565b905060006137a0866114af613799601954612812600260155461332890919063ffffffff16565b8790613328565b905060006137ce876114af6137c7601b54612812600260175461332890919063ffffffff16565b8890613328565b905060006137e4826114a9858188818c8c6132e6565b905084156137f5576137f585613b4b565b831561380a576138083061dead86613540565b505b821561387057600454640100000000900460ff161561384c57600f5461384790849073ffffffffffffffffffffffffffffffffffffffff16613d91565b613870565b600f5461387090849073ffffffffffffffffffffffffffffffffffffffff16613fb6565b811561389a5760105461389a90839073ffffffffffffffffffffffffffffffffffffffff16613fb6565b80156138c457600e546138c490829073ffffffffffffffffffffffffffffffffffffffff16613d91565b60408051878152602081018790528082018590526060810183905290517fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9181900360800190a15050601e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604081205460ff1680613996575073ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090205460ff165b156139a357506000611093565b60045462010000900460ff16156139bc57506001611093565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600c602052604090205460ff1680613a15575073ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604090205460ff165b9050611093565b601c5473ffffffffffffffffffffffffffffffffffffffff83166000908152600c602052604081205490919060ff1615613a555750601d545b6000613a676103e86114af8685613328565b30600090815260216020526040902054909150613a849082612def565b30600081815260216020908152604090912092909255905473ffffffffffffffffffffffffffffffffffffffff8816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613ae1908590612e6a565b60408051918252519081900360200190a3613afc84826132e6565b9695505050505050565b60075442101590565b601e5460ff16613b49576000613b3b6402540be4006114af600554601f5461332890919063ffffffff16565b9050613b468161339b565b50505b565b6000613b58826002612e6a565b90506000613b6683836132e6565b6004549091506301000000900460ff1615613be55747613b868330613d91565b6000613b9247836132e6565b9050613b9e83826141b5565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050612032565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000917304068da6c83afcfa0e13ba15a6696662335d5b75916370a0823191602480820192602092909190829003018186803b158015613c5357600080fd5b505afa158015613c67573d6000803e3d6000fd5b505050506040513d6020811015613c7d57600080fd5b50519050613c8b8330613fb6565b6000613d3e827304068da6c83afcfa0e13ba15a6696662335d5b7573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613d0c57600080fd5b505afa158015613d20573d6000803e3d6000fd5b505050506040513d6020811015613d3657600080fd5b5051906132e6565b9050613d4a8382614281565b604080518581526020810183905280820185905290517f42563dfd1c3e559df99e21ffc35d82ea7e18a20669e5d3a6d69a4e63af3200e09181900360600190a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613dc057fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613e3a57600080fd5b505afa158015613e4e573d6000803e3d6000fd5b505050506040513d6020811015613e6457600080fd5b5051815182906001908110613e7557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613f70578181015183820152602001613f58565b505050509050019650505050505050600060405180830381600087803b158015613f9957600080fd5b505af1158015613fad573d6000803e3d6000fd5b50505050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110613fe757fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561406157600080fd5b505afa158015614075573d6000803e3d6000fd5b505050506040513d602081101561408b57600080fd5b505181518290600190811061409c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507304068da6c83afcfa0e13ba15a6696662335d5b75816002815181106140f857fe5b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092018101919091526011546040517f5c11d795000000000000000000000000000000000000000000000000000000008152600481018781526000602483018190528786166064840152426084840181905260a060448501908152885160a486015288519590971696635c11d795968b9693958a958c9590939260c49092019187810191028083838b8315613f70578181015183820152602001613f58565b601154600d54604080517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015273ffffffffffffffffffffffffffffffffffffffff92831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b15801561425057600080fd5b505af1158015614264573d6000803e3d6000fd5b50505050506040513d606081101561427b57600080fd5b50505050565b601154600d54604080517fe8e337000000000000000000000000000000000000000000000000000000000081523060048201527304068da6c83afcfa0e13ba15a6696662335d5b756024820152604481018690526064810185905260006084820181905260a4820181905273ffffffffffffffffffffffffffffffffffffffff93841660c48301524260e48301529151929093169263e8e33700926101048083019360609383900390910190829087803b15801561433e57600080fd5b505af1158015614352573d6000803e3d6000fd5b505050506040513d606081101561427b57600080fd5b60e01c90565b600060443d101561437e57611000565b600481823e6308c379a06143928251614368565b1461439c57611000565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff81602484011181841117156143ea5750505050611000565b828401925082519150808211156144045750505050611000565b503d8301602082840101111561441c57505050611000565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d616e75616c53796e6328293a205f6d616b657250616972732e73796e632829204661696c6564a2646970667358221220d3bf1dbef9d0fbdff8215978209d74d09a236613d6706a59439d28c6dae7cf0864736f6c63430007060033

Deployed Bytecode Sourcemap

7646:21683:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8177:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8244:46;;;;;;;;;;;;;:::i;5721:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9961:32;;;;;;;;;;;;;:::i;9497:76::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22038:220;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22038:220:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8030:36;;;;;;;;;;;;;:::i;9322:78::-;;;;;;;;;;;;;:::i;24282:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24282:199:0;;;;:::i;:::-;;12284:102;;;;;;;;;;;;;:::i;28355:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28355:148:0;;;;:::i;16066:419::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16066:419:0;;;;;;;;;;;;;;;;;;:::i;9413:77::-;;;;;;;;;;;;;:::i;27626:172::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27626:172:0;;:::i;13579:170::-;;;;;;;;;;;;;:::i;1000:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1000:103:0;;;;:::i;5907:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28001:172;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28001:172:0;;;;:::i;21652:378::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21652:378:0;;;;;;;;;:::i;24845:738::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24845:738:0;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10131:38::-;;;;;;;;;;;;;:::i;26920:321::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26920:321:0;;;;:::i;27420:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27420:198:0;;:::i;10176:108::-;;;;;;;;;;;;;:::i;7859:40::-;;;;;;;;;;;;;:::i;28625:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28625:183:0;;:::i;23222:315::-;;;;;;;;;;;;;:::i;28181:166::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28181:166:0;;;;:::i;12554:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12554:136:0;;;;:::i;13757:358::-;;;;;;;;;;;;;:::i;26742:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26742:170:0;;;;:::i;10047:35::-;;;;;;;;;;;;;:::i;9580:81::-;;;;;;;;;;;;;:::i;10000:40::-;;;;;;;;;;;;;:::i;8073:36::-;;;;;;;;;;;;;:::i;24489:180::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24489:180:0;;;;;;;;;;;:::i;7822:30::-;;;;;;;;;;;;;:::i;5812:87::-;;;;;;;;;;;;;:::i;9888:29::-;;;;;;;;;;;;;:::i;9811:32::-;;;;;;;;;;;;;:::i;23545:729::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23545:729:0;;;;;;;;;;;:::i;28511:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28511:106:0;;:::i;24677:160::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24677:160:0;;:::i;10291:135::-;;;;;;;;;;;;;:::i;21072:572::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21072:572:0;;;;;;;;;:::i;9783:19::-;;;;;;;;;;;;;:::i;14123:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14123:173:0;;;;;;;;;:::i;25591:1143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25591:1143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10089:35::-;;;;;;;;;;;;;:::i;7984:37::-;;;;;;;;;;;;;:::i;8379:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8379:58:0;;;;:::i;729:125::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;729:125:0;;;;:::i;9668:75::-;;;;;;;;;;;;;:::i;8116:54::-;;;;;;;;;;;;;:::i;9850:31::-;;;;;;;;;;;;;:::i;7768:47::-;;;;;;;;;;;;;:::i;12698:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12698:113:0;;;;:::i;12394:152::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12394:152:0;;;;;;;;;;;:::i;27249:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27249:163:0;;;;:::i;9924:30::-;;;;;;;;;;;;;:::i;7948:29::-;;;;;;;;;;;;;:::i;862:130::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;862:130:0;;;;:::i;1226:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1226:173:0;;;;:::i;27806:187::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27806:187:0;;;;:::i;9752:24::-;;;;;;;;;;;;;:::i;7906:35::-;;;;;;;;;;;;;:::i;1111:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1111:107:0;;;;:::i;8177:60::-;;;;:::o;8244:46::-;;;;:::o;5721:83::-;5791:5;5784:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5758:13;;5784:12;;5791:5;;5784:12;;5791:5;5784:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5721:83;;:::o;9961:32::-;;;;:::o;9497:76::-;;;;;;:::o;22038:220::-;22148:10;22114:4;22130:29;;;:17;:29;;;;;;;;;:38;;;;;;;;;;;:46;;;22192:36;;;;;;;22114:4;;22130:38;;22148:10;;22192:36;;;;;;;;-1:-1:-1;22246:4:0;22038:220;;;;;:::o;8030:36::-;;;;:::o;9322:78::-;9358:42;9322:78;:::o;24282:199::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;24373:27:::1;::::0;::::1;;:37;;::::0;::::1;;;;24365:61;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24437:27;:36:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;24282:199::o;12284:102::-;12366:12;;12284:102;:::o;28355:148::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;28429:10:::1;::::0;::::1;::::0;;;::::1;;:20;;::::0;::::1;;;;28421:44;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28476:10;:19:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;28355:148::o;16066:419::-;16175:4;16162:2;10607:18;;;10599:27;;;;;;16196:23:::1;::::0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;16220:10:::1;16196:35:::0;;;;;;;;16243:2:::1;16196:50;16192:221;;16301:100;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;;:23:::1;::::0;::::1;-1:-1:-1::0;16301:23:0;;;:17:::1;:23:::0;;;;;16339:10:::1;16301:63:::0;;;;;;;;;;:100:::1;::::0;16369:5;;16301:67:::1;:100::i;:::-;16263:23;::::0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;16287:10:::1;16263:35:::0;;;;;;;:138;16192:221:::1;16425:30;16439:4;16445:2;16449:5;16425:13;:30::i;:::-;-1:-1:-1::0;16473:4:0::1;::::0;16066:419;-1:-1:-1;;;;;16066:419:0:o;9413:77::-;;;;;;:::o;27626:172::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;27725:12:::1;27710:11;;:27;;27702:51;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27764:11;:26:::0;27626:172::o;13579:170::-;13724:16;;;13699:12;:18;;;;;9192:42;13632:7;13675:18;;;;;13632:7;;13659:82;;13724:16;;13660:58;;13699:18;13660:34;;9041:54;;13660:14;:34::i;:::-;:38;;:58::i;:::-;13659:64;;:82::i;:::-;13652:89;;13579:170;:::o;1000:103::-;1090:5;;;1079:16;;;1090:5;;;;;1079:16;1000:103;;;;:::o;5907:83::-;5973:9;;;;5907:83;:::o;28001:172::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;28083:18:::1;::::0;::::1;::::0;;;::::1;;:28;;::::0;::::1;;;;28075:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28138:18;:27:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;28001:172::o;21652:378::-;21809:10;21734:4;21791:29;;;:17;:29;;;;;;;;;:58;;;;;;;;;;:74;;21854:10;21791:62;:74::i;:::-;21768:10;21750:29;;;;:17;:29;;;;;;;;;:38;;;;;;;;;;;;:115;;;21881:119;;;;;;21750:38;;21881:119;;;;;;;;;;;-1:-1:-1;22018:4:0;21652:378;;;;:::o;24845:738::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;25064:32:::1;::::0;::::1;25056:71;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25146:31;::::0;::::1;25138:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25226:36;::::0;::::1;25218:79;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25316:30;::::0;::::1;25308:67;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25388:17;:38:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;25437:16:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;25484:21:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;25541:15:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;24845:738::o;10131:38::-;;;;:::o;26920:321::-;26991:12;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;27023:29:::1;::::0;::::1;27047:4;27023:29;;27015:64;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27090:14;27121:12;27107:37;;;27153:4;27107:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27107:52:0;27177:56:::1;::::0;;;;;27214:10:::1;27177:56;::::0;::::1;::::0;;;;;;;;;27107:52;;-1:-1:-1;27177:36:0::1;::::0;::::1;::::0;::::1;::::0;:56;;;;;27107:52:::1;::::0;27177:56;;;;;;;;-1:-1:-1;27177:36:0;:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27177:56:0;;26920:321;-1:-1:-1;;;26920:321:0:o;27420:198::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;8806:4:::1;27512:16;:40;;27504:61;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27576:15;:34:::0;27420:198::o;10176:108::-;;;;:::o;7859:40::-;;;;;;;;;:::o;28625:183::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;8738:13:::1;28711:7;:30;;28703:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28766:24;:34:::0;28625:183::o;23222:315::-;685:24;698:10;685:12;:24::i;:::-;677:33;;;;;;23285:6:::1;::::0;::::1;;23284:7;23276:29;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23338:15;23324:10;;:29;;23316:53;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23382:18;23410:59;8498:11;23410:29;23427:11;;23410:12;;:16;;:29;;;;:::i;:59::-;23382:88;;23483:23;23494:11;23483:10;:23::i;:::-;;23517:12;:10;:12::i;:::-;712:1;23222:315::o:0;28181:166::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;28261:16:::1;::::0;::::1;::::0;;;::::1;;:26;;::::0;::::1;;;;28253:50;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28314:16;:25:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;28181:166::o;12554:136::-;12665:16;;;12643:17;;;12616:7;12643:17;;;:12;:17;;;;;;;:39;;:21;:39::i;13757:358::-;13801:6;13797:311;13817:11;:18;13813:22;;13797:311;;;13872:11;13884:1;13872:14;;;;;;;;;;;;;;;;;13860:34;;;;;;;;13872:14;;;;;13860:32;;:34;;;;;;;;;;13872:14;;13860:34;;;;;;;;;;;;;;;;;;;;;;;;;13856:241;;;;:::i;:::-;;;;;;;;13972:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14056:25;14074:6;14056:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13913:184;13856:241;;;;;;;;;;;13837:3;;13797:311;;26742:170;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;26868:36:::1;::::0;26836:21:::1;::::0;26868:27:::1;::::0;::::1;::::0;:36;::::1;;;::::0;26836:21;;26818:15:::1;26868:36:::0;26818:15;26868:36;26836:21;26868:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;627:1;26742:170:::0;:::o;10047:35::-;;;;:::o;9580:81::-;;;;;;:::o;10000:40::-;;;;:::o;8073:36::-;;;;:::o;24489:180::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;24577:19:::1;::::0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;:29;;::::0;::::1;;;;24569:53;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24633:19;::::0;;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:28;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;24489:180::o;7822:30::-;;;;;;;;;:::o;5812:87::-;5884:7;5877:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5851:13;;5877:14;;5884:7;;5877:14;;5884:7;5877:14;;;;;;;;;;;;;;;;;;;;;;;;9888:29;;;;:::o;9811:32::-;;;;:::o;23545:729::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;23646:32:::1;::::0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;:42;;::::0;::::1;;;;23638:72;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23723:32;::::0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23777:430:::1;;23802:11;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23802:23:0;;;;;::::1;::::0;;;::::1;;::::0;::::1;;::::0;;23777:430:::1;;;23864:11;:18:::0;23885:1:::1;-1:-1:-1::0;23856:50:0::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23926:9;23921:275;23945:11;:18:::0;23941:22;::::1;23921:275;;;24011:5;23993:23;;:11;24005:1;23993:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;:23;23989:192;;;24058:11;24070:18:::0;;:22;;;;24058:35;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;24041:11:::1;:14:::0;;24058:35:::1;::::0;;::::1;::::0;24053:1;;24041:14;::::1;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;24116:11;:17;;;;;;;;::::0;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;24156:5:::1;;23989:192;23965:3;;23921:275;;;;23777:430;24224:42;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;23545:729:::0;;:::o;28511:106::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;28585:10:::1;:24:::0;28511:106::o;24677:160::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;24774:6:::1;24757:13;;:23;;24749:47;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24807:13;:22:::0;24677:160::o;10291:135::-;;;;:::o;21072:572::-;21212:10;21159:4;21194:29;;;:17;:29;;;;;;;;;:38;;;;;;;;;;21247:27;;;21243:237;;21309:10;21332:1;21291:29;;;:17;:29;;;;;;;;;:38;;;;;;;;;:42;21243:237;;;21407:61;:8;21438:15;21407:12;:61::i;:::-;21384:10;21366:29;;;;:17;:29;;;;;;;;;:38;;;;;;;;;:102;21243:237;21518:10;21565:29;;;;:17;:29;;;;;;;;21495:119;;;21565:38;;;;;;;;;;;21495:119;;;;;;;;;21518:10;21495:119;;;;;;;;;;;-1:-1:-1;21632:4:0;;21072:572;-1:-1:-1;;;21072:572:0:o;9783:19::-;;;;;;:::o;14123:173::-;14214:4;14201:2;10607:18;;;10599:27;;;;;;14230:36:::1;14244:10;14256:2;14260:5;14230:13;:36::i;:::-;-1:-1:-1::0;14284:4:0::1;::::0;14123:173;-1:-1:-1;;;;14123:173:0:o;25591:1143::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;25948:12:::1;:28:::0;;;25987:9:::1;:26:::0;;;26024:11:::1;:26:::0;;;26061:10:::1;:21:::0;;;26093:13:::1;:27:::0;;;26131:20:::1;:44:::0;;;26186:15:::1;:34:::0;;;26231:16:::1;:36:::0;;;26278:19:::1;:42:::0;;;26347:79:::1;26109:11:::0;26347:60:::1;26074:8:::0;26347:60;25999:14;26347:60;25963:13;26038:12;26347:16:::1;:29::i;:::-;:33:::0;::::1;:44::i;:79::-;26333:11;:93;;;;26452:105;26537:19;;26452:80;26515:16;;26452:58;26494:15;;26452:37;26468:20;;26452:11;;:15;;:37;;;;:::i;:105::-;26437:12;:120:::0;26578:11:::1;::::0;8566:3:::1;-1:-1:-1::0;26570:71:0::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8627:3;26660:12;;:38;26652:74;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25591:1143:::0;;;;;;;;;:::o;10089:35::-;;;;:::o;7984:37::-;;;;;;;;;:::o;8379:58::-;;;;;;;;;;;;;;;:::o;729:125::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;789:19:::1;::::0;::::1;;::::0;;;:14:::1;:19;::::0;;;;;;;;:26;;;::::1;811:4;789:26;::::0;;831:15;;;;;;;::::1;::::0;;;;;;;;::::1;729:125:::0;:::o;9668:75::-;;;;;;:::o;8116:54::-;;;;:::o;9850:31::-;;;;:::o;7768:47::-;;;;;;:::o;12698:113::-;12784:19;;12760:4;12784:19;;;:12;:19;;;;;;;;;12698:113::o;12394:152::-;12504:25;;;;12478:7;12504:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;12394:152::o;27249:163::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;27328:10:::1;::::0;::::1;;::::0;;::::1;;:25;;::::0;::::1;;;;27320:49;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27380:10;:24:::0;;;::::1;;;;::::0;;;::::1;::::0;;;::::1;::::0;;27249:163::o;9924:30::-;;;;:::o;7948:29::-;;;;;;;;;:::o;862:130::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;924:19:::1;::::0;::::1;946:5;924:19:::0;;;:14:::1;:19;::::0;;;;;;;;:27;;;::::1;::::0;;967:17;;;;;;;::::1;::::0;;;;;;;;::::1;862:130:::0;:::o;1226:173::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;1302:5:::1;:11:::0;;;::::1;;;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;1324:19:0;;;:14:::1;:19;::::0;;;;;;;;:26;;;::::1;-1:-1:-1::0;1324:26:0::1;::::0;;1366:25;;;;;;;::::1;::::0;;;;;;;;::::1;1226:173:::0;:::o;27806:187::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;27893:21:::1;::::0;::::1;::::0;;;::::1;;:33;;::::0;::::1;;;;27885:57;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27953:21;:32:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;27806:187::o;9752:24::-;;;;;;:::o;7906:35::-;;;;;;;;;:::o;1111:107::-;1191:19;;1167:4;1191:19;;;:14;:19;;;;;;;;;1111:107::o;2608:181::-;2666:7;2698:5;;;2722:6;;;;2714:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2780:1;2608:181;-1:-1:-1;;;2608:181:0:o;3433:132::-;3491:7;3518:39;3522:1;3525;3518:39;;;;;;;;;;;;;;;;;:3;:39::i;2941:226::-;3061:7;3097:12;3089:6;;;;3081:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3133:5:0;;;2941:226::o;14663:1395::-;14795:20;;;14755:4;14795:20;;;:12;:20;;;;;;14755:4;;14795:20;;;:47;;-1:-1:-1;14819:23:0;;;;;;;:12;:23;;;;;;;;14795:47;14863:27;;14772:70;;-1:-1:-1;14863:27:0;;;:46;;;14894:15;14863:46;14855:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14964:36;;;;;;;:25;:36;;;;;;;;:69;;;;;15018:15;15017:16;14964:69;14946:185;;;15078:24;;15068:6;:34;;15060:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15147:6;;;;15143:87;;;15177:41;15192:6;15200:9;15211:6;15177:14;:41::i;:::-;15170:48;;;;;15143:87;15242:17;15262:28;15273:16;;15262:6;:10;;:28;;;;:::i;:::-;15242:48;;15307:16;:14;:16::i;:::-;15303:59;;;15340:10;:8;:10::i;:::-;15397:20;;;;;;;:12;:20;;;;;;:35;;15422:9;15397:24;:35::i;:::-;15374:20;;;;;;;:12;:20;;;;;:58;;;;15473:32;15387:6;15495:9;15473:13;:32::i;:::-;:84;;15548:9;15473:84;;;15508:37;15516:6;15524:9;15535;15508:7;:37::i;:::-;15594:23;;;;;;;:12;:23;;;;;;15445:112;;-1:-1:-1;15594:46:0;;15445:112;15594:27;:46::i;:::-;15568:23;;;;;;;;:12;:23;;;;;;;;:72;;;;15748:16;;15658:118;;;;;;15726:39;;:17;;:21;:39::i;:::-;15658:118;;;;;;;;;;;;;;;15806:14;:12;:14::i;:::-;:41;;;;-1:-1:-1;15837:10:0;;;;;;;15806:41;:92;;;;-1:-1:-1;15865:33:0;;;;;;;:25;:33;;;;;;;;15864:34;15806:92;:146;;;;-1:-1:-1;15916:36:0;;;;;;;:25;:36;;;;;;;;15915:37;15806:146;15789:238;;;15979:9;:7;:9::i;:::-;16003:12;:10;:12::i;:::-;-1:-1:-1;16046:4:0;;14663:1395;-1:-1:-1;;;;;;14663:1395:0:o;2797:136::-;2855:7;2882:43;2886:1;2889;2882:43;;;;;;;;;;;;;;;;;:3;:43::i;3175:250::-;3233:7;3257:6;3253:47;;-1:-1:-1;3287:1:0;3280:8;;3253:47;3324:5;;;3328:1;3324;:5;:1;3348:5;;;;;:10;3340:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22486:728;22543:7;22579:15;22611:16;22607:118;;22666:12;;22649:30;;;;;;;22659:5;;22649:30;;;;;;;;;;-1:-1:-1;;22701:12:0;;22694:19;;22607:118;22755:1;22741:11;:15;22737:188;;;22788:12;;:39;;22813:12;;;;22788:16;:39::i;:::-;22773:12;:54;22737:188;;;22875:12;;:38;;22900:11;22875:16;:38::i;:::-;22860:12;:53;22737:188;22941:12;;22956:10;-1:-1:-1;22937:83:0;;;22998:10;22983:12;:25;22937:83;23066:12;;23051:28;;9041:54;;23051:14;:28::i;:::-;23032:16;:47;;;23113:15;;23105:23;;23092:10;:36;23163:12;;23146:30;;;;;;;23105:5;;23146:30;;;;;;;;-1:-1:-1;;23194:12:0;;22486:728;;;:::o;3573:225::-;3693:7;3728:12;3721:5;3713:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3752:9;3768:1;3764;:5;;;;;;;3573:225;-1:-1:-1;;;;;3573:225:0:o;14304:351::-;14388:4;14405:17;14425:28;14436:16;;14425:6;:10;;:28;;;;:::i;:::-;14485:18;;;;;;;:12;:18;;;;;;14405:48;;-1:-1:-1;14485:33:0;;14405:48;14485:22;:33::i;:::-;14464:18;;;;;;;;:12;:18;;;;;;:54;;;;14548:16;;;;;;;:31;;14569:9;14548:20;:31::i;:::-;14529:16;;;;;;;;:12;:16;;;;;;;;;:50;;;;14597:26;;;;;;;14529:16;;14597:26;;;;;;;;;;;;;-1:-1:-1;14643:4:0;;14304:351;-1:-1:-1;;;;14304:351:0:o;13293:278::-;13402:10;13342:4;13376:37;;;:25;:37;;;;;;;;13375:38;:58;;;;-1:-1:-1;13427:6:0;;;;13426:7;13375:58;:88;;;;;13462:1;13446:13;;:17;13375:88;:134;;;;;13508:1;13476:29;13492:12;;13476:11;;:15;;:29;;;;:::i;:::-;:33;13375:134;:188;;;;;13550:13;;13522:24;13540:4;13522:9;:24::i;:::-;:41;;13359:204;;13293:278;:::o;18888:1661::-;10486:6;:13;;;;10495:4;10486:13;;;18976:12:::1;::::0;18960:11:::1;::::0;10486:6;;18960:29:::1;::::0;:11;:15:::1;:29::i;:::-;19032:18;::::0;18937:52;;-1:-1:-1;19002:27:0::1;::::0;19032:18;;::::1;;;:37;;19068:1;19032:37;;;19053:12;;19032:37;19143:16;::::0;;19132:4:::1;19080:28;19111:27:::0;;;:12:::1;:27:::0;;;;;;;19002:67;;-1:-1:-1;19080:28:0;;19111:49:::1;::::0;:31:::1;:49::i;:::-;19080:80:::0;-1:-1:-1;19173:23:0::1;19199:70;19256:12:::0;19199:52:::1;19224:26;:19:::0;19248:1:::1;19224:23;:26::i;:::-;19199:20:::0;;:24:::1;:52::i;:70::-;19173:96;;19280:20;19303:83;19373:12;19303:65;19328:39;19350:16;;19328:17;19343:1;19328:10;;:14;;:17;;;;:::i;:39::-;19303:20:::0;;:24:::1;:65::i;:83::-;19280:106;;19397:19;19419:81;19487:12;19419:63;19444:37;19465:15;;19444:16;19458:1;19444:9;;:13;;:16;;;;:::i;:37::-;19419:20:::0;;:24:::1;:63::i;:81::-;19397:103;;19511:23;19537:89;19613:12;19537:71;19562:45;19587:19;;19562:20;19580:1;19562:13;;:17;;:20;;;;:::i;:45::-;19537:20:::0;;:24:::1;:71::i;:89::-;19511:115:::0;-1:-1:-1;19637:24:0::1;19664:97;19511:115:::0;19664:76:::1;19728:11:::0;19664:76;19710:12;19664:76;:20;19689:15;19664:24:::1;:41::i;:97::-;19637:124:::0;-1:-1:-1;19777:19:0;;19774:82:::1;;19812:32;19828:15;19812;:32::i;:::-;19871:16:::0;;19868:96:::1;;19903:49;19926:4;9192:42;19939:12;19903:14;:49::i;:::-;;19868:96;19979:15:::0;;19976:240:::1;;20013:10;::::0;;;::::1;;;20010:195;;;20074:21;::::0;20043:53:::1;::::0;20061:11;;20074:21:::1;;20043:17;:53::i;:::-;20010:195;;;20167:21;::::0;20135:54:::1;::::0;20154:11;;20167:21:::1;;20135:18;:54::i;:::-;20231:19:::0;;20228:102:::1;;20302:15;::::0;20266:52:::1;::::0;20285:15;;20302::::1;;20266:18;:52::i;:::-;20345:20:::0;;20342:104:::1;;20417:16;::::0;20381:53:::1;::::0;20399:16;;20417::::1;;20381:17;:53::i;:::-;20463:78;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;10522:6:0;:14;;;;;;-1:-1:-1;;;;;;18888:1661:0:o;12935:350::-;13027:18;;;13007:4;13027:18;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;13049:16:0;;;;;;;:12;:16;;;;;;;;13027:38;13024:254;;;-1:-1:-1;13088:5:0;13081:12;;13024:254;13114:21;;;;;;;13110:168;;;-1:-1:-1;13158:4:0;13151:11;;13110:168;13201:31;;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;13236:29:0;;;;;;;:25;:29;;;;;;;;13201:64;13193:73;;;;20557:507;20684:11;;20709:36;;;20646:7;20709:36;;;:25;:36;;;;;;20646:7;;20684:11;20709:36;;20706:64;;;-1:-1:-1;20758:12:0;;20706:64;20783:17;20803:44;8680:4;20803:23;:9;20817:8;20803:13;:23::i;:44::-;20911:4;20890:27;;;;:12;:27;;;;;;20783:64;;-1:-1:-1;20890:42:0;;20783:64;20890:31;:42::i;:::-;20881:4;20860:27;;;;:12;:27;;;;;;;;:72;;;;20994:16;;20860:27;20948:64;;;;;20980:31;;:9;;:13;:31::i;:::-;20948:64;;;;;;;;;;;;;;;21032:24;:9;21046;21032:13;:24::i;:::-;21025:31;20557:507;-1:-1:-1;;;;;;20557:507:0:o;12819:108::-;12890:10;;12904:15;-1:-1:-1;12890:29:0;12819:108;:::o;22266:212::-;22308:6;;;;22304:167;;22331:18;22359:59;8498:11;22359:29;22376:11;;22359:12;;:16;;:29;;;;:::i;:59::-;22331:88;;22436:23;22447:11;22436:10;:23::i;:::-;;22304:167;;22266:212::o;16493:921::-;16567:12;16582:27;:20;16607:1;16582:24;:27::i;:::-;16567:42;-1:-1:-1;16620:17:0;16640:30;:20;16567:42;16640:24;:30::i;:::-;16686:16;;16620:50;;-1:-1:-1;16686:16:0;;;;;16683:724;;;16743:21;16781:38;16799:4;16813;16781:17;:38::i;:::-;16836:18;16857:41;:21;16883:14;16857:25;:41::i;:::-;16836:62;;16915:36;16929:9;16940:10;16915:13;:36::i;:::-;16973:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16683:724;;;;;17072:42;;;;;;17108:4;17072:42;;;;;;17047:22;;9358:42;;17072:27;;:42;;;;;;;;;;;;;;;9358;17072;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17072:42:0;;-1:-1:-1;17131:39:0;17150:4;17164;17131:18;:39::i;:::-;17187:18;17208:62;17255:14;9358:42;17208:27;;;17244:4;17208:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17208:42:0;;:46;:62::i;:::-;17187:83;;17287:39;17304:9;17315:10;17287:16;:39::i;:::-;17348:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16683:724;;16493:921;;;:::o;18048:396::-;18157:16;;;18171:1;18157:16;;;;;;;;18133:21;;18157:16;;;;;;;;;;-1:-1:-1;18157:16:0;18133:40;;18202:4;18184;18189:1;18184:7;;;;;;;;:23;;;;:7;;;;;;;;;;:23;;;;18228:6;;:13;;;;;;;;:6;;;;;:11;;:13;;;;;18184:7;;18228:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18228:13:0;18218:7;;:4;;18223:1;;18218:7;;;;;;;;;;;:23;;;;;;;;;;;18254:6;;;;;;;;;;;:57;;;18326:11;18352:1;18368:4;18387:8;18410:15;18254:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18048:396;;;:::o;18450:430::-;18560:16;;;18574:1;18560:16;;;;;;;;;18536:21;;18560:16;;;;;;;;;;-1:-1:-1;18560:16:0;18536:40;;18605:4;18587;18592:1;18587:7;;;;;;;;:23;;;;:7;;;;;;;;;;:23;;;;18631:6;;:13;;;;;;;;:6;;;;;:11;;:13;;;;;18587:7;;18631:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18631:13:0;18621:7;;:4;;18626:1;;18621:7;;;;;;;;;;;:23;;;;;;;;;;;9358:42;18655:4;18660:1;18655:7;;;;;;;;:19;;;;:7;;;;;;;;;;:19;;;;18687:6;;:185;;;;;;;;;;;:6;:185;;;;;;;;;;;;;18846:15;18687:185;;;;;;;;;;;;;;;;;;;;;:6;;;;;:60;;18762:11;;18687:6;;18804:4;;18823:8;;18687:185;;;;;;;;;;;;;;;;:6;:185;;;;;;;;;;;;;;;;17422:289;17504:6;;17645:17;;17504:199;;;;;;17567:4;17504:199;;;;;;;;;;:6;:199;;;;;;;;;;:6;17645:17;;;17504:199;;;;17677:15;17504:199;;;;;;:6;;;;;:22;;17534:9;;17504:199;;;;;;;;;;;;;;;17534:9;17504:6;:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;17422:289:0:o;17719:321::-;17805:6;;17974:17;;17805:227;;;;;;17847:4;17805:227;;;;9358:42;17805:227;;;;;;;;;;;;;;;;:6;:227;;;;;;;;;;;;:6;17974:17;;;17805:227;;;;18006:15;17805:227;;;;;;:6;;;;;:19;;:227;;;;;;;;;;;;;;;;:6;:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:88:1;89:3;85:15;;71:31::o;107:883::-;;188:4;170:16;167:26;164:2;;;196:5;;164:2;237:1;232:3;227;212:27;299:10;261:36;292:3;286:10;261:36;:::i;:::-;258:52;248:2;;314:5;;248:2;348;342:9;406:66;388:16;384:89;381:1;375:4;360:114;503:4;497:11;527:16;562:18;633:2;626:4;618:6;614:17;611:25;606:2;598:6;595:14;592:45;589:2;;;640:5;;;;;;589:2;677:6;671:4;667:17;656:28;;713:3;707:10;693:24;;740:2;732:6;729:14;726:2;;;746:5;;;;;;726:2;;807:16;801:4;797:27;790:4;781:6;776:3;772:16;768:27;765:60;762:2;;;828:5;;;;;762:2;884;872:15;889:66;868:88;859:98;;959:4;855:109;851:2;844:121;863:3;-1:-1:-1;;154:836:1;:::o

Swarm Source

ipfs://d3bf1dbef9d0fbdff8215978209d74d09a236613d6706a59439d28c6dae7cf08

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

From the creator of Libero: FLibero-Fantom Libero Financial is a dual reward, auto-staking token, making a fixed APY of 159,058.06% plus 7% USDC passive income from trading volume. FLibero is also a DeFi 3.0 Farming as a Service protocol with FLibero Treasury.

Validator Index Block Amount
View All Withdrawals

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