ETH Price: $2,468.52 (+0.80%)
 

Overview

Max Total Supply

100,000,000 KILROY

Holders

26

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Kilroy

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-04
*/

// SPDX-License-Identifier: Unlicensed

/*

                                                                                     %@@@@@@@@@@@(                                                                                                      
                                                                           @@@@@@@@@@@,        (@@@@@@@@@@                                                                                              
                                                                      @@@@@@#                            @@@@@@.                                                                                        
                                                                  @@@@@@                                      @@@@@                                                                                     
                                                               @@@@@                                              @@@@                                                                                  
                                                             @@@@                                                    @@@.                                                                               
                                                           @@@@                                                        @@@*                                                                             
                                                          @@@                                                            @@@                                                                            
                                                        @@@@                                                               @@@                                                                          
                                                       @@@@                      @@*               @@@                      @@@                                                                         
                                                      &@@@                      @@@@               @@@                       &@@&                                                                       
                                                     &@@@                                                                      @@@                                                                      
                                                    (@@@                                                                        @@@                                                                     
                                                    @@@                           .(               @@                            @@@                                                                    
                                                   @@@@                           @@@              @@@                            @@@               @@@@@@@@@@@@@@@@@@@@@@@@@@                          
                &@@@@@@@@@@@@@@@@@@@*              @@@                            @@&               @@@                            @@/           @@@@@                       @@@@                       
           @@@@@@.                 @@@@@*         @@@@                           ,@@&               @@@                            #@@(        @@@@                            @@@@@@@@@@@@@@@@@@@@@@@@@
        @@@@                          ,@@@/**%@@@@@@@@           .**((%&@@@@@@@@@@@@(                @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,                      @@,    @@@                     
@@@@@@@@@@@     @                      @@@@@@@&%%##((//,,..                       @@                 @@@.                                       @@.    @@@@     @@@@    @@@@@   &@@/                    
        @@@   #@@@,    @@@.     @@@    @@@@                                       @@                  @@@                                       @@@    @@@@     @@@@@   %@@@@   @@@(                    
        @@@   @@@@@    @@@@     @@@@   @@@@                                       @@                  @@@                                        @@&   @@@@@    @@@@@   @@@@@@@@@@@                     
        @@@   @@@@@    @@@@     @@@@   @@@(                                      &@@                   @@@                                        @@@  @@@@@    @@@@@@  @@@  @@@@@                      
         @@@@@@@@@@%   @@@@@    @@@@@ %@@@                                       @@@                   @@@                                         @@@@@@ @@@   @@( @@@@@@@                             
          &@@/   @@@, @@@ @@@  @@@ #@@@@@                                        @@@                    @@@                                                @@@@@@&    #@*                               
                  @@@@@@   @@@@@@&   ,                                           @@&                    @@@                                                                                             
                                                                                 @@%                     @@@                                                                                            
                                                                                 @@%                     @@@                                                                                            
                                                                                 @@@                     (@@@                                                                                           
                                                                                 &@@                      @@@                                                                                           
                                                                                  @@                      @@@                                                                                           
                                                                                  @@@                     @@@                                                                                           
                                                                                   @@@                   *@@@                                                                                           
                                                                                    @@@                  @@@                                                                                            
                                                                                      @@@%             @@@(                                                                                             
                                                                                        @@@@@@@@@@@@@@@@                                                                                                
                                                                                                                                                                                                        
                                                              Kilroy is here, on ETH

    Telegram:  https://t.me/kilroyportal
    Twitter :  https://twitter.com/KilroyOnEth
    Website :  https://kilroyoneth.com/

*/


pragma solidity ^0.6.12;

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract Kilroy is Context, IERC20, Ownable {
    using SafeMath for uint256;
  
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => uint256) private _specialFees;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromReward;
    mapping( address => bool) private _hasSpecialFee;

    address[] private _excludedFromReward;

    address payable public projectFundAddress = payable(0x57A1ab41a7B567ED03BC610ba510143059177C17);
    address payable public buyBackAddress = payable(0x000000000000000000000000000000000000dEaD);
    address payable public burnAddress = payable(0x000000000000000000000000000000000000dEaD);

    uint256 public numTokensToSell = 10000 * (10**18);
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000000 * (10**18); 
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = 2000000 * (10**18);

    string private constant _symbol = "KILROY";
    string private constant _name = "First viral meme ever";

    uint8 private constant _decimals = 18;
    
    uint256 public _taxFee = 0;
    uint256 private _prevTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 100;
    uint256 private _prevLiquidityFee = _liquidityFee;

    uint256 public _projectFee = 300;
    uint256 private _prevProjectFee = _projectFee;

    uint256 public _buyBackFee = 0;
    uint256 private _prevBuyBackFee = _buyBackFee;

    uint256 public _totalLiqFee = 0;
    uint256 private _prevTotalLiqFee = _totalLiqFee;

    uint256 private _tFeeTotal;
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool private inSwapAndLiquify;
    
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyMaxAmountEnabled = true;

    uint256 private constant MIN_BUY_AMOUNT = 0;
    uint256 private constant MAX_BUY_AMOUNT =  10000000 * (10 ** 18); 
    uint256 public _buyBackMinAmount = MIN_BUY_AMOUNT;
    uint256 public _buyBackMaxAmount = MAX_BUY_AMOUNT;
    uint256 public _buyBackSize = 1500; // 15 %
    uint256 private _buyBackCooldownInterval = (1 hours);
    uint256 private _buyBackCooldownTimestamp = 0;

    uint256 private timeLock = 0;
        
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event SwapAndLiquifyMaxAmountEnabled(bool enabled, uint256 maxTokenIntoLiquidity);
    event SwapAndFundProject(uint256 amount);
    event SwapForBuyBack(uint256 amount);
    event SetUniswapRouterAddress(address newRouter, address pair);
    event SetUniswapPairAddress(address newPair);
    event SetFundAddress(address newAddress);
    event SetFees(uint256 newRewardFee, uint256 newLiquidityFee, uint256 newProjectFee, uint256 newBuyBackFee);
    event ExcludeFromReward(address account);
    event IncludeInReward(address account);
    event SetFee(address account, uint256 newFee, bool enabled);
    event SetnumTokensToSell(uint256 amount);
    event RescueETH(uint256 amount);
    event TimeLock(uint256 timestamp);
    event SetBuyBackConfiguration(uint256 amountMin, uint256 amountMax, uint256 cooldownInterval, uint256 buyBackSize);
    event SetBuyBackAddress(address newAddress);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        // BSC MainNet, Uniswapswap Router
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
       
        //exclude owner and this contract from fee
        _hasSpecialFee[ owner() ] = true;
        _hasSpecialFee[ address(this) ] = true;

        //exclude pair from receiving rewards
        _isExcludedFromReward[ uniswapV2Pair ] = true;
     
        _totalLiqFee = _liquidityFee.add(_projectFee).add(_buyBackFee);
        _prevTotalLiqFee = _totalLiqFee;

        timeLock = block.timestamp;
        _buyBackCooldownTimestamp = block.timestamp;

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

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

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

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

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

    function isExcludedFromReward(address account) external view returns (bool) {
        return _isExcludedFromReward[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function isFeeForAddressEnabled(address account) external view returns (bool) {
        return _hasSpecialFee[ account ];
    }

    function getFeeForAddress(address account) external view returns (uint256) {
        return  _specialFees[ account ];
    }

    function setUniswapRouterAddress(address routerAddress) external onlyOwner() {
        require(address(uniswapV2Router) != routerAddress);
        IUniswapV2Router02 newRouter = IUniswapV2Router02( routerAddress );
        // test if pair exists and create if it does not exist
        address pair = IUniswapV2Factory(newRouter.factory()).getPair(address(this), newRouter.WETH());
        if (pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(newRouter.factory()).createPair(address(this), newRouter.WETH());
        }
        else {
            uniswapV2Pair = pair;
        }

        // approve new router to spend contract tokens
        _approve( address(this), routerAddress, MAX );

        // reset approval of old router
        _approve( address(this), address(uniswapV2Router), 0);

        // update state
        uniswapV2Router = IUniswapV2Router02(newRouter);

        emit SetUniswapRouterAddress(routerAddress, uniswapV2Pair);
    }

    function setUniswapPairAddress(address newPair) external onlyOwner() {
        uniswapV2Pair = newPair;

        emit SetUniswapPairAddress(uniswapV2Pair);
    }

    function setFundAddress(address newAddress) external onlyOwner() {
        projectFundAddress = payable(newAddress);

        emit SetFundAddress(projectFundAddress);
    }

   function setFees(uint256 newRewardFee, uint256 newLiquidityFee, uint256 newProjectFee, uint256 newBuyBackFee) external onlyOwner() {
        require( (newRewardFee.add(newLiquidityFee).add(newProjectFee).add(newBuyBackFee)) <= 1000, "Total fees must be <= 1000" );
        
        _taxFee = newRewardFee;
        _liquidityFee = newLiquidityFee;
        _projectFee = newProjectFee;
        _buyBackFee = newBuyBackFee;
        _totalLiqFee = _liquidityFee.add(_projectFee).add(_buyBackFee);
        
        emit SetFees(newRewardFee, newLiquidityFee, newProjectFee, newBuyBackFee);
    }

    function setFee(address account, uint256 newFee, bool enabled) external onlyOwner {
        require( newFee <= 1000, "Total fee must be <= 1000" );

        _specialFees[ account ] = newFee;
        _hasSpecialFee[ account ] = enabled;
        emit SetFee(account, newFee, enabled);
    }

    function setBuyBackConfiguration(uint256 amountMin, uint256 amountMax, uint256 cooldownInterval, uint256 buyBackSize) external onlyOwner {
        require( amountMin > MIN_BUY_AMOUNT );
        require( amountMin <= _buyBackMaxAmount) ;
        require( amountMax > MIN_BUY_AMOUNT );
        require( amountMax <= MAX_BUY_AMOUNT );
        require( buyBackSize > 0 );
        require( buyBackSize <= (10 ** 4)) ;

        _buyBackMinAmount = amountMin;
        _buyBackMaxAmount = amountMax;
        _buyBackCooldownInterval = cooldownInterval;
        _buyBackCooldownTimestamp  = block.timestamp;
        _buyBackSize = buyBackSize;

        emit SetBuyBackConfiguration(amountMin, amountMax, cooldownInterval, buyBackSize);
    }

    function setBuyBackAddress(address newAddress) external onlyOwner() {
        buyBackAddress = payable(newAddress);

        emit SetBuyBackAddress(buyBackAddress);
    }

    function excludeFromReward(address account) external onlyOwner() {
        require(!_isExcludedFromReward[account], "Account is already excluded");
        require(_excludedFromReward.length < 100);
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcludedFromReward[account] = true;
        _excludedFromReward.push(account);

        emit ExcludeFromReward(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcludedFromReward[account], "Account is already included");
        require(_excludedFromReward.length < 100);
        for (uint256 i = 0; i < _excludedFromReward.length; i++) {
            if (_excludedFromReward[i] == account) {
                _excludedFromReward[i] = _excludedFromReward[_excludedFromReward.length - 1];
                uint256 currentRate = _getRate();
                _rOwned[account] = _tOwned[account].mul(currentRate);
                _tOwned[account] = 0;
                _isExcludedFromReward[account] = false;
                _excludedFromReward.pop();
                break;
            }
        }

        emit IncludeInReward(account);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setSwapAndLiquifyMaxAmountEnabled(bool _enabled) external onlyOwner {
        swapAndLiquifyMaxAmountEnabled = _enabled;

        emit SwapAndLiquifyMaxAmountEnabled(_enabled, numTokensToSell);
    }

    function setSwapAndLiquifyMaxAmount(uint256 amount) external onlyOwner {
        require( amount > 0 );
        numTokensToSell = amount;

        emit SetnumTokensToSell(amount);
    }

    // contract gains ETH over time
    function rescueETH(uint256 amount) external onlyOwner {
        payable( msg.sender ).transfer(amount);

        emit RescueETH(amount);
    }
  
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excludedFromReward.length; i++) {
            if (_rOwned[_excludedFromReward[i]] > rSupply || _tOwned[_excludedFromReward[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excludedFromReward[i]]);
            tSupply = tSupply.sub(_tOwned[_excludedFromReward[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcludedFromReward[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**4
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_totalLiqFee).div(
            10**4
        );
    }

    function saveAllFees() private {
        _prevTaxFee = _taxFee;
        _prevTotalLiqFee = _totalLiqFee;
        _prevProjectFee = _projectFee;
        _prevLiquidityFee = _liquidityFee;
        _prevBuyBackFee = _buyBackFee;
    }
  
    function setSpecialFee(address from, address to) private returns (bool) {
        
        uint256 totalFee = _taxFee.add(_liquidityFee).add(_projectFee).add(_buyBackFee);
        if( totalFee == 0 ) {
            return false; // don't take fee
        }

        // either one or both have a special fee, take the lowest
        address lowestFeeAccount = from;
        if( _hasSpecialFee[from] && _hasSpecialFee[to]) {
            lowestFeeAccount = ( _specialFees[from] > _specialFees[to] ? to : from );
        } else if ( _hasSpecialFee[to] ) {
            lowestFeeAccount = to;
        }

        // get the fee
        uint256 fee = _specialFees[ lowestFeeAccount ];
        
        // set fees
        _taxFee = fee.mul(_taxFee).div( totalFee );
        _liquidityFee = fee.mul(_liquidityFee).div( totalFee );
        _projectFee = fee.mul(_projectFee).div( totalFee );
        _buyBackFee = fee.mul(_buyBackFee).div( totalFee );

        _totalLiqFee = _liquidityFee.add(_projectFee).add(_buyBackFee);

        return ( _taxFee.add(_liquidityFee).add(_buyBackFee) ) > 0;
    }

    function restoreAllFees() private {
        _taxFee = _prevTaxFee;
        _totalLiqFee = _prevTotalLiqFee;
        _projectFee = _prevProjectFee;
        _liquidityFee = _prevLiquidityFee;
        _buyBackFee = _prevBuyBackFee;
    }
 
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0) );
        require(spender != address(0) );

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount <= balanceOf(from), "Transfer amount exceeds allowance");
        require(amount >= 0, "Transfer amount must be >= 0");
   
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance > numTokensToSell;
      
        
        // save all the fees
        saveAllFees();

        // if the address has a special fee, use it
        if( _hasSpecialFee[from] || _hasSpecialFee[to] ) {
            setSpecialFee(from,to);
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled &&
            _totalLiqFee > 0
        ) {
            if( swapAndLiquifyMaxAmountEnabled ) {
                contractTokenBalance = numTokensToSell;
            }
            
            swapAndLiquify(contractTokenBalance);
        }
        
        //transfer amount, it will deduct fee and reflect tokens
        _tokenTransfer(from,to,amount);

        // restore all the fees
        restoreAllFees();
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        uint256 forLiquidity = tAmount.mul(_liquidityFee).div(_totalLiqFee);
        uint256 forBuyBack = tAmount.mul(_buyBackFee).div(_totalLiqFee);
        uint256 forWallets = tAmount.sub(forLiquidity).sub(forBuyBack);
        
        if(forLiquidity > 0 && _liquidityFee > 0)
        {
            // sell half the tokens for ETH and add liquidity
            uint256 half = forLiquidity.div(2);
            uint256 otherHalf = forLiquidity.sub(half);
    
            uint256 initialBalance = address(this).balance;
            swapTokensForETH(half);

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

            emit SwapAndLiquify(half, newBalance, otherHalf);
        }
                
        if(forWallets > 0 && _projectFee > 0) 
        {
            // sell tokens for ETH and send to project fund
            uint256 initialBalance = address(this).balance;
            swapTokensForETH(forWallets);

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

            emit SwapAndFundProject(newBalance);
        }

        if(forBuyBack >0 && _buyBackFee > 0) {

            uint256 buyBackAmount = address(this).balance.mul( _buyBackSize ).div( 10 ** 4);

            // if there is a max set on amount to buy back, cap the amount of eth to spent
            if( buyBackAmount > _buyBackMaxAmount ) {
                buyBackAmount = _buyBackMaxAmount;
            }

            // buy if more than minimum amount of eth to spent
            if( buyBackAmount > _buyBackMinAmount && _buyBackCooldownTimestamp < block.timestamp) {
                swapForBuyback(buyBackAmount);

                _buyBackCooldownTimestamp = block.timestamp + _buyBackCooldownInterval;
            }
        }

    }

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

        if( _allowances[ address(this)][address(uniswapV2Router)] < tokenAmount )
            _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            buyBackAddress,
            block.timestamp
        );

        emit SwapForBuyBack(amount);
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {        
        if( _allowances[ address(this)][address(uniswapV2Router)] < tokenAmount )
            _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            burnAddress,
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        if (_isExcludedFromReward[sender] && !_isExcludedFromReward[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
   
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

     //to receive ETH from pancakeV2Router when swapping
    receive() external payable {}

}

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":"account","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RescueETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetBuyBackAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountMax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cooldownInterval","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBackSize","type":"uint256"}],"name":"SetBuyBackConfiguration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newProjectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyBackFee","type":"uint256"}],"name":"SetFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetFundAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newPair","type":"address"}],"name":"SetUniswapPairAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRouter","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"}],"name":"SetUniswapRouterAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SetnumTokensToSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapAndFundProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"maxTokenIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquifyMaxAmountEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapForBuyBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimeLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackMaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackMinAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_projectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getFeeForAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isFeeForAddressEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensToSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectFundAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setBuyBackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMin","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"},{"internalType":"uint256","name":"cooldownInterval","type":"uint256"},{"internalType":"uint256","name":"buyBackSize","type":"uint256"}],"name":"setBuyBackConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"newFee","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"newProjectFee","type":"uint256"},{"internalType":"uint256","name":"newBuyBackFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAndLiquifyMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyMaxAmountEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"setUniswapPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"name":"setUniswapRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyMaxAmountEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600980546001600160a01b03199081167357a1ab41a7b567ed03bc610ba510143059177c1717909155600a8054821661dead908117909155600b805490921617905569021e19e0c9bab2400000600c556a52b7d2dcc80cd2e4000000600d556a34f8e1f3adab5d4bffffff19600e556a01a784379d99db42000000600f556000601081905560118190556064601281905560135561012c60148190556015556016819055601781905560188190556019819055601c805460ff60b01b1960ff60a81b19909116600160a81b1716600160b01b179055601d8190556a084595161401484a000000601e556105dc601f55610e1060205560218190556022553480156200010e57600080fd5b5060006200011b62000459565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e54600260006200017662000459565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ed57600080fd5b505afa15801562000202573d6000803e3d6000fd5b505050506040513d60208110156200021957600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200026a57600080fd5b505afa1580156200027f573d6000803e3d6000fd5b505050506040513d60208110156200029657600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620002e957600080fd5b505af1158015620002fe573d6000803e3d6000fd5b505050506040513d60208110156200031557600080fd5b5051601c80546001600160a01b03199081166001600160a01b0393841617909155601b8054909116918316919091179055600160076000620003566200045d565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260078452828120805486166001908117909155601c5490921681526006845291909120805490931617909155601654601454601254620003ea93620003d692906200215a6200046c821b17901c565b6200046c60201b6200215a1790919060201c565b60188190556019554260228190556021556200040562000459565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040518082815260200191505060405180910390a350620004ce565b3390565b6000546001600160a01b031690565b600082820183811015620004c7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6136ed80620004de6000396000f3fe6080604052600436106102cd5760003560e01c80636bc87c3a11610175578063a457c2d7116100dc578063db15d18511610095578063deb4e9e61161006f578063deb4e9e614610a5b578063ee46443014610a70578063f2fde38b14610a85578063fb9c12ac14610ab8576102d4565b8063db15d185146109d8578063dccced7714610a0b578063dd62ed3e14610a20576102d4565b8063a457c2d7146108bf578063a9059cbb146108f8578063ad740f8c14610931578063bd7644b814610964578063c49b9a8014610997578063d795b97c146109c3576102d4565b80637d1db4a51161012e5780637d1db4a5146107f057806385dc30041461080557806388f82020146108385780638da5cb5b1461086b57806395d89b41146108805780639e252f0014610895576102d4565b80636bc87c3a1461072d5780636fcba3771461074257806370a082311461077e57806370d5ae05146107b1578063715018a6146107c6578063783478ad146107db576102d4565b80632d838119116102345780634549b039116101ed5780634a74bb02116101c75780634a74bb021461069d57806352390c02146106b2578063682bcb10146106e55780636883937714610718576102d4565b80634549b0391461061557806345ba883e1461064757806349bd5a5e14610688576102d4565b80632d8381191461050c578063310c165f14610536578063313ce567146105695780633685d4191461059457806339509351146105c75780633b124fe714610600576102d4565b80631694505e116102865780631694505e14610432578063178bfc6a1461044757806318160ddd1461045c5780631834848c146104715780631f1942a81461049d57806323b872dd146104c9576102d4565b806306fdde03146102d9578063095ea7b3146103635780630bfe9327146103b057806312706f04146103d757806313114a9d146103ec57806313c5d7a914610401576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610af4565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610328578181015183820152602001610310565b50505050905090810190601f1680156103555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036f57600080fd5b5061039c6004803603604081101561038657600080fd5b506001600160a01b038135169060200135610b23565b604080519115158252519081900360200190f35b3480156103bc57600080fd5b506103c5610b41565b60408051918252519081900360200190f35b3480156103e357600080fd5b506103c5610b47565b3480156103f857600080fd5b506103c5610b4d565b34801561040d57600080fd5b50610416610b53565b604080516001600160a01b039092168252519081900360200190f35b34801561043e57600080fd5b50610416610b62565b34801561045357600080fd5b506103c5610b71565b34801561046857600080fd5b506103c5610b77565b34801561047d57600080fd5b5061049b6004803603602081101561049457600080fd5b5035610b7d565b005b3480156104a957600080fd5b5061049b600480360360208110156104c057600080fd5b50351515610c1d565b3480156104d557600080fd5b5061039c600480360360608110156104ec57600080fd5b506001600160a01b03813581169160208101359091169060400135610cd3565b34801561051857600080fd5b506103c56004803603602081101561052f57600080fd5b5035610d5a565b34801561054257600080fd5b5061039c6004803603602081101561055957600080fd5b50356001600160a01b0316610dbc565b34801561057557600080fd5b5061057e610dda565b6040805160ff9092168252519081900360200190f35b3480156105a057600080fd5b5061049b600480360360208110156105b757600080fd5b50356001600160a01b0316610ddf565b3480156105d357600080fd5b5061039c600480360360408110156105ea57600080fd5b506001600160a01b038135169060200135611032565b34801561060c57600080fd5b506103c5611080565b34801561062157600080fd5b506103c56004803603604081101561063857600080fd5b50803590602001351515611086565b34801561065357600080fd5b5061049b6004803603606081101561066a57600080fd5b506001600160a01b0381351690602081013590604001351515611118565b34801561069457600080fd5b5061041661123c565b3480156106a957600080fd5b5061039c61124b565b3480156106be57600080fd5b5061049b600480360360208110156106d557600080fd5b50356001600160a01b031661125b565b3480156106f157600080fd5b506103c56004803603602081101561070857600080fd5b50356001600160a01b0316611427565b34801561072457600080fd5b506103c5611442565b34801561073957600080fd5b506103c5611448565b34801561074e57600080fd5b5061049b6004803603608081101561076557600080fd5b508035906020810135906040810135906060013561144e565b34801561078a57600080fd5b506103c5600480360360208110156107a157600080fd5b50356001600160a01b0316611584565b3480156107bd57600080fd5b506104166115e6565b3480156107d257600080fd5b5061049b6115f5565b3480156107e757600080fd5b50610416611697565b3480156107fc57600080fd5b506103c56116a6565b34801561081157600080fd5b5061049b6004803603602081101561082857600080fd5b50356001600160a01b03166116ac565b34801561084457600080fd5b5061039c6004803603602081101561085b57600080fd5b50356001600160a01b031661175e565b34801561087757600080fd5b5061041661177c565b34801561088c57600080fd5b506102ee61178b565b3480156108a157600080fd5b5061049b600480360360208110156108b857600080fd5b50356117ab565b3480156108cb57600080fd5b5061039c600480360360408110156108e257600080fd5b506001600160a01b038135169060200135611867565b34801561090457600080fd5b5061039c6004803603604081101561091b57600080fd5b506001600160a01b0381351690602001356118cf565b34801561093d57600080fd5b5061049b6004803603602081101561095457600080fd5b50356001600160a01b03166118e3565b34801561097057600080fd5b5061049b6004803603602081101561098757600080fd5b50356001600160a01b0316611995565b3480156109a357600080fd5b5061049b600480360360208110156109ba57600080fd5b50351515611a47565b3480156109cf57600080fd5b506103c5611af2565b3480156109e457600080fd5b5061049b600480360360208110156109fb57600080fd5b50356001600160a01b0316611af8565b348015610a1757600080fd5b506103c5611f03565b348015610a2c57600080fd5b506103c560048036036040811015610a4357600080fd5b506001600160a01b0381358116916020013516611f09565b348015610a6757600080fd5b5061039c611f34565b348015610a7c57600080fd5b506103c5611f44565b348015610a9157600080fd5b5061049b60048036036020811015610aa857600080fd5b50356001600160a01b0316611f4a565b348015610ac457600080fd5b5061049b60048036036080811015610adb57600080fd5b5080359060208101359060408101359060600135612042565b6040805180820190915260158152742334b939ba103b34b930b61036b2b6b29032bb32b960591b602082015290565b6000610b37610b306121bb565b84846121bf565b5060015b92915050565b60145481565b60165481565b601a5490565b6009546001600160a01b031681565b601b546001600160a01b031681565b601e5481565b600d5490565b610b856121bb565b6000546001600160a01b03908116911614610bd5576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b60008111610be257600080fd5b600c8190556040805182815290517fe7451016bbe54564a97ab1bb8887f3372065e0213bd53f7557908ea1dbfa80879181900360200190a150565b610c256121bb565b6000546001600160a01b03908116911614610c75576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c805460ff60b01b1916600160b01b83151590810291909117909155600c5460408051928352602083019190915280517f9b7a23929654e960c9f5e67d1510da776cffd86bd08b7278978c38bcf6ce43819281900390910190a150565b6000610ce0848484612247565b610d5084610cec6121bb565b610d4b85604051806060016040528060288152602001613626602891396001600160a01b038a16600090815260056020526040812090610d2a6121bb565b6001600160a01b031681526020810191909152604001600020549190612417565b6121bf565b5060019392505050565b6000600e54821115610d9d5760405162461bcd60e51b815260040180806020018281038252602a815260200180613594602a913960400191505060405180910390fd5b6000610da76124ae565b9050610db383826124d1565b9150505b919050565b6001600160a01b031660009081526007602052604090205460ff1690565b601290565b610de76121bb565b6000546001600160a01b03908116911614610e37576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff16610ea4576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b600854606411610eb357600080fd5b60005b600854811015610ff257816001600160a01b031660088281548110610ed757fe5b6000918252602090912001546001600160a01b03161415610fea57600880546000198101908110610f0457fe5b600091825260209091200154600880546001600160a01b039092169183908110610f2a57fe5b6000918252602082200180546001600160a01b0319166001600160a01b039390931692909217909155610f5b6124ae565b6001600160a01b038416600090815260036020526040902054909150610f819082612513565b6001600160a01b038416600090815260026020908152604080832093909355600381528282208290556006905220805460ff191690556008805480610fc257fe5b600082815260209020810160001990810180546001600160a01b031916905501905550610ff2565b600101610eb6565b50604080516001600160a01b038316815290517fb31990b399410eeea874c2c81063feb4b5e55f66f46004a8306f10a81f031d3f9181900360200190a150565b6000610b3761103f6121bb565b84610d4b85600560006110506121bb565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061215a565b60105481565b6000600d548311156110df576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110fe5760006110ef8461256c565b50939550610b3b945050505050565b60006111098461256c565b50929550610b3b945050505050565b6111206121bb565b6000546001600160a01b03908116911614611170576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6103e88211156111c7576040805162461bcd60e51b815260206004820152601960248201527f546f74616c20666565206d757374206265203c3d203130303000000000000000604482015290519081900360640190fd5b6001600160a01b03831660008181526004602090815260408083208690556007825291829020805485151560ff199091168117909155825193845290830185905282820152517fd12bcdb5e9d1b97987843d1dc1654e96429c968a5efbc5a47dab1955052282469181900360600190a1505050565b601c546001600160a01b031681565b601c54600160a81b900460ff1681565b6112636121bb565b6000546001600160a01b039081169116146112b3576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff1615611321576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60085460641161133057600080fd5b6001600160a01b0381166000908152600260205260409020541561138a576001600160a01b03811660009081526002602052604090205461137090610d5a565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b0381166000818152600660209081526040808320805460ff191660019081179091556008805491820181559093527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390920180546001600160a01b03191684179055815192835290517f6f6f36b62c3e3a776fc3052d503097ffb886d7eb4546e768132fef82747e30b99281900390910190a150565b6001600160a01b031660009081526004602052604090205490565b60185481565b60125481565b6114566121bb565b6000546001600160a01b039081169116146114a6576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6103e86114bf826114b98581898961215a565b9061215a565b1115611512576040805162461bcd60e51b815260206004820152601a60248201527f546f74616c2066656573206d757374206265203c3d2031303030000000000000604482015290519081900360640190fd5b6010849055601283905560148290556016819055611534816114b9858561215a565b60185560408051858152602081018590528082018490526060810183905290517f747eaccb30a9769474f1620ae0dd833b1ffb89520dcac6833b33df942b7c0c499181900360800190a150505050565b6001600160a01b03811660009081526006602052604081205460ff16156115c457506001600160a01b038116600090815260036020526040902054610db7565b6001600160a01b038216600090815260026020526040902054610b3b90610d5a565b600b546001600160a01b031681565b6115fd6121bb565b6000546001600160a01b0390811691161461164d576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600a546001600160a01b031681565b600f5481565b6116b46121bb565b6000546001600160a01b03908116911614611704576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f45215203c85e400cb105104faee2424849a1f3c133e4137bb7c8fcfd5364abd2916020908290030190a150565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b031690565b6040805180820190915260068152654b494c524f5960d01b602082015290565b6117b36121bb565b6000546001600160a01b03908116911614611803576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b604051339082156108fc029083906000818181858888f19350505050158015611830573d6000803e3d6000fd5b506040805182815290517f3373c052f32575936b89b777340cd8fa8fc47f26ff5ae1620367db5ac6b9d8f49181900360200190a150565b6000610b376118746121bb565b84610d4b85604051806060016040528060258152602001613693602591396005600061189e6121bb565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612417565b6000610b376118dc6121bb565b8484612247565b6118eb6121bb565b6000546001600160a01b0390811691161461193b576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f200c92aaea275302bf641e37f7a5dda63f445f08f4fc74a5cde7fd643f609e09916020908290030190a150565b61199d6121bb565b6000546001600160a01b039081169116146119ed576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fe792dda6a0f616f273c6a9ed38ffd11a0871204bcb8cfdd55258070a7f84fa6f916020908290030190a150565b611a4f6121bb565b6000546001600160a01b03908116911614611a9f576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b601f5481565b611b006121bb565b6000546001600160a01b03908116911614611b50576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601b546001600160a01b0382811691161415611b6b57600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bab57600080fd5b505afa158015611bbf573d6000803e3d6000fd5b505050506040513d6020811015611bd557600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263e6a439059230929187169163ad5c464891600480820192602092909190829003018186803b158015611c2557600080fd5b505afa158015611c39573d6000803e3d6000fd5b505050506040513d6020811015611c4f57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b158015611c9f57600080fd5b505afa158015611cb3573d6000803e3d6000fd5b505050506040513d6020811015611cc957600080fd5b505190506001600160a01b038116611e5a57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d6020811015611d3e57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929187169163ad5c464891600480820192602092909190829003018186803b158015611d8e57600080fd5b505afa158015611da2573d6000803e3d6000fd5b505050506040513d6020811015611db857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015611e0a57600080fd5b505af1158015611e1e573d6000803e3d6000fd5b505050506040513d6020811015611e3457600080fd5b5051601c80546001600160a01b0319166001600160a01b03909216919091179055611e76565b601c80546001600160a01b0319166001600160a01b0383161790555b611e8330846000196121bf565b601b54611e9c9030906001600160a01b031660006121bf565b601b80546001600160a01b0319166001600160a01b0384811691909117909155601c5460408051868416815291909216602082015281517f842d1084f58007af8d568ff91d81878d43da3ade04078ded46330567e6bea5da929181900390910190a1505050565b601d5481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b601c54600160b01b900460ff1681565b600c5481565b611f526121bb565b6000546001600160a01b03908116911614611fa2576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b038116611fe75760405162461bcd60e51b81526004018080602001828103825260268152602001806135be6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61204a6121bb565b6000546001600160a01b0390811691161461209a576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600084116120a757600080fd5b601e548411156120b657600080fd5b600083116120c357600080fd5b6a084595161401484a0000008311156120db57600080fd5b600081116120e857600080fd5b6127108111156120f757600080fd5b601d849055601e839055602082815542602155601f8290556040805186815291820185905281810184905260608201839052517ffa1de0d454e156a6208a517053f77e0aebf802ff6a0aa7e8aacfd29e0cc3cf239181900360800190a150505050565b6000828201838110156121b4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166121d257600080fd5b6001600160a01b0382166121e557600080fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831661228c5760405162461bcd60e51b815260040180806020018281038252602581526020018061366e6025913960400191505060405180910390fd5b6001600160a01b0382166122d15760405162461bcd60e51b81526004018080602001828103825260238152602001806135716023913960400191505060405180910390fd5b6122da83611584565b8111156123185760405162461bcd60e51b81526004018080602001828103825260218152602001806135e46021913960400191505060405180910390fd5b600061232330611584565b600c5490915081116123336125bb565b6001600160a01b03851660009081526007602052604090205460ff168061237257506001600160a01b03841660009081526007602052604090205460ff165b156123835761238185856125db565b505b80801561239a5750601c54600160a01b900460ff16155b80156123b45750601c546001600160a01b03868116911614155b80156123c95750601c54600160a81b900460ff165b80156123d757506000601854115b156123fd57601c54600160b01b900460ff16156123f457600c5491505b6123fd8261276f565b61240885858561296d565b612410612a74565b5050505050565b600081848411156124a65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561246b578181015183820152602001612453565b50505050905090810190601f1680156124985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006124bb612a94565b90925090506124ca82826124d1565b9250505090565b60006121b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bf7565b60008261252257506000610b3b565b8282028284828161252f57fe5b04146121b45760405162461bcd60e51b81526004018080602001828103825260218152602001806136056021913960400191505060405180910390fd5b60008060008060008060008060006125838a612c5c565b92509250925060008060006125a18d868661259c6124ae565b612c98565b919f909e50909c50959a5093985091965092945050505050565b601054601155601854601955601454601555601254601355601654601755565b6000806126016016546114b96014546114b960125460105461215a90919063ffffffff16565b905080612612576000915050610b3b565b6001600160a01b038416600090815260076020526040902054849060ff16801561265457506001600160a01b03841660009081526007602052604090205460ff165b15612690576001600160a01b03808516600090815260046020526040808220549288168252902054116126875784612689565b835b90506126b4565b6001600160a01b03841660009081526007602052604090205460ff16156126b45750825b6001600160a01b0381166000908152600460205260409020546010546126e79084906126e1908490612513565b906124d1565b6010556012546126fe9084906126e1908490612513565b6012556014546127159084906126e1908490612513565b60145560165461272c9084906126e1908490612513565b601681905560145460125461274692916114b9919061215a565b6018556016546012546010546000926127649290916114b99161215a565b119695505050505050565b601c805460ff60a01b1916600160a01b17905560185460125460009161279a916126e1908590612513565b905060006127b96018546126e16016548661251390919063ffffffff16565b905060006127d1826127cb8686612ce8565b90612ce8565b90506000831180156127e557506000601254115b1561286e5760006127f78460026124d1565b905060006128058583612ce8565b90504761281183612d2a565b600061281d4783612ce8565b90506128298382612f08565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1505050505b60008111801561288057506000601454115b156128ea574761288f82612d2a565b600061289b4783612ce8565b6009549091506128b4906001600160a01b031682612ff3565b6040805182815290517f938f1ed4457a26afa862c76b6248f937d72279bf5fed7430c43c1d7c3356ac379181900360200190a150505b6000821180156128fc57506000601654115b1561295a57600061291e6127106126e1601f544761251390919063ffffffff16565b9050601e5481111561292f5750601e545b601d5481118015612941575042602154105b156129585761294f81613029565b60205442016021555b505b5050601c805460ff60a01b191690555050565b6001600160a01b03831660009081526006602052604090205460ff1680156129ae57506001600160a01b03821660009081526006602052604090205460ff16155b156129c3576129be838383613206565b612a6f565b6001600160a01b03831660009081526006602052604090205460ff16158015612a0457506001600160a01b03821660009081526006602052604090205460ff165b15612a14576129be83838361332a565b6001600160a01b03831660009081526006602052604090205460ff168015612a5457506001600160a01b03821660009081526006602052604090205460ff165b15612a64576129be8383836133d3565b612a6f838383613446565b505050565b601154601055601954601855601554601455601354601255601754601655565b600e54600d546000918291825b600854811015612bc557826002600060088481548110612abd57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b225750816003600060088481548110612afb57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b3957600e54600d5494509450505050612bf3565b612b796002600060088481548110612b4d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612ce8565b9250612bbb6003600060088481548110612b8f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612ce8565b9150600101612aa1565b50600d54600e54612bd5916124d1565b821015612bed57600e54600d54935093505050612bf3565b90925090505b9091565b60008183612c465760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561246b578181015183820152602001612453565b506000838581612c5257fe5b0495945050505050565b600080600080612c6b8561348a565b90506000612c78866134a7565b90506000612c8a826127cb8986612ce8565b979296509094509092505050565b6000808080612ca78886612513565b90506000612cb58887612513565b90506000612cc38888612513565b90506000612cd5826127cb8686612ce8565b939b939a50919850919650505050505050565b60006121b483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612417565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612d5857fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dac57600080fd5b505afa158015612dc0573d6000803e3d6000fd5b505050506040513d6020811015612dd657600080fd5b5051815182906001908110612de757fe5b6001600160a01b03928316602091820292909201810191909152306000908152600582526040808220601b549094168252929091522054821115612e3d57601b54612e3d9030906001600160a01b0316846121bf565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b83811015612ec3578181015183820152602001612eab565b505050509050019650505050505050600060405180830381600087803b158015612eec57600080fd5b505af1158015612f00573d6000803e3d6000fd5b505050505050565b306000908152600560209081526040808320601b546001600160a01b03168452909152902054821115612f4d57601b54612f4d9030906001600160a01b0316846121bf565b601b54600b546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612fc257600080fd5b505af1158015612fd6573d6000803e3d6000fd5b50505050506040513d6060811015612fed57600080fd5b50505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612a6f573d6000803e3d6000fd5b60408051600280825260608083018452926020830190803683375050601b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561308d57600080fd5b505afa1580156130a1573d6000803e3d6000fd5b505050506040513d60208110156130b757600080fd5b5051815182906000906130c657fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106130f457fe5b6001600160a01b03928316602091820292909201810191909152601b54600a5460405163b6f9de9560e01b8152600060048201818152928616604483018190524260648401819052608060248501908152895160848601528951969098169763b6f9de95978b9794968b9694959394909360a49091019187810191028083838b5b8381101561318d578181015183820152602001613175565b50505050905001955050505050506000604051808303818588803b1580156131b457600080fd5b505af11580156131c8573d6000803e3d6000fd5b50506040805186815290517fca881194a4e2559fbdad4caf5417634a16ff329086cc52919b656dfb1a15487f94509081900360200192509050a15050565b6000806000806000806132188761256c565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061324a9088612ce8565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546132799087612ce8565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546132a8908661215a565b6001600160a01b0389166000908152600260205260409020556132ca816134c4565b6132d4848361354c565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061333c8761256c565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061336e9087612ce8565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546133a4908461215a565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546132a8908661215a565b6000806000806000806133e58761256c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506134179088612ce8565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461336e9087612ce8565b6000806000806000806134588761256c565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506132799087612ce8565b6000610b3b6127106126e16010548561251390919063ffffffff16565b6000610b3b6127106126e16018548561251390919063ffffffff16565b60006134ce6124ae565b905060006134dc8383612513565b306000908152600260205260409020549091506134f9908261215a565b3060009081526002602090815260408083209390935560069052205460ff1615612a6f5730600090815260036020526040902054613537908461215a565b30600090815260036020526040902055505050565b600e546135599083612ce8565b600e55601a54613569908261215a565b601a55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f52e9d8651d9d39a1afc86a83571c5558d07ab0836db56ccd9c9437f12d48a8864736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80636bc87c3a11610175578063a457c2d7116100dc578063db15d18511610095578063deb4e9e61161006f578063deb4e9e614610a5b578063ee46443014610a70578063f2fde38b14610a85578063fb9c12ac14610ab8576102d4565b8063db15d185146109d8578063dccced7714610a0b578063dd62ed3e14610a20576102d4565b8063a457c2d7146108bf578063a9059cbb146108f8578063ad740f8c14610931578063bd7644b814610964578063c49b9a8014610997578063d795b97c146109c3576102d4565b80637d1db4a51161012e5780637d1db4a5146107f057806385dc30041461080557806388f82020146108385780638da5cb5b1461086b57806395d89b41146108805780639e252f0014610895576102d4565b80636bc87c3a1461072d5780636fcba3771461074257806370a082311461077e57806370d5ae05146107b1578063715018a6146107c6578063783478ad146107db576102d4565b80632d838119116102345780634549b039116101ed5780634a74bb02116101c75780634a74bb021461069d57806352390c02146106b2578063682bcb10146106e55780636883937714610718576102d4565b80634549b0391461061557806345ba883e1461064757806349bd5a5e14610688576102d4565b80632d8381191461050c578063310c165f14610536578063313ce567146105695780633685d4191461059457806339509351146105c75780633b124fe714610600576102d4565b80631694505e116102865780631694505e14610432578063178bfc6a1461044757806318160ddd1461045c5780631834848c146104715780631f1942a81461049d57806323b872dd146104c9576102d4565b806306fdde03146102d9578063095ea7b3146103635780630bfe9327146103b057806312706f04146103d757806313114a9d146103ec57806313c5d7a914610401576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610af4565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610328578181015183820152602001610310565b50505050905090810190601f1680156103555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036f57600080fd5b5061039c6004803603604081101561038657600080fd5b506001600160a01b038135169060200135610b23565b604080519115158252519081900360200190f35b3480156103bc57600080fd5b506103c5610b41565b60408051918252519081900360200190f35b3480156103e357600080fd5b506103c5610b47565b3480156103f857600080fd5b506103c5610b4d565b34801561040d57600080fd5b50610416610b53565b604080516001600160a01b039092168252519081900360200190f35b34801561043e57600080fd5b50610416610b62565b34801561045357600080fd5b506103c5610b71565b34801561046857600080fd5b506103c5610b77565b34801561047d57600080fd5b5061049b6004803603602081101561049457600080fd5b5035610b7d565b005b3480156104a957600080fd5b5061049b600480360360208110156104c057600080fd5b50351515610c1d565b3480156104d557600080fd5b5061039c600480360360608110156104ec57600080fd5b506001600160a01b03813581169160208101359091169060400135610cd3565b34801561051857600080fd5b506103c56004803603602081101561052f57600080fd5b5035610d5a565b34801561054257600080fd5b5061039c6004803603602081101561055957600080fd5b50356001600160a01b0316610dbc565b34801561057557600080fd5b5061057e610dda565b6040805160ff9092168252519081900360200190f35b3480156105a057600080fd5b5061049b600480360360208110156105b757600080fd5b50356001600160a01b0316610ddf565b3480156105d357600080fd5b5061039c600480360360408110156105ea57600080fd5b506001600160a01b038135169060200135611032565b34801561060c57600080fd5b506103c5611080565b34801561062157600080fd5b506103c56004803603604081101561063857600080fd5b50803590602001351515611086565b34801561065357600080fd5b5061049b6004803603606081101561066a57600080fd5b506001600160a01b0381351690602081013590604001351515611118565b34801561069457600080fd5b5061041661123c565b3480156106a957600080fd5b5061039c61124b565b3480156106be57600080fd5b5061049b600480360360208110156106d557600080fd5b50356001600160a01b031661125b565b3480156106f157600080fd5b506103c56004803603602081101561070857600080fd5b50356001600160a01b0316611427565b34801561072457600080fd5b506103c5611442565b34801561073957600080fd5b506103c5611448565b34801561074e57600080fd5b5061049b6004803603608081101561076557600080fd5b508035906020810135906040810135906060013561144e565b34801561078a57600080fd5b506103c5600480360360208110156107a157600080fd5b50356001600160a01b0316611584565b3480156107bd57600080fd5b506104166115e6565b3480156107d257600080fd5b5061049b6115f5565b3480156107e757600080fd5b50610416611697565b3480156107fc57600080fd5b506103c56116a6565b34801561081157600080fd5b5061049b6004803603602081101561082857600080fd5b50356001600160a01b03166116ac565b34801561084457600080fd5b5061039c6004803603602081101561085b57600080fd5b50356001600160a01b031661175e565b34801561087757600080fd5b5061041661177c565b34801561088c57600080fd5b506102ee61178b565b3480156108a157600080fd5b5061049b600480360360208110156108b857600080fd5b50356117ab565b3480156108cb57600080fd5b5061039c600480360360408110156108e257600080fd5b506001600160a01b038135169060200135611867565b34801561090457600080fd5b5061039c6004803603604081101561091b57600080fd5b506001600160a01b0381351690602001356118cf565b34801561093d57600080fd5b5061049b6004803603602081101561095457600080fd5b50356001600160a01b03166118e3565b34801561097057600080fd5b5061049b6004803603602081101561098757600080fd5b50356001600160a01b0316611995565b3480156109a357600080fd5b5061049b600480360360208110156109ba57600080fd5b50351515611a47565b3480156109cf57600080fd5b506103c5611af2565b3480156109e457600080fd5b5061049b600480360360208110156109fb57600080fd5b50356001600160a01b0316611af8565b348015610a1757600080fd5b506103c5611f03565b348015610a2c57600080fd5b506103c560048036036040811015610a4357600080fd5b506001600160a01b0381358116916020013516611f09565b348015610a6757600080fd5b5061039c611f34565b348015610a7c57600080fd5b506103c5611f44565b348015610a9157600080fd5b5061049b60048036036020811015610aa857600080fd5b50356001600160a01b0316611f4a565b348015610ac457600080fd5b5061049b60048036036080811015610adb57600080fd5b5080359060208101359060408101359060600135612042565b6040805180820190915260158152742334b939ba103b34b930b61036b2b6b29032bb32b960591b602082015290565b6000610b37610b306121bb565b84846121bf565b5060015b92915050565b60145481565b60165481565b601a5490565b6009546001600160a01b031681565b601b546001600160a01b031681565b601e5481565b600d5490565b610b856121bb565b6000546001600160a01b03908116911614610bd5576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b60008111610be257600080fd5b600c8190556040805182815290517fe7451016bbe54564a97ab1bb8887f3372065e0213bd53f7557908ea1dbfa80879181900360200190a150565b610c256121bb565b6000546001600160a01b03908116911614610c75576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c805460ff60b01b1916600160b01b83151590810291909117909155600c5460408051928352602083019190915280517f9b7a23929654e960c9f5e67d1510da776cffd86bd08b7278978c38bcf6ce43819281900390910190a150565b6000610ce0848484612247565b610d5084610cec6121bb565b610d4b85604051806060016040528060288152602001613626602891396001600160a01b038a16600090815260056020526040812090610d2a6121bb565b6001600160a01b031681526020810191909152604001600020549190612417565b6121bf565b5060019392505050565b6000600e54821115610d9d5760405162461bcd60e51b815260040180806020018281038252602a815260200180613594602a913960400191505060405180910390fd5b6000610da76124ae565b9050610db383826124d1565b9150505b919050565b6001600160a01b031660009081526007602052604090205460ff1690565b601290565b610de76121bb565b6000546001600160a01b03908116911614610e37576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff16610ea4576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b600854606411610eb357600080fd5b60005b600854811015610ff257816001600160a01b031660088281548110610ed757fe5b6000918252602090912001546001600160a01b03161415610fea57600880546000198101908110610f0457fe5b600091825260209091200154600880546001600160a01b039092169183908110610f2a57fe5b6000918252602082200180546001600160a01b0319166001600160a01b039390931692909217909155610f5b6124ae565b6001600160a01b038416600090815260036020526040902054909150610f819082612513565b6001600160a01b038416600090815260026020908152604080832093909355600381528282208290556006905220805460ff191690556008805480610fc257fe5b600082815260209020810160001990810180546001600160a01b031916905501905550610ff2565b600101610eb6565b50604080516001600160a01b038316815290517fb31990b399410eeea874c2c81063feb4b5e55f66f46004a8306f10a81f031d3f9181900360200190a150565b6000610b3761103f6121bb565b84610d4b85600560006110506121bb565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061215a565b60105481565b6000600d548311156110df576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110fe5760006110ef8461256c565b50939550610b3b945050505050565b60006111098461256c565b50929550610b3b945050505050565b6111206121bb565b6000546001600160a01b03908116911614611170576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6103e88211156111c7576040805162461bcd60e51b815260206004820152601960248201527f546f74616c20666565206d757374206265203c3d203130303000000000000000604482015290519081900360640190fd5b6001600160a01b03831660008181526004602090815260408083208690556007825291829020805485151560ff199091168117909155825193845290830185905282820152517fd12bcdb5e9d1b97987843d1dc1654e96429c968a5efbc5a47dab1955052282469181900360600190a1505050565b601c546001600160a01b031681565b601c54600160a81b900460ff1681565b6112636121bb565b6000546001600160a01b039081169116146112b3576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff1615611321576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60085460641161133057600080fd5b6001600160a01b0381166000908152600260205260409020541561138a576001600160a01b03811660009081526002602052604090205461137090610d5a565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b0381166000818152600660209081526040808320805460ff191660019081179091556008805491820181559093527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390920180546001600160a01b03191684179055815192835290517f6f6f36b62c3e3a776fc3052d503097ffb886d7eb4546e768132fef82747e30b99281900390910190a150565b6001600160a01b031660009081526004602052604090205490565b60185481565b60125481565b6114566121bb565b6000546001600160a01b039081169116146114a6576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6103e86114bf826114b98581898961215a565b9061215a565b1115611512576040805162461bcd60e51b815260206004820152601a60248201527f546f74616c2066656573206d757374206265203c3d2031303030000000000000604482015290519081900360640190fd5b6010849055601283905560148290556016819055611534816114b9858561215a565b60185560408051858152602081018590528082018490526060810183905290517f747eaccb30a9769474f1620ae0dd833b1ffb89520dcac6833b33df942b7c0c499181900360800190a150505050565b6001600160a01b03811660009081526006602052604081205460ff16156115c457506001600160a01b038116600090815260036020526040902054610db7565b6001600160a01b038216600090815260026020526040902054610b3b90610d5a565b600b546001600160a01b031681565b6115fd6121bb565b6000546001600160a01b0390811691161461164d576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600a546001600160a01b031681565b600f5481565b6116b46121bb565b6000546001600160a01b03908116911614611704576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f45215203c85e400cb105104faee2424849a1f3c133e4137bb7c8fcfd5364abd2916020908290030190a150565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b031690565b6040805180820190915260068152654b494c524f5960d01b602082015290565b6117b36121bb565b6000546001600160a01b03908116911614611803576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b604051339082156108fc029083906000818181858888f19350505050158015611830573d6000803e3d6000fd5b506040805182815290517f3373c052f32575936b89b777340cd8fa8fc47f26ff5ae1620367db5ac6b9d8f49181900360200190a150565b6000610b376118746121bb565b84610d4b85604051806060016040528060258152602001613693602591396005600061189e6121bb565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612417565b6000610b376118dc6121bb565b8484612247565b6118eb6121bb565b6000546001600160a01b0390811691161461193b576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f200c92aaea275302bf641e37f7a5dda63f445f08f4fc74a5cde7fd643f609e09916020908290030190a150565b61199d6121bb565b6000546001600160a01b039081169116146119ed576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fe792dda6a0f616f273c6a9ed38ffd11a0871204bcb8cfdd55258070a7f84fa6f916020908290030190a150565b611a4f6121bb565b6000546001600160a01b03908116911614611a9f576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b601f5481565b611b006121bb565b6000546001600160a01b03908116911614611b50576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601b546001600160a01b0382811691161415611b6b57600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bab57600080fd5b505afa158015611bbf573d6000803e3d6000fd5b505050506040513d6020811015611bd557600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263e6a439059230929187169163ad5c464891600480820192602092909190829003018186803b158015611c2557600080fd5b505afa158015611c39573d6000803e3d6000fd5b505050506040513d6020811015611c4f57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b158015611c9f57600080fd5b505afa158015611cb3573d6000803e3d6000fd5b505050506040513d6020811015611cc957600080fd5b505190506001600160a01b038116611e5a57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d6020811015611d3e57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929187169163ad5c464891600480820192602092909190829003018186803b158015611d8e57600080fd5b505afa158015611da2573d6000803e3d6000fd5b505050506040513d6020811015611db857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015611e0a57600080fd5b505af1158015611e1e573d6000803e3d6000fd5b505050506040513d6020811015611e3457600080fd5b5051601c80546001600160a01b0319166001600160a01b03909216919091179055611e76565b601c80546001600160a01b0319166001600160a01b0383161790555b611e8330846000196121bf565b601b54611e9c9030906001600160a01b031660006121bf565b601b80546001600160a01b0319166001600160a01b0384811691909117909155601c5460408051868416815291909216602082015281517f842d1084f58007af8d568ff91d81878d43da3ade04078ded46330567e6bea5da929181900390910190a1505050565b601d5481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b601c54600160b01b900460ff1681565b600c5481565b611f526121bb565b6000546001600160a01b03908116911614611fa2576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b038116611fe75760405162461bcd60e51b81526004018080602001828103825260268152602001806135be6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61204a6121bb565b6000546001600160a01b0390811691161461209a576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600084116120a757600080fd5b601e548411156120b657600080fd5b600083116120c357600080fd5b6a084595161401484a0000008311156120db57600080fd5b600081116120e857600080fd5b6127108111156120f757600080fd5b601d849055601e839055602082815542602155601f8290556040805186815291820185905281810184905260608201839052517ffa1de0d454e156a6208a517053f77e0aebf802ff6a0aa7e8aacfd29e0cc3cf239181900360800190a150505050565b6000828201838110156121b4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166121d257600080fd5b6001600160a01b0382166121e557600080fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831661228c5760405162461bcd60e51b815260040180806020018281038252602581526020018061366e6025913960400191505060405180910390fd5b6001600160a01b0382166122d15760405162461bcd60e51b81526004018080602001828103825260238152602001806135716023913960400191505060405180910390fd5b6122da83611584565b8111156123185760405162461bcd60e51b81526004018080602001828103825260218152602001806135e46021913960400191505060405180910390fd5b600061232330611584565b600c5490915081116123336125bb565b6001600160a01b03851660009081526007602052604090205460ff168061237257506001600160a01b03841660009081526007602052604090205460ff165b156123835761238185856125db565b505b80801561239a5750601c54600160a01b900460ff16155b80156123b45750601c546001600160a01b03868116911614155b80156123c95750601c54600160a81b900460ff165b80156123d757506000601854115b156123fd57601c54600160b01b900460ff16156123f457600c5491505b6123fd8261276f565b61240885858561296d565b612410612a74565b5050505050565b600081848411156124a65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561246b578181015183820152602001612453565b50505050905090810190601f1680156124985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006124bb612a94565b90925090506124ca82826124d1565b9250505090565b60006121b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bf7565b60008261252257506000610b3b565b8282028284828161252f57fe5b04146121b45760405162461bcd60e51b81526004018080602001828103825260218152602001806136056021913960400191505060405180910390fd5b60008060008060008060008060006125838a612c5c565b92509250925060008060006125a18d868661259c6124ae565b612c98565b919f909e50909c50959a5093985091965092945050505050565b601054601155601854601955601454601555601254601355601654601755565b6000806126016016546114b96014546114b960125460105461215a90919063ffffffff16565b905080612612576000915050610b3b565b6001600160a01b038416600090815260076020526040902054849060ff16801561265457506001600160a01b03841660009081526007602052604090205460ff165b15612690576001600160a01b03808516600090815260046020526040808220549288168252902054116126875784612689565b835b90506126b4565b6001600160a01b03841660009081526007602052604090205460ff16156126b45750825b6001600160a01b0381166000908152600460205260409020546010546126e79084906126e1908490612513565b906124d1565b6010556012546126fe9084906126e1908490612513565b6012556014546127159084906126e1908490612513565b60145560165461272c9084906126e1908490612513565b601681905560145460125461274692916114b9919061215a565b6018556016546012546010546000926127649290916114b99161215a565b119695505050505050565b601c805460ff60a01b1916600160a01b17905560185460125460009161279a916126e1908590612513565b905060006127b96018546126e16016548661251390919063ffffffff16565b905060006127d1826127cb8686612ce8565b90612ce8565b90506000831180156127e557506000601254115b1561286e5760006127f78460026124d1565b905060006128058583612ce8565b90504761281183612d2a565b600061281d4783612ce8565b90506128298382612f08565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1505050505b60008111801561288057506000601454115b156128ea574761288f82612d2a565b600061289b4783612ce8565b6009549091506128b4906001600160a01b031682612ff3565b6040805182815290517f938f1ed4457a26afa862c76b6248f937d72279bf5fed7430c43c1d7c3356ac379181900360200190a150505b6000821180156128fc57506000601654115b1561295a57600061291e6127106126e1601f544761251390919063ffffffff16565b9050601e5481111561292f5750601e545b601d5481118015612941575042602154105b156129585761294f81613029565b60205442016021555b505b5050601c805460ff60a01b191690555050565b6001600160a01b03831660009081526006602052604090205460ff1680156129ae57506001600160a01b03821660009081526006602052604090205460ff16155b156129c3576129be838383613206565b612a6f565b6001600160a01b03831660009081526006602052604090205460ff16158015612a0457506001600160a01b03821660009081526006602052604090205460ff165b15612a14576129be83838361332a565b6001600160a01b03831660009081526006602052604090205460ff168015612a5457506001600160a01b03821660009081526006602052604090205460ff165b15612a64576129be8383836133d3565b612a6f838383613446565b505050565b601154601055601954601855601554601455601354601255601754601655565b600e54600d546000918291825b600854811015612bc557826002600060088481548110612abd57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b225750816003600060088481548110612afb57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b3957600e54600d5494509450505050612bf3565b612b796002600060088481548110612b4d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612ce8565b9250612bbb6003600060088481548110612b8f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612ce8565b9150600101612aa1565b50600d54600e54612bd5916124d1565b821015612bed57600e54600d54935093505050612bf3565b90925090505b9091565b60008183612c465760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561246b578181015183820152602001612453565b506000838581612c5257fe5b0495945050505050565b600080600080612c6b8561348a565b90506000612c78866134a7565b90506000612c8a826127cb8986612ce8565b979296509094509092505050565b6000808080612ca78886612513565b90506000612cb58887612513565b90506000612cc38888612513565b90506000612cd5826127cb8686612ce8565b939b939a50919850919650505050505050565b60006121b483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612417565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612d5857fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dac57600080fd5b505afa158015612dc0573d6000803e3d6000fd5b505050506040513d6020811015612dd657600080fd5b5051815182906001908110612de757fe5b6001600160a01b03928316602091820292909201810191909152306000908152600582526040808220601b549094168252929091522054821115612e3d57601b54612e3d9030906001600160a01b0316846121bf565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b83811015612ec3578181015183820152602001612eab565b505050509050019650505050505050600060405180830381600087803b158015612eec57600080fd5b505af1158015612f00573d6000803e3d6000fd5b505050505050565b306000908152600560209081526040808320601b546001600160a01b03168452909152902054821115612f4d57601b54612f4d9030906001600160a01b0316846121bf565b601b54600b546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612fc257600080fd5b505af1158015612fd6573d6000803e3d6000fd5b50505050506040513d6060811015612fed57600080fd5b50505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612a6f573d6000803e3d6000fd5b60408051600280825260608083018452926020830190803683375050601b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561308d57600080fd5b505afa1580156130a1573d6000803e3d6000fd5b505050506040513d60208110156130b757600080fd5b5051815182906000906130c657fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106130f457fe5b6001600160a01b03928316602091820292909201810191909152601b54600a5460405163b6f9de9560e01b8152600060048201818152928616604483018190524260648401819052608060248501908152895160848601528951969098169763b6f9de95978b9794968b9694959394909360a49091019187810191028083838b5b8381101561318d578181015183820152602001613175565b50505050905001955050505050506000604051808303818588803b1580156131b457600080fd5b505af11580156131c8573d6000803e3d6000fd5b50506040805186815290517fca881194a4e2559fbdad4caf5417634a16ff329086cc52919b656dfb1a15487f94509081900360200192509050a15050565b6000806000806000806132188761256c565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061324a9088612ce8565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546132799087612ce8565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546132a8908661215a565b6001600160a01b0389166000908152600260205260409020556132ca816134c4565b6132d4848361354c565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061333c8761256c565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061336e9087612ce8565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546133a4908461215a565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546132a8908661215a565b6000806000806000806133e58761256c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506134179088612ce8565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461336e9087612ce8565b6000806000806000806134588761256c565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506132799087612ce8565b6000610b3b6127106126e16010548561251390919063ffffffff16565b6000610b3b6127106126e16018548561251390919063ffffffff16565b60006134ce6124ae565b905060006134dc8383612513565b306000908152600260205260409020549091506134f9908261215a565b3060009081526002602090815260408083209390935560069052205460ff1615612a6f5730600090815260036020526040902054613537908461215a565b30600090815260036020526040902055505050565b600e546135599083612ce8565b600e55601a54613569908261215a565b601a55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f52e9d8651d9d39a1afc86a83571c5558d07ab0836db56ccd9c9437f12d48a8864736f6c634300060c0033

Deployed Bytecode Sourcemap

26045:26530:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30710:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31644:163;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31644:163:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;27448:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27541:30;;;;;;;;;;;;;:::i;32785:89::-;;;;;;;;;;;;;:::i;26534:95::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;26534:95:0;;;;;;;;;;;;;;27765:41;;;;;;;;;;;;;:::i;28179:49::-;;;;;;;;;;;;;:::i;30993:97::-;;;;;;;;;;;;;:::i;38716:190::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38716:190:0;;:::i;:::-;;38496:212;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38496:212:0;;;;:::i;31815:315::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31815:315:0;;;;;;;;;;;;;;;;;:::i;33328:252::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33328:252:0;;:::i;33588:129::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33588:129:0;-1:-1:-1;;;;;33588:129:0;;:::i;30900:85::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37528:775;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37528:775:0;-1:-1:-1;;;;;37528:775:0;;:::i;32138:220::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32138:220:0;;;;;;;;:::i;27266:26::-;;;;;;;;;;;;;:::i;32882:438::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32882:438:0;;;;;;;;;:::i;35820:294::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35820:294:0;;;;;;;;;;;;;;;:::i;27813:28::-;;;;;;;;;;;;;:::i;27896:40::-;;;;;;;;;;;;;:::i;37059:461::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37059:461:0;-1:-1:-1;;;;;37059:461:0;;:::i;33725:125::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33725:125:0;-1:-1:-1;;;;;33725:125:0;;:::i;27632:31::-;;;;;;;;;;;;;:::i;27349:34::-;;;;;;;;;;;;;:::i;35212:600::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35212:600:0;;;;;;;;;;;;;;;;;:::i;31098:208::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31098:208:0;-1:-1:-1;;;;;31098:208:0;;:::i;26734:88::-;;;;;;;;;;;;;:::i;17526:148::-;;;;;;;;;;;;;:::i;26636:91::-;;;;;;;;;;;;;:::i;27046:48::-;;;;;;;;;;;;;:::i;35029:176::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35029:176:0;-1:-1:-1;;;;;35029:176:0;;:::i;32645:132::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32645:132:0;-1:-1:-1;;;;;32645:132:0;;:::i;16883:79::-;;;;;;;;;;;;;:::i;30803:89::-;;;;;;;;;;;;;:::i;38951:146::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38951:146:0;;:::i;32366:271::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32366:271:0;;;;;;;;:::i;31314:169::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31314:169:0;;;;;;;;:::i;36877:174::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36877:174:0;-1:-1:-1;;;;;36877:174:0;;:::i;34856:165::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34856:165:0;-1:-1:-1;;;;;34856:165:0;;:::i;38311:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38311:173:0;;;;:::i;28235:34::-;;;;;;;;;;;;;:::i;33858:990::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33858:990:0;-1:-1:-1;;;;;33858:990:0;;:::i;28123:49::-;;;;;;;;;;;;;:::i;31491:145::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31491:145:0;;;;;;;;;;:::i;27943:49::-;;;;;;;;;;;;;:::i;26831:::-;;;;;;;;;;;;;:::i;17829:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17829:244:0;-1:-1:-1;;;;;17829:244:0;;:::i;36122:747::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36122:747:0;;;;;;;;;;;;;;;;;:::i;30710:85::-;30782:5;;;;;;;;;;;;-1:-1:-1;;;30782:5:0;;;;30710:85;:::o;31644:163::-;31721:4;31738:39;31747:12;:10;:12::i;:::-;31761:7;31770:6;31738:8;:39::i;:::-;-1:-1:-1;31795:4:0;31644:163;;;;;:::o;27448:32::-;;;;:::o;27541:30::-;;;;:::o;32785:89::-;32856:10;;32785:89;:::o;26534:95::-;;;-1:-1:-1;;;;;26534:95:0;;:::o;27765:41::-;;;-1:-1:-1;;;;;27765:41:0;;:::o;28179:49::-;;;;:::o;30993:97::-;31075:7;;30993:97;:::o;38716:190::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;38816:1:::1;38807:6;:10;38798:21;;;::::0;::::1;;38830:15;:24:::0;;;38872:26:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;38716:190:::0;:::o;38496:212::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;38584:30:::1;:41:::0;;-1:-1:-1;;;;38584:41:0::1;-1:-1:-1::0;;;38584:41:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;38684:15:::1;::::0;38643:57:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;38496:212:::0;:::o;31815:315::-;31915:4;31932:36;31942:6;31950:9;31961:6;31932:9;:36::i;:::-;31979:121;31988:6;31996:12;:10;:12::i;:::-;32010:89;32048:6;32010:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32010:19:0;;;;;;:11;:19;;;;;;32030:12;:10;:12::i;:::-;-1:-1:-1;;;;;32010:33:0;;;;;;;;;;;;-1:-1:-1;32010:33:0;;;:89;:37;:89::i;:::-;31979:8;:121::i;:::-;-1:-1:-1;32118:4:0;31815:315;;;;;:::o;33328:252::-;33394:7;33433;;33422;:18;;33414:73;;;;-1:-1:-1;;;33414:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33498:19;33520:10;:8;:10::i;:::-;33498:32;-1:-1:-1;33548:24:0;:7;33498:32;33548:11;:24::i;:::-;33541:31;;;33328:252;;;;:::o;33588:129::-;-1:-1:-1;;;;;33684:25:0;33660:4;33684:25;;;:14;:25;;;;;;;;;33588:129::o;30900:85::-;27251:2;30900:85;:::o;37528:775::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37610:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;37602:70;;;::::0;;-1:-1:-1;;;37602:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37691:19;:26:::0;37720:3:::1;-1:-1:-1::0;37683:41:0::1;;;::::0;::::1;;37740:9;37735:519;37759:19;:26:::0;37755:30;::::1;37735:519;;;37837:7;-1:-1:-1::0;;;;;37811:33:0::1;:19;37831:1;37811:22;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37811:22:0::1;:33;37807:436;;;37890:19;37910:26:::0;;-1:-1:-1;;37910:30:0;;;37890:51;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;37865:19:::1;:22:::0;;-1:-1:-1;;;;;37890:51:0;;::::1;::::0;37885:1;;37865:22;::::1;;;;;;::::0;;;::::1;::::0;;::::1;:76:::0;;-1:-1:-1;;;;;;37865:76:0::1;-1:-1:-1::0;;;;;37865:76:0;;;::::1;::::0;;;::::1;::::0;;;37982:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;38030:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37960:32;;-1:-1:-1;38030:33:0::1;::::0;37960:32;38030:20:::1;:33::i;:::-;-1:-1:-1::0;;;;;38011:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:52;;;;38082:7:::1;:16:::0;;;;;:20;;;38121:21:::1;:30:::0;;;:38;;-1:-1:-1;;38121:38:0::1;::::0;;38178:19:::1;:25:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;38178:25:0;;;;;-1:-1:-1;;;;;;38178:25:0::1;::::0;;;;;-1:-1:-1;38222:5:0::1;;37807:436;37787:3;;37735:519;;;-1:-1:-1::0;38271:24:0::1;::::0;;-1:-1:-1;;;;;38271:24:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;37528:775:::0;:::o;32138:220::-;32228:4;32245:83;32254:12;:10;:12::i;:::-;32268:7;32277:50;32316:10;32277:11;:25;32289:12;:10;:12::i;:::-;-1:-1:-1;;;;;32277:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;32277:25:0;;;:34;;;;;;;;;;;:38;:50::i;27266:26::-;;;;:::o;32882:438::-;32974:7;33013;;33002;:18;;32994:62;;;;;-1:-1:-1;;;32994:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33072:17;33067:246;;33107:15;33131:19;33142:7;33131:10;:19::i;:::-;-1:-1:-1;33106:44:0;;-1:-1:-1;33165:14:0;;-1:-1:-1;;;;;33165:14:0;33067:246;33214:23;33245:19;33256:7;33245:10;:19::i;:::-;-1:-1:-1;33212:52:0;;-1:-1:-1;33279:22:0;;-1:-1:-1;;;;;33279:22:0;35820:294;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;35932:4:::1;35922:6;:14;;35913:54;;;::::0;;-1:-1:-1;;;35913:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;35980:23:0;::::1;;::::0;;;:12:::1;:23;::::0;;;;;;;:32;;;36023:14:::1;:25:::0;;;;;;:35;;;::::1;;-1:-1:-1::0;;36023:35:0;;::::1;::::0;::::1;::::0;;;36074:32;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;;;;;;::::1;35820:294:::0;;;:::o;27813:28::-;;;-1:-1:-1;;;;;27813:28:0;;:::o;27896:40::-;;;-1:-1:-1;;;27896:40:0;;;;;:::o;37059:461::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37144:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;37143:31;37135:71;;;::::0;;-1:-1:-1;;;37135:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37225:19;:26:::0;37254:3:::1;-1:-1:-1::0;37217:41:0::1;;;::::0;::::1;;-1:-1:-1::0;;;;;37272:16:0;::::1;37291:1;37272:16:::0;;;:7:::1;:16;::::0;;;;;:20;37269:108:::1;;-1:-1:-1::0;;;;;37348:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37328:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;37309:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;37269:108:::1;-1:-1:-1::0;;;;;37387:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;;;:37;;-1:-1:-1;;37387:37:0::1;37420:4;37387:37:::0;;::::1;::::0;;;37435:19:::1;:33:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;37435:33:0::1;::::0;::::1;::::0;;37486:26;;;;;;;::::1;::::0;;;;;;;;::::1;37059:461:::0;:::o;33725:125::-;-1:-1:-1;;;;;33819:23:0;33791:7;33819:23;;;:12;:23;;;;;;;33725:125::o;27632:31::-;;;;:::o;27349:34::-;;;;:::o;35212:600::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;35440:4:::1;35364:71;35421:13:::0;35364:52:::1;35402:13:::0;35364:52;:12;35381:15;35364:16:::1;:33::i;:::-;:37:::0;::::1;:52::i;:71::-;35363:81;;35354:122;;;::::0;;-1:-1:-1;;;35354:122:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35497:7;:22:::0;;;35530:13:::1;:31:::0;;;35572:11:::1;:27:::0;;;35610:11:::1;:27:::0;;;35663:47:::1;35624:13:::0;35663:30:::1;35546:15:::0;35586:13;35663:17:::1;:30::i;:47::-;35648:12;:62:::0;35736:68:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;35212:600:::0;;;;:::o;31098:208::-;-1:-1:-1;;;;;31188:30:0;;31164:7;31188:30;;;:21;:30;;;;;;;;31184:59;;;-1:-1:-1;;;;;;31227:16:0;;;;;;:7;:16;;;;;;31220:23;;31184:59;-1:-1:-1;;;;;31281:16:0;;;;;;:7;:16;;;;;;31261:37;;:19;:37::i;26734:88::-;;;-1:-1:-1;;;;;26734:88:0;;:::o;17526:148::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;17633:1:::1;17617:6:::0;;17596:40:::1;::::0;-1:-1:-1;;;;;17617:6:0;;::::1;::::0;17596:40:::1;::::0;17633:1;;17596:40:::1;17664:1;17647:19:::0;;-1:-1:-1;;;;;;17647:19:0::1;::::0;;17526:148::o;26636:91::-;;;-1:-1:-1;;;;;26636:91:0;;:::o;27046:48::-;;;;:::o;35029:176::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;35105:18:::1;:40:::0;;-1:-1:-1;;;;;;35105:40:0::1;-1:-1:-1::0;;;;;35105:40:0;;::::1;::::0;;;::::1;::::0;;;;35163:34:::1;::::0;;35178:18;;;::::1;35163:34:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;35029:176:::0;:::o;32645:132::-;-1:-1:-1;;;;;32739:30:0;32715:4;32739:30;;;:21;:30;;;;;;;;;32645:132::o;16883:79::-;16921:7;16948:6;-1:-1:-1;;;;;16948:6:0;16883:79;:::o;30803:89::-;30877:7;;;;;;;;;;;;-1:-1:-1;;;30877:7:0;;;;30803:89;:::o;38951:146::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;39016:38:::1;::::0;39025:10:::1;::::0;39016:38;::::1;;;::::0;39047:6;;39016:38:::1;::::0;;;39047:6;39025:10;39016:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;39072:17:0::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;38951:146:::0;:::o;32366:271::-;32461:4;32478:129;32487:12;:10;:12::i;:::-;32501:7;32510:96;32549:15;32510:96;;;;;;;;;;;;;;;;;:11;:25;32522:12;:10;:12::i;:::-;-1:-1:-1;;;;;32510:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;32510:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;31314:169::-;31394:4;31411:42;31421:12;:10;:12::i;:::-;31435:9;31446:6;31411:9;:42::i;36877:174::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;36956:14:::1;:36:::0;;-1:-1:-1;;;;;;36956:36:0::1;-1:-1:-1::0;;;;;36956:36:0;;::::1;::::0;;;::::1;::::0;;;;37010:33:::1;::::0;;37028:14;;;::::1;37010:33:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;36877:174:::0;:::o;34856:165::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;34936:13:::1;:23:::0;;-1:-1:-1;;;;;;34936:23:0::1;-1:-1:-1::0;;;;;34936:23:0;;::::1;::::0;;;::::1;::::0;;;;34977:36:::1;::::0;;34999:13;;;::::1;34977:36:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;34856:165:::0;:::o;38311:173::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;38390:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;38390:32:0;::::1;-1:-1:-1::0;;;;38390:32:0;;::::1;::::0;;;::::1;::::0;;;38438:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;38311:173:::0;:::o;28235:34::-;;;;:::o;33858:990::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;33962:15:::1;::::0;-1:-1:-1;;;;;33954:41:0;;::::1;33962:15:::0;::::1;33954:41;;33946:50;;;::::0;::::1;;34007:28;34058:13;34007:66;;34148:12;34181:9;-1:-1:-1::0;;;;;34181:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34181:19:0;34225:16:::1;::::0;;-1:-1:-1;;;34225:16:0;;;;-1:-1:-1;;;;;34163:46:0;;::::1;::::0;::::1;::::0;34218:4:::1;::::0;34225:14;;::::1;::::0;::::1;::::0;:16:::1;::::0;;::::1;::::0;34181:19:::1;::::0;34225:16;;;;;;;;:14;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34225:16:0;34163:79:::1;::::0;;-1:-1:-1;;;;;;34163:79:0::1;::::0;;;;;;-1:-1:-1;;;;;34163:79:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;34225:16:::1;::::0;34163:79;;;;;;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34163:79:0;;-1:-1:-1;;;;;;34257:18:0;::::1;34253:211;;34326:9;-1:-1:-1::0;;;;;34326:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34326:19:0;34373:16:::1;::::0;;-1:-1:-1;;;34373:16:0;;;;-1:-1:-1;;;;;34308:49:0;;::::1;::::0;::::1;::::0;34366:4:::1;::::0;34373:14;;::::1;::::0;::::1;::::0;:16:::1;::::0;;::::1;::::0;34326:19:::1;::::0;34373:16;;;;;;;;:14;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34373:16:0;34308:82:::1;::::0;;-1:-1:-1;;;;;;34308:82:0::1;::::0;;;;;;-1:-1:-1;;;;;34308:82:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;34373:16:::1;::::0;34308:82;;;;;;;-1:-1:-1;34308:82:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34308:82:0;34292:13:::1;:98:::0;;-1:-1:-1;;;;;;34292:98:0::1;-1:-1:-1::0;;;;;34292:98:0;;::::1;::::0;;;::::1;::::0;;34253:211:::1;;;34432:13;:20:::0;;-1:-1:-1;;;;;;34432:20:0::1;-1:-1:-1::0;;;;;34432:20:0;::::1;;::::0;;34253:211:::1;34532:45;34550:4;34557:13:::0;-1:-1:-1;;34532:8:0::1;:45::i;:::-;34664:15;::::0;34631:53:::1;::::0;34649:4:::1;::::0;-1:-1:-1;;;;;34664:15:0::1;;34631:8;:53::i;:::-;34722:15;:47:::0;;-1:-1:-1;;;;;;34722:47:0::1;-1:-1:-1::0;;;;;34722:47:0;;::::1;::::0;;;::::1;::::0;;;34826:13:::1;::::0;34787:53:::1;::::0;;;;::::1;::::0;;34826:13;;;::::1;34787:53;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;17165:1;;33858:990:::0;:::o;28123:49::-;;;;:::o;31491:145::-;-1:-1:-1;;;;;31601:18:0;;;31574:7;31601:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31491:145::o;27943:49::-;;;-1:-1:-1;;;27943:49:0;;;;;:::o;26831:::-;;;;:::o;17829:244::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17918:22:0;::::1;17910:73;;;;-1:-1:-1::0;;;17910:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18020:6;::::0;;17999:38:::1;::::0;-1:-1:-1;;;;;17999:38:0;;::::1;::::0;18020:6;::::1;::::0;17999:38:::1;::::0;::::1;18048:6;:17:::0;;-1:-1:-1;;;;;;18048:17:0::1;-1:-1:-1::0;;;;;18048:17:0;;;::::1;::::0;;;::::1;::::0;;17829:244::o;36122:747::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;28043:1:::1;36279:9;:26;36270:37;;;::::0;::::1;;36340:17;;36327:9;:30;;36318:40;;;::::0;::::1;;28043:1;36379:9;:26;36370:37;;;::::0;::::1;;28094:21;36427:9;:27;;36418:38;;;::::0;::::1;;36490:1;36476:11;:15;36467:26;;;::::0;::::1;;36529:7;36513:11;:24;;36504:34;;;::::0;::::1;;36552:17;:29:::0;;;36592:17:::1;:29:::0;;;36632:24:::1;:43:::0;;;36715:15:::1;36686:25;:44:::0;36741:12:::1;:26:::0;;;36785:76:::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;36122:747:::0;;;;:::o;11374:181::-;11432:7;11464:5;;;11488:6;;;;11480:46;;;;;-1:-1:-1;;;11480:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11546:1;11374:181;-1:-1:-1;;;11374:181:0:o;7610:106::-;7698:10;7610:106;:::o;43589:261::-;-1:-1:-1;;;;;43682:19:0;;43674:29;;;;;;-1:-1:-1;;;;;43722:21:0;;43714:31;;;;;;-1:-1:-1;;;;;43758:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;43810:32;;;;;;;;;;;;;;;;;43589:261;;;:::o;43858:1658::-;-1:-1:-1;;;;;43980:18:0;;43972:68;;;;-1:-1:-1;;;43972:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44059:16:0;;44051:64;;;;-1:-1:-1;;;44051:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44144:15;44154:4;44144:9;:15::i;:::-;44134:6;:25;;44126:71;;;;-1:-1:-1;;;44126:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44276:28;44307:24;44325:4;44307:9;:24::i;:::-;44392:15;;44276:55;;-1:-1:-1;44369:38:0;;44466:13;:11;:13::i;:::-;-1:-1:-1;;;;;44549:20:0;;;;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;44573:18:0;;;;;;:14;:18;;;;;;;;44549:42;44545:98;;;44609:22;44623:4;44628:2;44609:13;:22::i;:::-;;44545:98;44955:19;:53;;;;-1:-1:-1;44992:16:0;;-1:-1:-1;;;44992:16:0;;;;44991:17;44955:53;:91;;;;-1:-1:-1;45033:13:0;;-1:-1:-1;;;;;45025:21:0;;;45033:13;;45025:21;;44955:91;:129;;;;-1:-1:-1;45063:21:0;;-1:-1:-1;;;45063:21:0;;;;44955:129;:162;;;;;45116:1;45101:12;;:16;44955:162;44937:393;;;45148:30;;-1:-1:-1;;;45148:30:0;;;;45144:110;;;45223:15;;45200:38;;45144:110;45282:36;45297:20;45282:14;:36::i;:::-;45416:30;45431:4;45436:2;45439:6;45416:14;:30::i;:::-;45492:16;:14;:16::i;:::-;43858:1658;;;;;:::o;12277:192::-;12363:7;12399:12;12391:6;;;;12383:29;;;;-1:-1:-1;;;12383:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12435:5:0;;;12277:192::o;40464:163::-;40505:7;40526:15;40543;40562:19;:17;:19::i;:::-;40525:56;;-1:-1:-1;40525:56:0;-1:-1:-1;40599:20:0;40525:56;;40599:11;:20::i;:::-;40592:27;;;;40464:163;:::o;13675:132::-;13733:7;13760:39;13764:1;13767;13760:39;;;;;;;;;;;;;;;;;:3;:39::i;12728:471::-;12786:7;13031:6;13027:47;;-1:-1:-1;13061:1:0;13054:8;;13027:47;13098:5;;;13102:1;13098;:5;:1;13122:5;;;;;:10;13114:56;;;;-1:-1:-1;;;13114:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39262:419;39321:7;39330;39339;39348;39357;39366;39387:23;39412:12;39426:18;39448:20;39460:7;39448:11;:20::i;:::-;39386:82;;;;;;39480:15;39497:23;39522:12;39538:50;39550:7;39559:4;39565:10;39577;:8;:10::i;:::-;39538:11;:50::i;:::-;39479:109;;;;-1:-1:-1;39479:109:0;;-1:-1:-1;39639:15:0;;-1:-1:-1;39656:4:0;;-1:-1:-1;39662:10:0;;-1:-1:-1;39262:419:0;;-1:-1:-1;;;;;39262:419:0:o;41970:237::-;42026:7;;42012:11;:21;42063:12;;42044:16;:31;42104:11;;42086:15;:29;42146:13;;42126:17;:33;42188:11;;42170:15;:29;41970:237::o;42217:1115::-;42283:4;42310:16;42329:60;42377:11;;42329:43;42360:11;;42329:26;42341:13;;42329:7;;:11;;:26;;;;:::i;:60::-;42310:79;-1:-1:-1;42404:13:0;42400:77;;42442:5;42435:12;;;;;42400:77;-1:-1:-1;;;;;42602:20:0;;42556:24;42602:20;;;:14;:20;;;;;;42583:4;;42602:20;;:42;;;;-1:-1:-1;;;;;;42626:18:0;;;;;;:14;:18;;;;;;;;42602:42;42598:227;;;-1:-1:-1;;;;;42703:16:0;;;;;;;:12;:16;;;;;;;42682:18;;;;;;;;:37;:49;;42727:4;42682:49;;;42722:2;42682:49;42661:72;;42598:227;;;-1:-1:-1;;;;;42756:18:0;;;;;;:14;:18;;;;;;;;42751:74;;;-1:-1:-1;42811:2:0;42751:74;-1:-1:-1;;;;;42875:32:0;;42861:11;42875:32;;;:12;:32;;;;;;42967:7;;42959:32;;42981:8;;42959:16;;42875:32;;42959:7;:16::i;:::-;:20;;:32::i;:::-;42949:7;:42;43026:13;;43018:38;;43046:8;;43018:22;;:3;;:7;:22::i;:38::-;43002:13;:54;43089:11;;43081:36;;43107:8;;43081:20;;:3;;:7;:20::i;:36::-;43067:11;:50;43150:11;;43142:36;;43168:8;;43142:20;;:3;;:7;:20::i;:36::-;43128:11;:50;;;43224:11;;43206:13;;:47;;43128:50;43206:30;;:13;:17;:30::i;:47::-;43191:12;:62;43306:11;;43287:13;;43275:7;;43323:1;;43275:43;;43306:11;;43275:26;;:11;:26::i;:43::-;43273:51;;42217:1115;-1:-1:-1;;;;;;42217:1115:0:o;45524:1991::-;29543:16;:23;;-1:-1:-1;;;;29543:23:0;-1:-1:-1;;;29543:23:0;;;45650:12:::1;::::0;45631:13:::1;::::0;29543:23;;45619:44:::1;::::0;:26:::1;::::0;:7;;:11:::1;:26::i;:44::-;45596:67;;45674:18;45695:42;45724:12;;45695:24;45707:11;;45695:7;:11;;:24;;;;:::i;:42::-;45674:63:::0;-1:-1:-1;45748:18:0::1;45769:41;45674:63:::0;45769:25:::1;:7:::0;45781:12;45769:11:::1;:25::i;:::-;:29:::0;::::1;:41::i;:::-;45748:62;;45849:1;45834:12;:16;:37;;;;;45870:1;45854:13;;:17;45834:37;45831:530;;;45960:12;45975:19;:12:::0;45992:1:::1;45975:16;:19::i;:::-;45960:34:::0;-1:-1:-1;46009:17:0::1;46029:22;:12:::0;45960:34;46029:16:::1;:22::i;:::-;46009:42:::0;-1:-1:-1;46097:21:0::1;46133:22;46150:4:::0;46133:16:::1;:22::i;:::-;46172:18;46193:41;:21;46219:14:::0;46193:25:::1;:41::i;:::-;46172:62;;46249:35;46262:9;46273:10;46249:12;:35::i;:::-;46306:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;45831:530;;;;;46405:1;46392:10;:14;:33;;;;;46424:1;46410:11;;:15;46392:33;46389:423;;;46538:21;46574:28;46591:10:::0;46574:16:::1;:28::i;:::-;46619:18;46640:41;:21;46666:14:::0;46640:25:::1;:41::i;:::-;46717:18;::::0;46619:62;;-1:-1:-1;46696:52:0::1;::::0;-1:-1:-1;;;;;46717:18:0::1;46619:62:::0;46696:20:::1;:52::i;:::-;46770:30;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;46389:423;;;46839:1;46827:10;:13;:32;;;;;46858:1;46844:11;;:15;46827:32;46824:682;;;46878:21;46902:55;46949:7;46902:41;46929:12;;46902:21;:25;;:41;;;;:::i;:55::-;46878:79;;47086:17;;47070:13;:33;47066:108;;;-1:-1:-1::0;47141:17:0::1;::::0;47066:108:::1;47274:17;;47258:13;:33;:80;;;;;47323:15;47295:25;;:43;47258:80;47254:241;;;47359:29;47374:13;47359:14;:29::i;:::-;47455:24;::::0;47437:15:::1;:42;47409:25;:70:::0;47254:241:::1;46824:682;;-1:-1:-1::0;;29589:16:0;:24;;-1:-1:-1;;;;29589:24:0;;;-1:-1:-1;;45524:1991:0:o;49516:628::-;-1:-1:-1;;;;;49614:29:0;;;;;;:21;:29;;;;;;;;:66;;;;-1:-1:-1;;;;;;49648:32:0;;;;;;:21;:32;;;;;;;;49647:33;49614:66;49610:527;;;49697:48;49719:6;49727:9;49738:6;49697:21;:48::i;:::-;49610:527;;;-1:-1:-1;;;;;49768:29:0;;;;;;:21;:29;;;;;;;;49767:30;:66;;;;-1:-1:-1;;;;;;49801:32:0;;;;;;:21;:32;;;;;;;;49767:66;49763:374;;;49850:46;49870:6;49878:9;49889:6;49850:19;:46::i;49763:374::-;-1:-1:-1;;;;;49918:29:0;;;;;;:21;:29;;;;;;;;:65;;;;-1:-1:-1;;;;;;49951:32:0;;;;;;:21;:32;;;;;;;;49918:65;49914:223;;;50000:48;50022:6;50030:9;50041:6;50000:21;:48::i;49914:223::-;50081:44;50099:6;50107:9;50118:6;50081:17;:44::i;:::-;49516:628;;;:::o;43340:240::-;43395:11;;43385:7;:21;43432:16;;43417:12;:31;43473:15;;43459:11;:29;43515:17;;43499:13;:33;43557:15;;43543:11;:29;43340:240::o;40635:611::-;40732:7;;40768;;40685;;;;;40792:339;40816:19;:26;40812:30;;40792:339;;;40902:7;40868;:31;40876:19;40896:1;40876:22;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40876:22:0;40868:31;;;;;;;;;;;;;:41;;:86;;;40947:7;40913;:31;40921:19;40941:1;40921:22;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40921:22:0;40913:31;;;;;;;;;;;;;:41;40868:86;40864:117;;;40964:7;;40973;;40956:25;;;;;;;;;40864:117;41006:44;41018:7;:31;41026:19;41046:1;41026:22;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41026:22:0;41018:31;;;;;;;;;;;;;41006:7;;:11;:44::i;:::-;40996:54;;41075:44;41087:7;:31;41095:19;41115:1;41095:22;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41095:22:0;41087:31;;;;;;;;;;;;;41075:7;;:11;:44::i;:::-;41065:54;-1:-1:-1;40844:3:0;;40792:339;;;-1:-1:-1;41167:7:0;;41155;;:20;;:11;:20::i;:::-;41145:7;:30;41141:61;;;41185:7;;41194;;41177:25;;;;;;;;41141:61;41221:7;;-1:-1:-1;41230:7:0;-1:-1:-1;40635:611:0;;;:::o;14303:278::-;14389:7;14424:12;14417:5;14409:28;;;;-1:-1:-1;;;14409:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14448:9;14464:1;14460;:5;;;;;;;14303:278;-1:-1:-1;;;;;14303:278:0:o;39689:330::-;39749:7;39758;39767;39787:12;39802:24;39818:7;39802:15;:24::i;:::-;39787:39;;39837:18;39858:30;39880:7;39858:21;:30::i;:::-;39837:51;-1:-1:-1;39899:23:0;39925:33;39837:51;39925:17;:7;39937:4;39925:11;:17::i;:33::-;39899:59;39994:4;;-1:-1:-1;40000:10:0;;-1:-1:-1;39689:330:0;;-1:-1:-1;;;39689:330:0:o;40027:429::-;40142:7;;;;40198:24;:7;40210:11;40198;:24::i;:::-;40180:42;-1:-1:-1;40233:12:0;40248:21;:4;40257:11;40248:8;:21::i;:::-;40233:36;-1:-1:-1;40280:18:0;40301:27;:10;40316:11;40301:14;:27::i;:::-;40280:48;-1:-1:-1;40339:23:0;40365:33;40280:48;40365:17;:7;40377:4;40365:11;:17::i;:33::-;40417:7;;;;-1:-1:-1;40443:4:0;;-1:-1:-1;40027:429:0;;-1:-1:-1;;;;;;;40027:429:0:o;11838:136::-;11896:7;11923:43;11927:1;11930;11923:43;;;;;;;;;;;;;;;;;:3;:43::i;47523:677::-;47674:16;;;47688:1;47674:16;;;47650:21;47674:16;;;;;47650:21;47674:16;;;;;;;;;;-1:-1:-1;47674:16:0;47650:40;;47719:4;47701;47706:1;47701:7;;;;;;;;-1:-1:-1;;;;;47701:23:0;;;:7;;;;;;;;;;:23;;;;47745:15;;:22;;;-1:-1:-1;;;47745:22:0;;;;:15;;;;;:20;;:22;;;;;47701:7;;47745:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47745:22:0;47735:7;;:4;;47740:1;;47735:7;;;;;;-1:-1:-1;;;;;47735:32:0;;;:7;;;;;;;;;;:32;;;;47805:4;47784:27;;;;:11;:27;;;;;;47820:15;;;;;47784:53;;;;;;;;:67;-1:-1:-1;47780:149:0;;;47899:15;;47867:62;;47884:4;;-1:-1:-1;;;;;47899:15:0;47917:11;47867:8;:62::i;:::-;47968:15;;:224;;-1:-1:-1;;;47968:224:0;;;;;;;;:15;:224;;;;;;48146:4;47968:224;;;;;;48166:15;47968:224;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47968:15:0;;;;:66;;48049:11;;48119:4;;48146;48166:15;47968:224;;;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47523:677;;:::o;48890:545::-;49004:4;48983:27;;;;:11;:27;;;;;;;;49019:15;;-1:-1:-1;;;;;49019:15:0;48983:53;;;;;;;;:67;-1:-1:-1;48979:149:0;;;49098:15;;49066:62;;49083:4;;-1:-1:-1;;;;;49098:15:0;49116:11;49066:8;:62::i;:::-;49171:15;;49375:11;;49171:256;;;-1:-1:-1;;;49171:256:0;;49243:4;49171:256;;;;;;;;;;:15;:256;;;;;;;;;;-1:-1:-1;;;;;49375:11:0;;;49171:256;;;;49401:15;49171:256;;;;;;:15;;;;;:31;;49210:9;;49171:256;;;;;;;;;;;;;;;49210:9;49171:15;:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;48890:545:0:o;48756:126::-;48848:26;;-1:-1:-1;;;;;48848:18:0;;;:26;;;;;48867:6;;48848:26;;;;48867:6;48848:18;:26;;;;;;;;;;;;;;;;;;;48208:540;48351:16;;;48365:1;48351:16;;;48327:21;48351:16;;;;;48327:21;48351:16;;;;;;;;-1:-1:-1;;48388:15:0;;:22;;;-1:-1:-1;;;48388:22:0;;;;48327:40;;-1:-1:-1;;;;;;48388:15:0;;;;:20;;-1:-1:-1;48388:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48388:22:0;48378:7;;:4;;48383:1;;48378:7;;;;;;;;;:32;-1:-1:-1;;;;;48378:32:0;;;-1:-1:-1;;;;;48378:32:0;;;;;48439:4;48421;48426:1;48421:7;;;;;;;;-1:-1:-1;;;;;48421:23:0;;;:7;;;;;;;;;;:23;;;;48483:15;;48645:14;;48483:217;;-1:-1:-1;;;48483:217:0;;:15;:217;;;;;;48645:14;;;48483:217;;;;;;48674:15;48483:217;;;;;;;;;;;;;;;;;;;;;:15;;;;;:66;;48557:6;;48483:15;;48626:4;;48645:14;;48674:15;;48483:217;;;;;;;;;;;;;;;:15;:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48718:22:0;;;;;;;;;;-1:-1:-1;48718:22:0;;;;;;;-1:-1:-1;48718:22:0;-1:-1:-1;48718:22:0;48208:540;;:::o;51256:566::-;51359:15;51376:23;51401:12;51415:23;51440:12;51454:18;51476:19;51487:7;51476:10;:19::i;:::-;-1:-1:-1;;;;;51524:15:0;;;;;;:7;:15;;;;;;51358:137;;-1:-1:-1;51358:137:0;;-1:-1:-1;51358:137:0;;-1:-1:-1;51358:137:0;-1:-1:-1;51358:137:0;-1:-1:-1;51358:137:0;-1:-1:-1;51524:28:0;;51544:7;51524:19;:28::i;:::-;-1:-1:-1;;;;;51506:15:0;;;;;;:7;:15;;;;;;;;:46;;;;51581:7;:15;;;;:28;;51601:7;51581:19;:28::i;:::-;-1:-1:-1;;;;;51563:15:0;;;;;;;:7;:15;;;;;;:46;;;;51641:18;;;;;;;:39;;51664:15;51641:22;:39::i;:::-;-1:-1:-1;;;;;51620:18:0;;;;;;:7;:18;;;;;:60;51694:26;51709:10;51694:14;:26::i;:::-;51731:23;51743:4;51749;51731:11;:23::i;:::-;51787:9;-1:-1:-1;;;;;51770:44:0;51779:6;-1:-1:-1;;;;;51770:44:0;;51798:15;51770:44;;;;;;;;;;;;;;;;;;51256:566;;;;;;;;;:::o;50662:586::-;50763:15;50780:23;50805:12;50819:23;50844:12;50858:18;50880:19;50891:7;50880:10;:19::i;:::-;-1:-1:-1;;;;;50928:15:0;;;;;;:7;:15;;;;;;50762:137;;-1:-1:-1;50762:137:0;;-1:-1:-1;50762:137:0;;-1:-1:-1;50762:137:0;-1:-1:-1;50762:137:0;-1:-1:-1;50762:137:0;-1:-1:-1;50928:28:0;;50762:137;50928:19;:28::i;:::-;-1:-1:-1;;;;;50910:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;50988:18;;;;;:7;:18;;;;;:39;;51011:15;50988:22;:39::i;:::-;-1:-1:-1;;;;;50967:18:0;;;;;;:7;:18;;;;;;;;:60;;;;51059:7;:18;;;;:39;;51082:15;51059:22;:39::i;51833:642::-;51936:15;51953:23;51978:12;51992:23;52017:12;52031:18;52053:19;52064:7;52053:10;:19::i;:::-;-1:-1:-1;;;;;52101:15:0;;;;;;:7;:15;;;;;;51935:137;;-1:-1:-1;51935:137:0;;-1:-1:-1;51935:137:0;;-1:-1:-1;51935:137:0;-1:-1:-1;51935:137:0;-1:-1:-1;51935:137:0;-1:-1:-1;52101:28:0;;52121:7;52101:19;:28::i;:::-;-1:-1:-1;;;;;52083:15:0;;;;;;:7;:15;;;;;;;;:46;;;;52158:7;:15;;;;:28;;52178:7;52158:19;:28::i;50152:502::-;50251:15;50268:23;50293:12;50307:23;50332:12;50346:18;50368:19;50379:7;50368:10;:19::i;:::-;-1:-1:-1;;;;;50416:15:0;;;;;;:7;:15;;;;;;50250:137;;-1:-1:-1;50250:137:0;;-1:-1:-1;50250:137:0;;-1:-1:-1;50250:137:0;-1:-1:-1;50250:137:0;-1:-1:-1;50250:137:0;-1:-1:-1;50416:28:0;;50250:137;50416:19;:28::i;41635:154::-;41699:7;41726:55;41765:5;41726:20;41738:7;;41726;:11;;:20;;;;:::i;41797:165::-;41867:7;41894:60;41938:5;41894:25;41906:12;;41894:7;:11;;:25;;;;:::i;41258:365::-;41321:19;41344:10;:8;:10::i;:::-;41321:33;-1:-1:-1;41365:18:0;41386:27;:10;41321:33;41386:14;:27::i;:::-;41465:4;41449:22;;;;:7;:22;;;;;;41365:48;;-1:-1:-1;41449:38:0;;41365:48;41449:26;:38::i;:::-;41440:4;41424:22;;;;:7;:22;;;;;;;;:63;;;;41501:21;:36;;;;;;41498:117;;;41593:4;41577:22;;;;:7;:22;;;;;;:38;;41604:10;41577:26;:38::i;:::-;41568:4;41552:22;;;;:7;:22;;;;;:63;41258:365;;;:::o;39107:147::-;39185:7;;:17;;39197:4;39185:11;:17::i;:::-;39175:7;:27;39226:10;;:20;;39241:4;39226:14;:20::i;:::-;39213:10;:33;-1:-1:-1;;39107:147:0:o

Swarm Source

ipfs://f52e9d8651d9d39a1afc86a83571c5558d07ab0836db56ccd9c9437f12d48a88
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.