ETH Price: $2,284.62 (-3.48%)

Token

PussyCredit | t.me/PussyCredit (PUSSC 💹)
 

Overview

Max Total Supply

1,000,000,000,000,000 PUSSC 💹

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
suppp77.eth
Balance
10,118,129,280,394.098130675 PUSSC 💹

Value
$0.00
0xe6e8a8cae5f8d8f275bd1e4361086031eea50b6b
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:
PussC

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-12
*/

// $PUSSC | PUSSY CREDIT
// Telegram: https://t.me/PussyCredit
// Envisioned and Designed by @1goonrich

// Fair Launch, no Dev Tokens. 98% LP.
// 2% of Supply to CryptoMessiah (@1goonrich)
// Snipers will be nuked.

// LP Lock immediately on launch.
// Ownership will be renounced 30 minutes after launch.

// Slippage Recommended: 12%+
// 2% Supply limit per TX for the first 5 minutes.
// Audit & Fair Launch handled by https://t.me/FairLaunchCalls

/**
 *     _.---.._             _.---...__
 *  .-'   /\   \          .'  /\     /
 *  `.   (  )   \        /   (  )   /
 *    `.  \/   .'\      /`.   \/  .'
 *      ``---''   )    (   ``---''
 *              .';.--.;`.
 *            .' /_...._\ `.
 *          .'   `.a  a.'   `.
 *         (        \/        )
 *          `.___..-'`-..___.'
 *             \          /
 *              `-.____.-'
*/

// SPDX-License-Identifier: Unlicensed
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 {
    /**
    * @dev Returns the amount of tokens in existence.
    */
    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);
}

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

library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    *  - an externally-owned account
    *  - a contract in construction
    *  - an address where a contract will be created
    *  - an address where a contract lived, but was destroyed
    * ====
    */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
    * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
    * `recipient`, forwarding all available gas and reverting on errors.
    *
    * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
    * of certain opcodes, possibly making contracts go over the 2300 gas limit
    * imposed by `transfer`, making them unable to receive funds via
    * `transfer`. {sendValue} removes this limitation.
    *
    * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
    *
    * IMPORTANT: because control is transferred to `recipient`, care must be
    * taken to not create reentrancy vulnerabilities. Consider using
    * {ReentrancyGuard} or the
    * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
    */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
    * @dev Performs a Solidity function call using a low level `call`. A
    * plain`call` is an unsafe replacement for a function call: use this
    * function instead.
    *
    * If `target` reverts with a revert reason, it is bubbled up by this
    * function (like regular Solidity function calls).
    *
    * Returns the raw returned data. To convert to the expected return value,
    * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
    *
    * Requirements:
    *
    * - `target` must be a contract.
    * - calling `target` with `data` must not revert.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
    * `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
    * but also transferring `value` wei to `target`.
    *
    * Requirements:
    *
    * - the calling contract must have an ETH balance of at least `value`.
    * - the called Solidity function must be `payable`.
    *
    * _Available since v3.1._
    */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
    * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
    * with `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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 implementation
contract PussC is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => uint256) private _lastTx;
    mapping (address => uint256) private _cooldownTradeAttempts;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    mapping (address => bool) private _isSniper;
    address[] private _confirmedSnipers;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000000000000000;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public launchTime;

    string private _name = 'PussyCredit | t.me/PussyCredit';
    string private _symbol = 'PUSSC \xF0\x9F\x92\xB9';
    uint8 private _decimals = 9;

    uint256 private _taxFee = 2;
    uint256 private _teamDev = 0;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousTeamDev = _teamDev;

    address payable private _teamDevAddress;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwap = false;
    bool public swapEnabled = true;
    bool public tradingOpen = false; //once switched on, can never be switched off.
    bool public cooldownEnabled = false; //cooldown time on transactions
    bool public uniswapOnly = false; //prevents users from tx'ing to other wallets to avoid cooldowns

    uint256 public _maxTxAmount = 20000000000000000000000;
    uint256 private _numOfTokensToExchangeForTeamDev = 5000000000000000000;
    bool _txLimitsEnabled = true;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);

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

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;

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

    function initContract() external onlyOwner() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // PCS2 for BSC
        // 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
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        // List of front-runner & sniper bots from t.me/FairLaunchCalls
        _isSniper[address(0x7589319ED0fD750017159fb4E4d96C63966173C1)] = true;
        _confirmedSnipers.push(address(0x7589319ED0fD750017159fb4E4d96C63966173C1));

        _isSniper[address(0x65A67DF75CCbF57828185c7C050e34De64d859d0)] = true;
        _confirmedSnipers.push(address(0x65A67DF75CCbF57828185c7C050e34De64d859d0));

        _isSniper[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _confirmedSnipers.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isSniper[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _confirmedSnipers.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isSniper[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true;
        _confirmedSnipers.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345));

        _isSniper[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true;
        _confirmedSnipers.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b));

        _isSniper[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true;
        _confirmedSnipers.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95));

        _isSniper[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true;
        _confirmedSnipers.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964));

        _isSniper[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true;
        _confirmedSnipers.push(address(0xDC81a3450817A58D00f45C86d0368290088db848));

        _isSniper[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true;
        _confirmedSnipers.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881));

        _isSniper[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true;
        _confirmedSnipers.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679));

        _isSniper[address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7)] = true;
        _confirmedSnipers.push(address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7));

        _isSniper[address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533)] = true;
        _confirmedSnipers.push(address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533));

        _isSniper[address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d)] = true;
        _confirmedSnipers.push(address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d));

        _isSniper[address(0x000000000000084e91743124a982076C59f10084)] = true;
        _confirmedSnipers.push(address(0x000000000000084e91743124a982076C59f10084));

        _isSniper[address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303)] = true;
        _confirmedSnipers.push(address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303));

        _isSniper[address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595)] = true;
        _confirmedSnipers.push(address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595));

        _isSniper[address(0x000000005804B22091aa9830E50459A15E7C9241)] = true;
        _confirmedSnipers.push(address(0x000000005804B22091aa9830E50459A15E7C9241));

        _isSniper[address(0xA3b0e79935815730d942A444A84d4Bd14A339553)] = true;
        _confirmedSnipers.push(address(0xA3b0e79935815730d942A444A84d4Bd14A339553));

        _isSniper[address(0xf6da21E95D74767009acCB145b96897aC3630BaD)] = true;
        _confirmedSnipers.push(address(0xf6da21E95D74767009acCB145b96897aC3630BaD));

        _isSniper[address(0x0000000000007673393729D5618DC555FD13f9aA)] = true;
        _confirmedSnipers.push(address(0x0000000000007673393729D5618DC555FD13f9aA));

        _isSniper[address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1)] = true;
        _confirmedSnipers.push(address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1));

        _isSniper[address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6)] = true;
        _confirmedSnipers.push(address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6));

        _isSniper[address(0x000000917de6037d52b1F0a306eeCD208405f7cd)] = true;
        _confirmedSnipers.push(address(0x000000917de6037d52b1F0a306eeCD208405f7cd));

        _isSniper[address(0x7100e690554B1c2FD01E8648db88bE235C1E6514)] = true;
        _confirmedSnipers.push(address(0x7100e690554B1c2FD01E8648db88bE235C1E6514));

        _isSniper[address(0x72b30cDc1583224381132D379A052A6B10725415)] = true;
        _confirmedSnipers.push(address(0x72b30cDc1583224381132D379A052A6B10725415));

        _isSniper[address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE)] = true;
        _confirmedSnipers.push(address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE));

        _isSniper[address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F)] = true;
        _confirmedSnipers.push(address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F));

        _isSniper[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true;
        _confirmedSnipers.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b));

        _isSniper[address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9)] = true;
        _confirmedSnipers.push(address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9));

        _isSniper[address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7)] = true;
        _confirmedSnipers.push(address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7));

        _isSniper[address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF)] = true;
        _confirmedSnipers.push(address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF));

        _isSniper[address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290)] = true;
        _confirmedSnipers.push(address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290));

        _isSniper[address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5)] = true;
        _confirmedSnipers.push(address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5));

        _isSniper[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true;
        _confirmedSnipers.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b));

        _isSniper[address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7)] = true;
        _confirmedSnipers.push(address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7));

        _isSniper[address(0xbCb05a3F85d34f0194C70d5914d5C4E28f11Cc02)] = true;
        _confirmedSnipers.push(address(0xbCb05a3F85d34f0194C70d5914d5C4E28f11Cc02));

        _isSniper[address(0x22246F9BCa9921Bfa9A3f8df5baBc5Bc8ee73850)] = true;
        _confirmedSnipers.push(address(0x22246F9BCa9921Bfa9A3f8df5baBc5Bc8ee73850));

        _isSniper[address(0x42d4C197036BD9984cA652303e07dD29fA6bdB37)] = true;
        _confirmedSnipers.push(address(0x42d4C197036BD9984cA652303e07dD29fA6bdB37));

        _isSniper[address(0x00000000003b3cc22aF3aE1EAc0440BcEe416B40)] = true;
        _confirmedSnipers.push(address(0x00000000003b3cc22aF3aE1EAc0440BcEe416B40));

        _isSniper[address(0x231DC6af3C66741f6Cf618884B953DF0e83C1A2A)] = true;
        _confirmedSnipers.push(address(0x231DC6af3C66741f6Cf618884B953DF0e83C1A2A));

        _isSniper[address(0xC6bF34596f74eb22e066a878848DfB9fC1CF4C65)] = true;
        _confirmedSnipers.push(address(0xC6bF34596f74eb22e066a878848DfB9fC1CF4C65));

        _isSniper[address(0x20f6fCd6B8813c4f98c0fFbD88C87c0255040Aa3)] = true;
        _confirmedSnipers.push(address(0x20f6fCd6B8813c4f98c0fFbD88C87c0255040Aa3));

        _isSniper[address(0xD334C5392eD4863C81576422B968C6FB90EE9f79)] = true;
        _confirmedSnipers.push(address(0xD334C5392eD4863C81576422B968C6FB90EE9f79));

        _isSniper[address(0xFFFFF6E70842330948Ca47254F2bE673B1cb0dB7)] = true;
        _confirmedSnipers.push(address(0xFFFFF6E70842330948Ca47254F2bE673B1cb0dB7));

        _isSniper[address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)] = true;
        _confirmedSnipers.push(address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a));

        _isSniper[address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)] = true;
        _confirmedSnipers.push(address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a));

        _teamDev = 9;
        _teamDevAddress = payable(0x4091e425D0CC258d8071A80362A99D9edB7E88D9);
    }

    function openTrading() external onlyOwner() {
        swapEnabled = true;
        cooldownEnabled = false;
        tradingOpen = true;
        launchTime = block.timestamp;
    }

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public 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) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

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

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

    function isBlackListed(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public 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 excludeAccount(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function RemoveSniper(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isSniper[account], "Account is already blacklisted");
        _isSniper[account] = true;
        _confirmedSnipers.push(account);
    }

    function amnestySniper(address account) external onlyOwner() {
        require(_isSniper[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _confirmedSnipers.length; i++) {
            if (_confirmedSnipers[i] == account) {
                _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1];
                _isSniper[account] = false;
                _confirmedSnipers.pop();
                break;
            }
        }
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _teamDev == 0) return;

        _previousTaxFee = _taxFee;
        _previousTeamDev = _teamDev;

        _taxFee = 0;
        _teamDev = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _teamDev = _previousTeamDev;
    }

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

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

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

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[recipient], "You have no power here!");
        require(!_isSniper[msg.sender], "You have no power here!");

        if(sender != owner() && recipient != owner()) {

            if (!tradingOpen) {
                if (!(sender == address(this) || recipient == address(this)
                || sender == address(owner()) || recipient == address(owner()))) {
                    require(tradingOpen, "Trading is not enabled");
                }
            }

            if (cooldownEnabled) {
                if (_lastTx[sender] + 30 > block.timestamp
                    && sender != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
                    && sender != address(uniswapV2Pair)
                ) {
                    _lastTx[sender] = block.timestamp;
                } else {
                    require(!cooldownEnabled, "You're on cooldown! 30s between trades!");
                }
            }

            if (uniswapOnly) {
                if (
                    sender != address(this) &&
                    recipient != address(this) &&
                    sender != address(uniswapV2Router) &&
                    recipient != address(uniswapV2Router)
                ) {
                    require(
                        _msgSender() == address(uniswapV2Router) ||
                        _msgSender() == uniswapV2Pair,
                        "ERR: Pancakeswap only"
                    );
                }
            }

            if (block.timestamp < launchTime + 5 seconds) {
                if (sender != uniswapV2Pair
                && sender != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
                    && sender != address(uniswapV2Router)) {
                    _isSniper[sender] = true;
                    _confirmedSnipers.push(sender);
                }
            }


        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap?
        // also, don't get caught in a circular charity event.
        // also, don't swap if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeForTeamDev;
        if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) {
            // We need to swap the current tokens to ETH and send to the ext wallet
            swapTokensForEth(contractTokenBalance);

            uint256 contractETHBalance = address(this).balance;
            if(contractETHBalance > 0) {
                sendETHToTeamDev(address(this).balance);
            }
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        //transfer amount, it will take tax and fee

        _tokenTransfer(sender,recipient,amount,takeFee);
    }

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

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function sendETHToTeamDev(uint256 amount) private {
        _teamDevAddress.transfer(amount.div(2));
    }

    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() external onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToTeamDev(contractETHBalance);
    }

    function setSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _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 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _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 tCharity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _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 tCharity) = _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);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeCharity(uint256 tCharity) private {
        uint256 currentRate =  _getRate();
        uint256 rCharity = tCharity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rCharity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tCharity);
    }

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

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 charityFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tCharity = tAmount.mul(charityFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tCharity);
        return (tTransferAmount, tFee, tCharity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        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 < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns(uint256 balance) {
        return address(this).balance;
    }

    function _removeTxLimit() external onlyOwner() {
        _maxTxAmount = 1000000000000000000000000;
    }

    // Yes, there are here if I fucked up on the logic and need to disable them.
    function _removeDestLimit() external onlyOwner() {
        uniswapOnly = false;
    }

    function _disableCooldown() external onlyOwner() {
        cooldownEnabled = false;
    }

    function _enableCooldown() external onlyOwner() {
        cooldownEnabled = true;
    }

    function _setExtWallet(address payable teamDevAddress) external onlyOwner() {
        _teamDevAddress = teamDevAddress;
    }
}

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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","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":[{"internalType":"address","name":"account","type":"address"}],"name":"RemoveSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_disableCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_enableCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removeDestLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_removeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"teamDevAddress","type":"address"}],"name":"_setExtWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"amnestySniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":[],"name":"initContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

69d3c21bcecceda1000000600d5569085afffa6ff50bffffff19600e5560c0604052601e60808190527f5075737379437265646974207c20742e6d652f5075737379437265646974000060a09081526200005d9160119190620001ee565b5060408051808201909152600a80825269505553534320f09f92b960b01b60209092019182526200009191601291620001ee565b506013805460ff199081166009179091556002601481905560006015819055601691909155601755601a805462ffffff60b01b1961ffff60a01b19909116600160a81b1716905569043c33c1937564800000601b55674563918244f40000601c55601d805490911660011790553480156200010b57600080fd5b50600062000118620001ea565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e546003600062000173620001ea565b6001600160a01b0316815260208101919091526040016000205562000197620001ea565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040518082815260200191505060405180910390a36200028a565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200023157805160ff191683800117855562000261565b8280016001018555821562000261579182015b828111156200026157825182559160200191906001019062000244565b506200026f92915062000273565b5090565b5b808211156200026f576000815560010162000274565b614452806200029a6000396000f3fe6080604052600436106102b25760003560e01c806392bbf08e11610175578063d543dbeb116100dc578063f2cc0c1811610095578063f815a8421161006f578063f815a842146109de578063f84354f1146109f3578063fe76374f14610a26578063ffb54a9914610a3b576102b9565b8063f2cc0c1814610963578063f2fde38b14610996578063f4293890146109c9576102b9565b8063d543dbeb14610860578063dd4670641461088a578063dd62ed3e146108b4578063e015061e146108ef578063e01af92c14610904578063e47d606014610930576102b9565b8063a985ceef1161012e578063a985ceef1461079e578063af9549e0146107b3578063b6c52324146107ee578063c9567bf914610803578063cba0e99614610818578063d07deb4e1461084b576102b9565b806392bbf08e146106ba5780639354e0fc146106ed57806395d89b4114610702578063a457c2d714610717578063a69df4b514610750578063a9059cbb14610765576102b9565b80634549b03911610219578063715018a6116101d2578063715018a61461061e578063790ca413146106335780637d1db4a5146106485780638203f5fe1461065d57806383b61c8b146106725780638da5cb5b146106a5576102b9565b80634549b0391461054757806349bd5a5e1461057957806351bc3c851461058e5780635342acb4146105a35780636ddd1713146105d657806370a08231146105eb576102b9565b80632338dbe31161026b5780632338dbe31461043757806323b872dd1461044c5780632d8381191461048f578063313ce567146104b957806339509351146104e45780633bd5d1731461051d576102b9565b806306fdde03146102be578063095ea7b3146103485780630b2a808c1461039557806313114a9d146103ca5780631694505e146103f157806318160ddd14610422576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610a50565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030d5781810151838201526020016102f5565b50505050905090810190601f16801561033a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035457600080fd5b506103816004803603604081101561036b57600080fd5b506001600160a01b038135169060200135610ae6565b604080519115158252519081900360200190f35b3480156103a157600080fd5b506103c8600480360360208110156103b857600080fd5b50356001600160a01b0316610b04565b005b3480156103d657600080fd5b506103df610cbc565b60408051918252519081900360200190f35b3480156103fd57600080fd5b50610406610cc2565b604080516001600160a01b039092168252519081900360200190f35b34801561042e57600080fd5b506103df610cd1565b34801561044357600080fd5b506103c8610cd7565b34801561045857600080fd5b506103816004803603606081101561046f57600080fd5b506001600160a01b03813581169160208101359091169060400135610d3f565b34801561049b57600080fd5b506103df600480360360208110156104b257600080fd5b5035610dc6565b3480156104c557600080fd5b506104ce610e28565b6040805160ff9092168252519081900360200190f35b3480156104f057600080fd5b506103816004803603604081101561050757600080fd5b506001600160a01b038135169060200135610e31565b34801561052957600080fd5b506103c86004803603602081101561054057600080fd5b5035610e7f565b34801561055357600080fd5b506103df6004803603604081101561056a57600080fd5b50803590602001351515610f59565b34801561058557600080fd5b50610406610feb565b34801561059a57600080fd5b506103c8610ffa565b3480156105af57600080fd5b50610381600480360360208110156105c657600080fd5b50356001600160a01b031661106b565b3480156105e257600080fd5b50610381611089565b3480156105f757600080fd5b506103df6004803603602081101561060e57600080fd5b50356001600160a01b0316611099565b34801561062a57600080fd5b506103c86110fb565b34801561063f57600080fd5b506103df61118b565b34801561065457600080fd5b506103df611191565b34801561066957600080fd5b506103c8611197565b34801561067e57600080fd5b506103c86004803603602081101561069557600080fd5b50356001600160a01b03166121e6565b3480156106b157600080fd5b5061040661236e565b3480156106c657600080fd5b506103c8600480360360208110156106dd57600080fd5b50356001600160a01b031661237d565b3480156106f957600080fd5b506103c86123f7565b34801561070e57600080fd5b506102d361245e565b34801561072357600080fd5b506103816004803603604081101561073a57600080fd5b506001600160a01b0381351690602001356124bf565b34801561075c57600080fd5b506103c8612527565b34801561077157600080fd5b506103816004803603604081101561078857600080fd5b506001600160a01b038135169060200135612615565b3480156107aa57600080fd5b50610381612629565b3480156107bf57600080fd5b506103c8600480360360408110156107d657600080fd5b506001600160a01b0381351690602001351515612639565b3480156107fa57600080fd5b506103df6126bc565b34801561080f57600080fd5b506103c86126c2565b34801561082457600080fd5b506103816004803603602081101561083b57600080fd5b50356001600160a01b0316612743565b34801561085757600080fd5b506103c8612761565b34801561086c57600080fd5b506103c86004803603602081101561088357600080fd5b50356127c8565b34801561089657600080fd5b506103c8600480360360208110156108ad57600080fd5b5035612846565b3480156108c057600080fd5b506103df600480360360408110156108d757600080fd5b506001600160a01b03813581169160200135166128e4565b3480156108fb57600080fd5b506103c861290f565b34801561091057600080fd5b506103c86004803603602081101561092757600080fd5b5035151561297c565b34801561093c57600080fd5b506103816004803603602081101561095357600080fd5b50356001600160a01b03166129f2565b34801561096f57600080fd5b506103c86004803603602081101561098657600080fd5b50356001600160a01b0316612a10565b3480156109a257600080fd5b506103c8600480360360208110156109b957600080fd5b50356001600160a01b0316612bf2565b3480156109d557600080fd5b506103c8612cd8565b3480156109ea57600080fd5b506103df612d3a565b3480156109ff57600080fd5b506103c860048036036020811015610a1657600080fd5b50356001600160a01b0316612d3e565b348015610a3257600080fd5b50610381612ed4565b348015610a4757600080fd5b50610381612ee4565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610adc5780601f10610ab157610100808354040283529160200191610adc565b820191906000526020600020905b815481529060010190602001808311610abf57829003601f168201915b5050505050905090565b6000610afa610af3612ef4565b8484612ef8565b5060015b92915050565b610b0c612ef4565b6000546001600160a01b03908116911614610b5c576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600b602052604090205460ff16610bc9576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600c54811015610cb857816001600160a01b0316600c8281548110610bed57fe5b6000918252602090912001546001600160a01b03161415610cb057600c80546000198101908110610c1a57fe5b600091825260209091200154600c80546001600160a01b039092169183908110610c4057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600b90915260409020805460ff19169055600c805480610c8957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610cb8565b600101610bcc565b5050565b600f5490565b6019546001600160a01b031681565b600d5490565b610cdf612ef4565b6000546001600160a01b03908116911614610d2f576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b69d3c21bcecceda1000000601b55565b6000610d4c848484612fe4565b610dbc84610d58612ef4565b610db785604051806060016040528060288152602001614289602891396001600160a01b038a16600090815260076020526040812090610d96612ef4565b6001600160a01b03168152602081019190915260400160002054919061360f565b612ef8565b5060019392505050565b6000600e54821115610e095760405162461bcd60e51b815260040180806020018281038252602a8152602001806141cf602a913960400191505060405180910390fd5b6000610e136136a6565b9050610e1f83826136c9565b9150505b919050565b60135460ff1690565b6000610afa610e3e612ef4565b84610db78560076000610e4f612ef4565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613712565b6000610e89612ef4565b6001600160a01b03811660009081526009602052604090205490915060ff1615610ee45760405162461bcd60e51b815260040180806020018281038252602c8152602001806143a9602c913960400191505060405180910390fd5b6000610eef8361376c565b505050506001600160a01b038416600090815260036020526040902054919250610f1b919050826137c8565b6001600160a01b038316600090815260036020526040902055600e54610f4190826137c8565b600e55600f54610f519084613712565b600f55505050565b6000600d54831115610fb2576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610fd1576000610fc28461376c565b50939550610afe945050505050565b6000610fdc8461376c565b50929550610afe945050505050565b601a546001600160a01b031681565b611002612ef4565b6000546001600160a01b03908116911614611052576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b600061105d30611099565b90506110688161380a565b50565b6001600160a01b031660009081526008602052604090205460ff1690565b601a54600160a81b900460ff1681565b6001600160a01b03811660009081526009602052604081205460ff16156110d957506001600160a01b038116600090815260046020526040902054610e23565b6001600160a01b038216600090815260036020526040902054610afe90610dc6565b611103612ef4565b6000546001600160a01b03908116911614611153576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116906000805160206142d1833981519152908390a3600080546001600160a01b0319169055565b60105481565b601b5481565b61119f612ef4565b6000546001600160a01b039081169116146111ef576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561124157600080fd5b505afa158015611255573d6000803e3d6000fd5b505050506040513d602081101561126b57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156112bb57600080fd5b505afa1580156112cf573d6000803e3d6000fd5b505050506040513d60208110156112e557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b15801561133757600080fd5b505af115801561134b573d6000803e3d6000fd5b505050506040513d602081101561136157600080fd5b5051601a80546001600160a01b03199081166001600160a01b0393841617909155601980549091169183169190911790556001600860006113a061236e565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260088352908120805484166001908117909155600b9092527fc274f9872928131cb7ff581cc24fdbde2670d328386d345e40b59bf36ffda1da8054841683179055600c805480840182557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790810180546001600160a01b0319908116737589319ed0fd750017159fb4e4d96c63966173c1179091557fe349bf7cb40a1d682fcc1c52ea4dd0fffc14828c762bcf08c0c2a9ef14a583968054871686179055825480860184558201805482167365a67df75ccbf57828185c7c050e34de64d859d01790557f74d7fc0a45c6928cce922f294b8bf5e7fff3f89771e2114b18a5cd1d1f45773580548716861781558354808701855583018054831673e031b36b53e53a292a20c5f08fd1658cddf74fce9081179091558154881687179091558354808701855583018054831690911790557f0f1b60510ca1e1bf00eec02fea41847afc989fbd83852cdb3ca91ce622a1d54d80548716861790558254808601845582018054821673e516bdee55b0b4e9bacaf6285130de15589b13451790557ff8ebe5e7623ca891e5bb8ce5e72b0c5ddeae8c7d8c0932740de908fdac44ec0080548716861790558254808601845582018054821673a1cec245c456dd1bd9f2815a6955fef44eb4191b1790557f16a15fb2aa0b66ff4f4234d97be437d134114b368ffd745d8de6e6838f9fba3a80548716861790558254808601845582018054821673d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf951790557f287292fc49b5d73ef6d6f7f228ef3fe49c8cd2ac6e9c89064eb61fd7fb9f519a80548716861790558254808601845582018054821673fe76f05dc59fec04184fa0245ad0c3cf9a57b9641790557f66504bab4295e88d515a9325b1909b99559a398602c86c64fe2ad7b94e0f761680548716861790558254808601845582018054821673dc81a3450817a58d00f45c86d0368290088db8481790557f4c88ad78a60fb4355141b4ac46c8f7af9256d7dcebaf319200612bf767c0bd8a8054871686179055825480860184558201805482167345fd07c63e5c316540f14b2002b085aee78e38811790557f509f0c09776cdc3f0041fbef622c53cd68b7fdb9a9aa03b44d173795d33d9a2c8054871686179055825480860184558201805482167327f9adb26d532a41d97e00206114e429ad58c6791790557f4ab1ad46ab225965adc4e1d94d5aaeaf25059fc3ba4fcaa5d4b5e7639b276b96805487168617905582548086018455820180548216739282dc5c422fa91ff2f6ff3a0b45b7bf97cf78e71790557fb6cf2af14ec747288a3172f747dce8489db9f7ffed0705b048086a04ae6d883e80548716861790558254808601845582018054821673fad95b6089c53a0d1d861eabfaadd8901b0f85331790557f90f8eb466ce0b8ffe45cba484dc56157a7d0481c956801f8344c8ca9e3ab66fc805487168617905582548086018455820180548216731d6e8bac6ea3730825bde4b005ed7b2b39a2932d1790557f084f1b81bcbce7852bcad334f6636dd62e06d31b2f61a0cfa649d36ddc7a140b8054871686179055825480860184558201805482166d084e91743124a982076c59f100841790557fe964af2a39de4befe9efd0a93c5f33430d4d469a86ca04ead00ca450e1cc51dc805487168617905582548086018455820180548216736da4bea09c3aa0761b09b19837d9105a522543031790557f43bc11ee80840e60bc6eecdaf2f3dbb20e2a51f2ad7c84ccd7a3ee511c229b5680548716861790558254808601845582018054821673323b7f37d382a68b0195b873af17cea5b67cd5951790557ff3f5813ee85ebee82b51c4fbd213ca437b28b57dd42773ca313877c0421fdd498054871686179055825480860184558201805482166f5804b22091aa9830e50459a15e7c92411790557fa806c9890a137af663d0d873337bf05aee2f15a430b39dde586e5d5a9662788280548716861790558254808601845582018054821673a3b0e79935815730d942a444a84d4bd14a3395531790557f37f2334e5c4c9574d9d477ff54aae39ea3eb90b5c2ae4ef3cf5ad5a3292bc0a380548716861790558254808601845582018054821673f6da21e95d74767009accb145b96897ac3630bad1790557f5f39b10403a84e529641be6f242a318374526da4fb6710d79679d47441b2a7c08054871686179055825480860184558201805482166d7673393729d5618dc555fd13f9aa1790557f5c7b6b080beaaf2d4ae0f74ea085f3bbf8609b2401495af9fffe89ed4435564b8054871686179055825480860184558201805482166d03441d59dde9a90bffb1cd3fabf11790557fac0a3c6e1cda4154d919f5f45cd6714b3123d27803fd2d300bb571c9d92f6c778054871686179055825480860184558201805482167359903993ae67bf48f10832e9be28935fee04d6f61790557f3a5d40cea00d9d63dd180120b8b5f647d8c74aca077efca2f559deb04eb5811d80548716861790558254808601845582018054821670917de6037d52b1f0a306eecd208405f7cd1790557f5fa1d7e94eb4942d36a49413ca4d16accd08fb1110f77dfb53231b36d79cc42e805487168617905582548086018455820180548216737100e690554b1c2fd01e8648db88be235c1e65141790557f77fc7072d38bd00627c3a08b633f932d348498925cead243099866a7f90ace068054871686179055825480860184558201805482167372b30cdc1583224381132d379a052a6b107254151790557f3081b1a493729edee55cece4de980fa98487de7a5280b359c0bd87eed203d730805487168617905582548086018455820180548216739edd647d7d6eceae6bb61d7785ef66c5055a9bee1790557f546f120f655c062c354e71127d493f355f17cfa1add369fa90759489adb73fda80548716861790558254808601845582018054821673fe9d99ef02e905127239e85a611c29ad32c31c2f1790557fde956483604ddf4b64ec3e2f9fc80a0dc2088c392511f1411782a7d8ae297f4c8054871686178155835480870185558301805483167339608b6f20704889c51c0ae28b1fca8f36a5239b9081179091557f75b6c254782bae42da9d86e5b3b038adccd258bd17d730f1912a4d8f0937784880548916881790558454808801865584018054841673c496d84215d5018f6f53e7f6f12e45c9b5e8e8a91790557fde2a7d29f3150e1ddb7d14e8e59cf128a3b67513b254bdfac9b088ad2be525a28054891688179055845480880186558401805484167359341bc6b4f3ace878574b05914f43309dd678c71790557fa6a51fa55d9d229c03843ddaa598168904b330eef370885236990ddb645da1d880548916881790558454808801865584018054841673e986d48efee9ec1b8f66cd0b0ae8e3d18f091bdf1790557f55b54b221ed3f9281edb8ffbf0fb95a8ab4be2f4d8cbfaca4dce33d0dfe8587a805489168817905584548088018655840180548416734aeb32e16dcac00b092596adc6cd4955efdee2901790557f87d3f383669d84cb7b974d2d22e16224a71feda94455970040b83518cc86744680548916881790558454808801865584018054841673136f4b5b6a306091b280e3f251fa0e21b1280cd51790558154881687179091558354808701855583018054831690911790557f218a0253766218fcda78437f64b24524daefb1cad97e42c50028341fc55cdb22805487168617905582548086018455820180548216735b83a351500b631cc2a20a665ee17f0dc66e3db71790557f436e4ad714e8c3aff7e26123430dd4dbd319e15777b9d8b55411bf1463a9cb5b80548716861790558254808601845582018054821673bcb05a3f85d34f0194c70d5914d5c4e28f11cc021790557fe7b20fa0205f84b9d914c445ceea320ccd2839909270357f6b8947abb472a5908054871686179055825480860184558201805482167322246f9bca9921bfa9a3f8df5babc5bc8ee738501790557f9dfcf2a538dd0b759dd7771d809627012524bcdd77f1316cd21f485a44da421f8054871686179055825480860184558201805482167342d4c197036bd9984ca652303e07dd29fa6bdb371790557f494c6787b69d89b59a43a566573d0eb3bdbbe9fe253e454213f244e13d42e1668054871686179055825480860184558201805482166e3b3cc22af3ae1eac0440bcee416b401790557fbbe2d054b52a64432b404f4c58c46edaaf6f4423cdeabf83f69cf3dddb7aaab880548716861790558254808601845582018054821673231dc6af3c66741f6cf618884b953df0e83c1a2a1790557fa2d156f2feaaf188eee0f3ab58b28e4ad365e80c7a8722fed7272494f9f7423080548716861790558254808601845582018054821673c6bf34596f74eb22e066a878848dfb9fc1cf4c651790557fe0606630f048922c11b6a1604064d1c3580ba1a2e9d2fddf650d03c5b65711498054871686179055825480860184558201805482167320f6fcd6b8813c4f98c0ffbd88c87c0255040aa31790557f0ee17963b7c279334e88229c27e11d12d87d362a7cd056ac92e860a09921a44f80548716861790558254808601845582018054821673d334c5392ed4863c81576422b968c6fb90ee9f791790557f0ed1044b6124a6cb0cb6e03084903b3a77d71983fa970874ae3abd71b8d0af4880548716861790558254808601845582018054821673fffff6e70842330948ca47254f2be673b1cb0db71790557f03c6491a6914a13119e10492804f993526cf0737203a9d1e295748bfe934f0b580548716861781558354808701855583018054831673a39c50bf86e15391180240938f469a7bf4fdae9a9081179091558154909716861790558254948501835591909252910180548216909217909155600960155560188054909116734091e425d0cc258d8071a80362a99d9edb7e88d917905550565b6121ee612ef4565b6000546001600160a01b0390811691161461223e576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561229a5760405162461bcd60e51b815260040180806020018281038252602481526020018061431a6024913960400191505060405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff1615612308576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031690565b612385612ef4565b6000546001600160a01b039081169116146123d5576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6123ff612ef4565b6000546001600160a01b0390811691161461244f576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601a805460ff60b81b19169055565b60128054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610adc5780601f10610ab157610100808354040283529160200191610adc565b6000610afa6124cc612ef4565b84610db7856040518060600160405280602581526020016143f860259139600760006124f6612ef4565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061360f565b6001546001600160a01b031633146125705760405162461bcd60e51b81526004018080602001828103825260238152602001806143d56023913960400191505060405180910390fd5b60025442116125c6576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116916000805160206142d183398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610afa612622612ef4565b8484612fe4565b601a54600160b81b900460ff1681565b612641612ef4565b6000546001600160a01b03908116911614612691576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b60025490565b6126ca612ef4565b6000546001600160a01b0390811691161461271a576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601a805461ffff60b01b1960ff60a81b19909116600160a81b1716600160b01b17905542601055565b6001600160a01b031660009081526009602052604090205460ff1690565b612769612ef4565b6000546001600160a01b039081169116146127b9576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601a805460ff60c01b19169055565b6127d0612ef4565b6000546001600160a01b03908116911614612820576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b612840606461283a83600d546139d890919063ffffffff16565b906136c9565b601b5550565b61284e612ef4565b6000546001600160a01b0390811691161461289e576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815542820160025560405181906000805160206142d1833981519152908290a350565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b612917612ef4565b6000546001600160a01b03908116911614612967576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601a805460ff60b81b1916600160b81b179055565b612984612ef4565b6000546001600160a01b039081169116146129d4576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601a8054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b03166000908152600b602052604090205460ff1690565b612a18612ef4565b6000546001600160a01b03908116911614612a68576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415612ac45760405162461bcd60e51b81526004018080602001828103825260228152602001806143876022913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff1615612b32576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415612b8c576001600160a01b038116600090815260036020526040902054612b7290610dc6565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b612bfa612ef4565b6000546001600160a01b03908116911614612c4a576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b6001600160a01b038116612c8f5760405162461bcd60e51b81526004018080602001828103825260268152602001806141f96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216916000805160206142d183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b612ce0612ef4565b6000546001600160a01b03908116911614612d30576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b4761106881613a31565b4790565b612d46612ef4565b6000546001600160a01b03908116911614612d96576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff16612e03576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600a54811015610cb857816001600160a01b0316600a8281548110612e2757fe5b6000918252602090912001546001600160a01b03161415612ecc57600a80546000198101908110612e5457fe5b600091825260209091200154600a80546001600160a01b039092169183908110612e7a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600990925220805460ff19169055600a805480610c8957fe5b600101612e06565b601a54600160c01b900460ff1681565b601a54600160b01b900460ff1681565b3390565b6001600160a01b038316612f3d5760405162461bcd60e51b81526004018080602001828103825260248152602001806143636024913960400191505060405180910390fd5b6001600160a01b038216612f825760405162461bcd60e51b815260040180806020018281038252602281526020018061421f6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260076020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166130295760405162461bcd60e51b815260040180806020018281038252602581526020018061433e6025913960400191505060405180910390fd5b6001600160a01b03821661306e5760405162461bcd60e51b81526004018080602001828103825260238152602001806141ac6023913960400191505060405180910390fd5b600081116130ad5760405162461bcd60e51b81526004018080602001828103825260298152602001806142f16029913960400191505060405180910390fd5b6001600160a01b0382166000908152600b602052604090205460ff1615613115576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b336000908152600b602052604090205460ff1615613174576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b61317c61236e565b6001600160a01b0316836001600160a01b0316141580156131b657506131a061236e565b6001600160a01b0316826001600160a01b031614155b1561353557601a54600160b01b900460ff1661328c576001600160a01b0383163014806131eb57506001600160a01b03821630145b8061320e57506131f961236e565b6001600160a01b0316836001600160a01b0316145b80613231575061321c61236e565b6001600160a01b0316826001600160a01b0316145b61328c57601a54600160b01b900460ff1661328c576040805162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b604482015290519081900360640190fd5b601a54600160b81b900460ff161561336f576001600160a01b03831660009081526005602052604090205442601e9091011180156132e757506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b80156133015750601a546001600160a01b03848116911614155b15613326576001600160a01b038316600090815260056020526040902042905561336f565b601a54600160b81b900460ff161561336f5760405162461bcd60e51b81526004018080602001828103825260278152602001806142416027913960400191505060405180910390fd5b601a54600160c01b900460ff1615613468576001600160a01b03831630148015906133a357506001600160a01b0382163014155b80156133bd57506019546001600160a01b03848116911614155b80156133d757506019546001600160a01b03838116911614155b15613468576019546001600160a01b03166133f0612ef4565b6001600160a01b0316148061341f5750601a546001600160a01b0316613414612ef4565b6001600160a01b0316145b613468576040805162461bcd60e51b81526020600482015260156024820152744552523a2050616e63616b6573776170206f6e6c7960581b604482015290519081900360640190fd5b60105460050142101561353557601a546001600160a01b038481169116148015906134b057506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b80156134ca57506019546001600160a01b03848116911614155b15613535576001600160a01b0383166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b03191690911790555b600061354030611099565b601c54601a5491925082101590600160a01b900460ff1615801561356d5750601a54600160a81b900460ff165b80156135765750805b80156135905750601a546001600160a01b03868116911614155b156135b05761359e8261380a565b4780156135ae576135ae47613a31565b505b6001600160a01b03851660009081526008602052604090205460019060ff16806135f257506001600160a01b03851660009081526008602052604090205460ff165b156135fb575060005b61360786868684613a73565b505050505050565b6000818484111561369e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561366357818101518382015260200161364b565b50505050905090810190601f1680156136905780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006136b3613be7565b90925090506136c282826136c9565b9250505090565b600061370b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d4a565b9392505050565b60008282018381101561370b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006137898a601454601554613daf565b92509250925060006137996136a6565b905060008060006137ab8e8786613dfe565b919e509c509a509598509396509194505050505091939550919395565b600061370b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061360f565b601a805460ff60a01b1916600160a01b1790556040805160028082526060808301845292602083019080368337019050509050308160008151811061384b57fe5b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561389f57600080fd5b505afa1580156138b3573d6000803e3d6000fd5b505050506040513d60208110156138c957600080fd5b50518151829060019081106138da57fe5b6001600160a01b0392831660209182029290920101526019546139009130911684612ef8565b60195460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561398657818101518382015260200161396e565b505050509050019650505050505050600060405180830381600087803b1580156139af57600080fd5b505af11580156139c3573d6000803e3d6000fd5b5050601a805460ff60a01b1916905550505050565b6000826139e757506000610afe565b828202828482816139f457fe5b041461370b5760405162461bcd60e51b81526004018080602001828103825260218152602001806142686021913960400191505060405180910390fd5b6018546001600160a01b03166108fc613a4b8360026136c9565b6040518115909202916000818181858888f19350505050158015610cb8573d6000803e3d6000fd5b80613a8057613a80613e3a565b6001600160a01b03841660009081526009602052604090205460ff168015613ac157506001600160a01b03831660009081526009602052604090205460ff16155b15613ad657613ad1848484613e6c565b613bd4565b6001600160a01b03841660009081526009602052604090205460ff16158015613b1757506001600160a01b03831660009081526009602052604090205460ff165b15613b2757613ad1848484613f90565b6001600160a01b03841660009081526009602052604090205460ff16158015613b6957506001600160a01b03831660009081526009602052604090205460ff16155b15613b7957613ad1848484614039565b6001600160a01b03841660009081526009602052604090205460ff168015613bb957506001600160a01b03831660009081526009602052604090205460ff165b15613bc957613ad184848461407d565b613bd4848484614039565b80613be157613be16140f0565b50505050565b600e54600d546000918291825b600a54811015613d18578260036000600a8481548110613c1057fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c7557508160046000600a8481548110613c4e57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c8c57600e54600d5494509450505050613d46565b613ccc60036000600a8481548110613ca057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906137c8565b9250613d0e60046000600a8481548110613ce257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906137c8565b9150600101613bf4565b50600d54600e54613d28916136c9565b821015613d4057600e54600d54935093505050613d46565b90925090505b9091565b60008183613d995760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561366357818101518382015260200161364b565b506000838581613da557fe5b0495945050505050565b6000808080613dc3606461283a89896139d8565b90506000613dd6606461283a8a896139d8565b90506000613dee82613de88b866137c8565b906137c8565b9992985090965090945050505050565b6000808080613e0d87866139d8565b90506000613e1b87876139d8565b90506000613e2983836137c8565b929992985090965090945050505050565b601454158015613e4a5750601554155b15613e5457613e6a565b6014805460165560158054601755600091829055555b565b600080600080600080613e7e8761376c565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613eb090886137c8565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613edf90876137c8565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054613f0e9086613712565b6001600160a01b038916600090815260036020526040902055613f30816140fe565b613f3a8483614187565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613fa28761376c565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613fd490876137c8565b6001600160a01b03808b16600090815260036020908152604080832094909455918b1681526004909152205461400a9084613712565b6001600160a01b038916600090815260046020908152604080832093909355600390522054613f0e9086613712565b60008060008060008061404b8761376c565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613edf90876137c8565b60008060008060008061408f8761376c565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506140c190886137c8565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613fd490876137c8565b601654601455601754601555565b60006141086136a6565b9050600061411683836139d8565b306000908152600360205260409020549091506141339082613712565b3060009081526003602090815260408083209390935560099052205460ff161561418257306000908152600460205260409020546141719084613712565b306000908152600460205260409020555b505050565b600e5461419490836137c8565b600e55600f546141a49082613712565b600f55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373596f75277265206f6e20636f6f6c646f776e2120333073206265747765656e2074726164657321536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209d54840e5f24c21edf27f40ebda6e9199b4016a219656ba145803f232859bbf064736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806392bbf08e11610175578063d543dbeb116100dc578063f2cc0c1811610095578063f815a8421161006f578063f815a842146109de578063f84354f1146109f3578063fe76374f14610a26578063ffb54a9914610a3b576102b9565b8063f2cc0c1814610963578063f2fde38b14610996578063f4293890146109c9576102b9565b8063d543dbeb14610860578063dd4670641461088a578063dd62ed3e146108b4578063e015061e146108ef578063e01af92c14610904578063e47d606014610930576102b9565b8063a985ceef1161012e578063a985ceef1461079e578063af9549e0146107b3578063b6c52324146107ee578063c9567bf914610803578063cba0e99614610818578063d07deb4e1461084b576102b9565b806392bbf08e146106ba5780639354e0fc146106ed57806395d89b4114610702578063a457c2d714610717578063a69df4b514610750578063a9059cbb14610765576102b9565b80634549b03911610219578063715018a6116101d2578063715018a61461061e578063790ca413146106335780637d1db4a5146106485780638203f5fe1461065d57806383b61c8b146106725780638da5cb5b146106a5576102b9565b80634549b0391461054757806349bd5a5e1461057957806351bc3c851461058e5780635342acb4146105a35780636ddd1713146105d657806370a08231146105eb576102b9565b80632338dbe31161026b5780632338dbe31461043757806323b872dd1461044c5780632d8381191461048f578063313ce567146104b957806339509351146104e45780633bd5d1731461051d576102b9565b806306fdde03146102be578063095ea7b3146103485780630b2a808c1461039557806313114a9d146103ca5780631694505e146103f157806318160ddd14610422576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610a50565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030d5781810151838201526020016102f5565b50505050905090810190601f16801561033a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035457600080fd5b506103816004803603604081101561036b57600080fd5b506001600160a01b038135169060200135610ae6565b604080519115158252519081900360200190f35b3480156103a157600080fd5b506103c8600480360360208110156103b857600080fd5b50356001600160a01b0316610b04565b005b3480156103d657600080fd5b506103df610cbc565b60408051918252519081900360200190f35b3480156103fd57600080fd5b50610406610cc2565b604080516001600160a01b039092168252519081900360200190f35b34801561042e57600080fd5b506103df610cd1565b34801561044357600080fd5b506103c8610cd7565b34801561045857600080fd5b506103816004803603606081101561046f57600080fd5b506001600160a01b03813581169160208101359091169060400135610d3f565b34801561049b57600080fd5b506103df600480360360208110156104b257600080fd5b5035610dc6565b3480156104c557600080fd5b506104ce610e28565b6040805160ff9092168252519081900360200190f35b3480156104f057600080fd5b506103816004803603604081101561050757600080fd5b506001600160a01b038135169060200135610e31565b34801561052957600080fd5b506103c86004803603602081101561054057600080fd5b5035610e7f565b34801561055357600080fd5b506103df6004803603604081101561056a57600080fd5b50803590602001351515610f59565b34801561058557600080fd5b50610406610feb565b34801561059a57600080fd5b506103c8610ffa565b3480156105af57600080fd5b50610381600480360360208110156105c657600080fd5b50356001600160a01b031661106b565b3480156105e257600080fd5b50610381611089565b3480156105f757600080fd5b506103df6004803603602081101561060e57600080fd5b50356001600160a01b0316611099565b34801561062a57600080fd5b506103c86110fb565b34801561063f57600080fd5b506103df61118b565b34801561065457600080fd5b506103df611191565b34801561066957600080fd5b506103c8611197565b34801561067e57600080fd5b506103c86004803603602081101561069557600080fd5b50356001600160a01b03166121e6565b3480156106b157600080fd5b5061040661236e565b3480156106c657600080fd5b506103c8600480360360208110156106dd57600080fd5b50356001600160a01b031661237d565b3480156106f957600080fd5b506103c86123f7565b34801561070e57600080fd5b506102d361245e565b34801561072357600080fd5b506103816004803603604081101561073a57600080fd5b506001600160a01b0381351690602001356124bf565b34801561075c57600080fd5b506103c8612527565b34801561077157600080fd5b506103816004803603604081101561078857600080fd5b506001600160a01b038135169060200135612615565b3480156107aa57600080fd5b50610381612629565b3480156107bf57600080fd5b506103c8600480360360408110156107d657600080fd5b506001600160a01b0381351690602001351515612639565b3480156107fa57600080fd5b506103df6126bc565b34801561080f57600080fd5b506103c86126c2565b34801561082457600080fd5b506103816004803603602081101561083b57600080fd5b50356001600160a01b0316612743565b34801561085757600080fd5b506103c8612761565b34801561086c57600080fd5b506103c86004803603602081101561088357600080fd5b50356127c8565b34801561089657600080fd5b506103c8600480360360208110156108ad57600080fd5b5035612846565b3480156108c057600080fd5b506103df600480360360408110156108d757600080fd5b506001600160a01b03813581169160200135166128e4565b3480156108fb57600080fd5b506103c861290f565b34801561091057600080fd5b506103c86004803603602081101561092757600080fd5b5035151561297c565b34801561093c57600080fd5b506103816004803603602081101561095357600080fd5b50356001600160a01b03166129f2565b34801561096f57600080fd5b506103c86004803603602081101561098657600080fd5b50356001600160a01b0316612a10565b3480156109a257600080fd5b506103c8600480360360208110156109b957600080fd5b50356001600160a01b0316612bf2565b3480156109d557600080fd5b506103c8612cd8565b3480156109ea57600080fd5b506103df612d3a565b3480156109ff57600080fd5b506103c860048036036020811015610a1657600080fd5b50356001600160a01b0316612d3e565b348015610a3257600080fd5b50610381612ed4565b348015610a4757600080fd5b50610381612ee4565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610adc5780601f10610ab157610100808354040283529160200191610adc565b820191906000526020600020905b815481529060010190602001808311610abf57829003601f168201915b5050505050905090565b6000610afa610af3612ef4565b8484612ef8565b5060015b92915050565b610b0c612ef4565b6000546001600160a01b03908116911614610b5c576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600b602052604090205460ff16610bc9576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600c54811015610cb857816001600160a01b0316600c8281548110610bed57fe5b6000918252602090912001546001600160a01b03161415610cb057600c80546000198101908110610c1a57fe5b600091825260209091200154600c80546001600160a01b039092169183908110610c4057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600b90915260409020805460ff19169055600c805480610c8957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610cb8565b600101610bcc565b5050565b600f5490565b6019546001600160a01b031681565b600d5490565b610cdf612ef4565b6000546001600160a01b03908116911614610d2f576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b69d3c21bcecceda1000000601b55565b6000610d4c848484612fe4565b610dbc84610d58612ef4565b610db785604051806060016040528060288152602001614289602891396001600160a01b038a16600090815260076020526040812090610d96612ef4565b6001600160a01b03168152602081019190915260400160002054919061360f565b612ef8565b5060019392505050565b6000600e54821115610e095760405162461bcd60e51b815260040180806020018281038252602a8152602001806141cf602a913960400191505060405180910390fd5b6000610e136136a6565b9050610e1f83826136c9565b9150505b919050565b60135460ff1690565b6000610afa610e3e612ef4565b84610db78560076000610e4f612ef4565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613712565b6000610e89612ef4565b6001600160a01b03811660009081526009602052604090205490915060ff1615610ee45760405162461bcd60e51b815260040180806020018281038252602c8152602001806143a9602c913960400191505060405180910390fd5b6000610eef8361376c565b505050506001600160a01b038416600090815260036020526040902054919250610f1b919050826137c8565b6001600160a01b038316600090815260036020526040902055600e54610f4190826137c8565b600e55600f54610f519084613712565b600f55505050565b6000600d54831115610fb2576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610fd1576000610fc28461376c565b50939550610afe945050505050565b6000610fdc8461376c565b50929550610afe945050505050565b601a546001600160a01b031681565b611002612ef4565b6000546001600160a01b03908116911614611052576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b600061105d30611099565b90506110688161380a565b50565b6001600160a01b031660009081526008602052604090205460ff1690565b601a54600160a81b900460ff1681565b6001600160a01b03811660009081526009602052604081205460ff16156110d957506001600160a01b038116600090815260046020526040902054610e23565b6001600160a01b038216600090815260036020526040902054610afe90610dc6565b611103612ef4565b6000546001600160a01b03908116911614611153576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116906000805160206142d1833981519152908390a3600080546001600160a01b0319169055565b60105481565b601b5481565b61119f612ef4565b6000546001600160a01b039081169116146111ef576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561124157600080fd5b505afa158015611255573d6000803e3d6000fd5b505050506040513d602081101561126b57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156112bb57600080fd5b505afa1580156112cf573d6000803e3d6000fd5b505050506040513d60208110156112e557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b15801561133757600080fd5b505af115801561134b573d6000803e3d6000fd5b505050506040513d602081101561136157600080fd5b5051601a80546001600160a01b03199081166001600160a01b0393841617909155601980549091169183169190911790556001600860006113a061236e565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260088352908120805484166001908117909155600b9092527fc274f9872928131cb7ff581cc24fdbde2670d328386d345e40b59bf36ffda1da8054841683179055600c805480840182557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790810180546001600160a01b0319908116737589319ed0fd750017159fb4e4d96c63966173c1179091557fe349bf7cb40a1d682fcc1c52ea4dd0fffc14828c762bcf08c0c2a9ef14a583968054871686179055825480860184558201805482167365a67df75ccbf57828185c7c050e34de64d859d01790557f74d7fc0a45c6928cce922f294b8bf5e7fff3f89771e2114b18a5cd1d1f45773580548716861781558354808701855583018054831673e031b36b53e53a292a20c5f08fd1658cddf74fce9081179091558154881687179091558354808701855583018054831690911790557f0f1b60510ca1e1bf00eec02fea41847afc989fbd83852cdb3ca91ce622a1d54d80548716861790558254808601845582018054821673e516bdee55b0b4e9bacaf6285130de15589b13451790557ff8ebe5e7623ca891e5bb8ce5e72b0c5ddeae8c7d8c0932740de908fdac44ec0080548716861790558254808601845582018054821673a1cec245c456dd1bd9f2815a6955fef44eb4191b1790557f16a15fb2aa0b66ff4f4234d97be437d134114b368ffd745d8de6e6838f9fba3a80548716861790558254808601845582018054821673d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf951790557f287292fc49b5d73ef6d6f7f228ef3fe49c8cd2ac6e9c89064eb61fd7fb9f519a80548716861790558254808601845582018054821673fe76f05dc59fec04184fa0245ad0c3cf9a57b9641790557f66504bab4295e88d515a9325b1909b99559a398602c86c64fe2ad7b94e0f761680548716861790558254808601845582018054821673dc81a3450817a58d00f45c86d0368290088db8481790557f4c88ad78a60fb4355141b4ac46c8f7af9256d7dcebaf319200612bf767c0bd8a8054871686179055825480860184558201805482167345fd07c63e5c316540f14b2002b085aee78e38811790557f509f0c09776cdc3f0041fbef622c53cd68b7fdb9a9aa03b44d173795d33d9a2c8054871686179055825480860184558201805482167327f9adb26d532a41d97e00206114e429ad58c6791790557f4ab1ad46ab225965adc4e1d94d5aaeaf25059fc3ba4fcaa5d4b5e7639b276b96805487168617905582548086018455820180548216739282dc5c422fa91ff2f6ff3a0b45b7bf97cf78e71790557fb6cf2af14ec747288a3172f747dce8489db9f7ffed0705b048086a04ae6d883e80548716861790558254808601845582018054821673fad95b6089c53a0d1d861eabfaadd8901b0f85331790557f90f8eb466ce0b8ffe45cba484dc56157a7d0481c956801f8344c8ca9e3ab66fc805487168617905582548086018455820180548216731d6e8bac6ea3730825bde4b005ed7b2b39a2932d1790557f084f1b81bcbce7852bcad334f6636dd62e06d31b2f61a0cfa649d36ddc7a140b8054871686179055825480860184558201805482166d084e91743124a982076c59f100841790557fe964af2a39de4befe9efd0a93c5f33430d4d469a86ca04ead00ca450e1cc51dc805487168617905582548086018455820180548216736da4bea09c3aa0761b09b19837d9105a522543031790557f43bc11ee80840e60bc6eecdaf2f3dbb20e2a51f2ad7c84ccd7a3ee511c229b5680548716861790558254808601845582018054821673323b7f37d382a68b0195b873af17cea5b67cd5951790557ff3f5813ee85ebee82b51c4fbd213ca437b28b57dd42773ca313877c0421fdd498054871686179055825480860184558201805482166f5804b22091aa9830e50459a15e7c92411790557fa806c9890a137af663d0d873337bf05aee2f15a430b39dde586e5d5a9662788280548716861790558254808601845582018054821673a3b0e79935815730d942a444a84d4bd14a3395531790557f37f2334e5c4c9574d9d477ff54aae39ea3eb90b5c2ae4ef3cf5ad5a3292bc0a380548716861790558254808601845582018054821673f6da21e95d74767009accb145b96897ac3630bad1790557f5f39b10403a84e529641be6f242a318374526da4fb6710d79679d47441b2a7c08054871686179055825480860184558201805482166d7673393729d5618dc555fd13f9aa1790557f5c7b6b080beaaf2d4ae0f74ea085f3bbf8609b2401495af9fffe89ed4435564b8054871686179055825480860184558201805482166d03441d59dde9a90bffb1cd3fabf11790557fac0a3c6e1cda4154d919f5f45cd6714b3123d27803fd2d300bb571c9d92f6c778054871686179055825480860184558201805482167359903993ae67bf48f10832e9be28935fee04d6f61790557f3a5d40cea00d9d63dd180120b8b5f647d8c74aca077efca2f559deb04eb5811d80548716861790558254808601845582018054821670917de6037d52b1f0a306eecd208405f7cd1790557f5fa1d7e94eb4942d36a49413ca4d16accd08fb1110f77dfb53231b36d79cc42e805487168617905582548086018455820180548216737100e690554b1c2fd01e8648db88be235c1e65141790557f77fc7072d38bd00627c3a08b633f932d348498925cead243099866a7f90ace068054871686179055825480860184558201805482167372b30cdc1583224381132d379a052a6b107254151790557f3081b1a493729edee55cece4de980fa98487de7a5280b359c0bd87eed203d730805487168617905582548086018455820180548216739edd647d7d6eceae6bb61d7785ef66c5055a9bee1790557f546f120f655c062c354e71127d493f355f17cfa1add369fa90759489adb73fda80548716861790558254808601845582018054821673fe9d99ef02e905127239e85a611c29ad32c31c2f1790557fde956483604ddf4b64ec3e2f9fc80a0dc2088c392511f1411782a7d8ae297f4c8054871686178155835480870185558301805483167339608b6f20704889c51c0ae28b1fca8f36a5239b9081179091557f75b6c254782bae42da9d86e5b3b038adccd258bd17d730f1912a4d8f0937784880548916881790558454808801865584018054841673c496d84215d5018f6f53e7f6f12e45c9b5e8e8a91790557fde2a7d29f3150e1ddb7d14e8e59cf128a3b67513b254bdfac9b088ad2be525a28054891688179055845480880186558401805484167359341bc6b4f3ace878574b05914f43309dd678c71790557fa6a51fa55d9d229c03843ddaa598168904b330eef370885236990ddb645da1d880548916881790558454808801865584018054841673e986d48efee9ec1b8f66cd0b0ae8e3d18f091bdf1790557f55b54b221ed3f9281edb8ffbf0fb95a8ab4be2f4d8cbfaca4dce33d0dfe8587a805489168817905584548088018655840180548416734aeb32e16dcac00b092596adc6cd4955efdee2901790557f87d3f383669d84cb7b974d2d22e16224a71feda94455970040b83518cc86744680548916881790558454808801865584018054841673136f4b5b6a306091b280e3f251fa0e21b1280cd51790558154881687179091558354808701855583018054831690911790557f218a0253766218fcda78437f64b24524daefb1cad97e42c50028341fc55cdb22805487168617905582548086018455820180548216735b83a351500b631cc2a20a665ee17f0dc66e3db71790557f436e4ad714e8c3aff7e26123430dd4dbd319e15777b9d8b55411bf1463a9cb5b80548716861790558254808601845582018054821673bcb05a3f85d34f0194c70d5914d5c4e28f11cc021790557fe7b20fa0205f84b9d914c445ceea320ccd2839909270357f6b8947abb472a5908054871686179055825480860184558201805482167322246f9bca9921bfa9a3f8df5babc5bc8ee738501790557f9dfcf2a538dd0b759dd7771d809627012524bcdd77f1316cd21f485a44da421f8054871686179055825480860184558201805482167342d4c197036bd9984ca652303e07dd29fa6bdb371790557f494c6787b69d89b59a43a566573d0eb3bdbbe9fe253e454213f244e13d42e1668054871686179055825480860184558201805482166e3b3cc22af3ae1eac0440bcee416b401790557fbbe2d054b52a64432b404f4c58c46edaaf6f4423cdeabf83f69cf3dddb7aaab880548716861790558254808601845582018054821673231dc6af3c66741f6cf618884b953df0e83c1a2a1790557fa2d156f2feaaf188eee0f3ab58b28e4ad365e80c7a8722fed7272494f9f7423080548716861790558254808601845582018054821673c6bf34596f74eb22e066a878848dfb9fc1cf4c651790557fe0606630f048922c11b6a1604064d1c3580ba1a2e9d2fddf650d03c5b65711498054871686179055825480860184558201805482167320f6fcd6b8813c4f98c0ffbd88c87c0255040aa31790557f0ee17963b7c279334e88229c27e11d12d87d362a7cd056ac92e860a09921a44f80548716861790558254808601845582018054821673d334c5392ed4863c81576422b968c6fb90ee9f791790557f0ed1044b6124a6cb0cb6e03084903b3a77d71983fa970874ae3abd71b8d0af4880548716861790558254808601845582018054821673fffff6e70842330948ca47254f2be673b1cb0db71790557f03c6491a6914a13119e10492804f993526cf0737203a9d1e295748bfe934f0b580548716861781558354808701855583018054831673a39c50bf86e15391180240938f469a7bf4fdae9a9081179091558154909716861790558254948501835591909252910180548216909217909155600960155560188054909116734091e425d0cc258d8071a80362a99d9edb7e88d917905550565b6121ee612ef4565b6000546001600160a01b0390811691161461223e576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561229a5760405162461bcd60e51b815260040180806020018281038252602481526020018061431a6024913960400191505060405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff1615612308576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031690565b612385612ef4565b6000546001600160a01b039081169116146123d5576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6123ff612ef4565b6000546001600160a01b0390811691161461244f576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601a805460ff60b81b19169055565b60128054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610adc5780601f10610ab157610100808354040283529160200191610adc565b6000610afa6124cc612ef4565b84610db7856040518060600160405280602581526020016143f860259139600760006124f6612ef4565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061360f565b6001546001600160a01b031633146125705760405162461bcd60e51b81526004018080602001828103825260238152602001806143d56023913960400191505060405180910390fd5b60025442116125c6576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116916000805160206142d183398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610afa612622612ef4565b8484612fe4565b601a54600160b81b900460ff1681565b612641612ef4565b6000546001600160a01b03908116911614612691576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b60025490565b6126ca612ef4565b6000546001600160a01b0390811691161461271a576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601a805461ffff60b01b1960ff60a81b19909116600160a81b1716600160b01b17905542601055565b6001600160a01b031660009081526009602052604090205460ff1690565b612769612ef4565b6000546001600160a01b039081169116146127b9576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601a805460ff60c01b19169055565b6127d0612ef4565b6000546001600160a01b03908116911614612820576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b612840606461283a83600d546139d890919063ffffffff16565b906136c9565b601b5550565b61284e612ef4565b6000546001600160a01b0390811691161461289e576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815542820160025560405181906000805160206142d1833981519152908290a350565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b612917612ef4565b6000546001600160a01b03908116911614612967576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601a805460ff60b81b1916600160b81b179055565b612984612ef4565b6000546001600160a01b039081169116146129d4576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b601a8054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b03166000908152600b602052604090205460ff1690565b612a18612ef4565b6000546001600160a01b03908116911614612a68576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415612ac45760405162461bcd60e51b81526004018080602001828103825260228152602001806143876022913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff1615612b32576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415612b8c576001600160a01b038116600090815260036020526040902054612b7290610dc6565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b612bfa612ef4565b6000546001600160a01b03908116911614612c4a576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b6001600160a01b038116612c8f5760405162461bcd60e51b81526004018080602001828103825260268152602001806141f96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216916000805160206142d183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b612ce0612ef4565b6000546001600160a01b03908116911614612d30576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b4761106881613a31565b4790565b612d46612ef4565b6000546001600160a01b03908116911614612d96576040805162461bcd60e51b815260206004820181905260248201526000805160206142b1833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff16612e03576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600a54811015610cb857816001600160a01b0316600a8281548110612e2757fe5b6000918252602090912001546001600160a01b03161415612ecc57600a80546000198101908110612e5457fe5b600091825260209091200154600a80546001600160a01b039092169183908110612e7a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600990925220805460ff19169055600a805480610c8957fe5b600101612e06565b601a54600160c01b900460ff1681565b601a54600160b01b900460ff1681565b3390565b6001600160a01b038316612f3d5760405162461bcd60e51b81526004018080602001828103825260248152602001806143636024913960400191505060405180910390fd5b6001600160a01b038216612f825760405162461bcd60e51b815260040180806020018281038252602281526020018061421f6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260076020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166130295760405162461bcd60e51b815260040180806020018281038252602581526020018061433e6025913960400191505060405180910390fd5b6001600160a01b03821661306e5760405162461bcd60e51b81526004018080602001828103825260238152602001806141ac6023913960400191505060405180910390fd5b600081116130ad5760405162461bcd60e51b81526004018080602001828103825260298152602001806142f16029913960400191505060405180910390fd5b6001600160a01b0382166000908152600b602052604090205460ff1615613115576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b336000908152600b602052604090205460ff1615613174576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b61317c61236e565b6001600160a01b0316836001600160a01b0316141580156131b657506131a061236e565b6001600160a01b0316826001600160a01b031614155b1561353557601a54600160b01b900460ff1661328c576001600160a01b0383163014806131eb57506001600160a01b03821630145b8061320e57506131f961236e565b6001600160a01b0316836001600160a01b0316145b80613231575061321c61236e565b6001600160a01b0316826001600160a01b0316145b61328c57601a54600160b01b900460ff1661328c576040805162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b604482015290519081900360640190fd5b601a54600160b81b900460ff161561336f576001600160a01b03831660009081526005602052604090205442601e9091011180156132e757506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b80156133015750601a546001600160a01b03848116911614155b15613326576001600160a01b038316600090815260056020526040902042905561336f565b601a54600160b81b900460ff161561336f5760405162461bcd60e51b81526004018080602001828103825260278152602001806142416027913960400191505060405180910390fd5b601a54600160c01b900460ff1615613468576001600160a01b03831630148015906133a357506001600160a01b0382163014155b80156133bd57506019546001600160a01b03848116911614155b80156133d757506019546001600160a01b03838116911614155b15613468576019546001600160a01b03166133f0612ef4565b6001600160a01b0316148061341f5750601a546001600160a01b0316613414612ef4565b6001600160a01b0316145b613468576040805162461bcd60e51b81526020600482015260156024820152744552523a2050616e63616b6573776170206f6e6c7960581b604482015290519081900360640190fd5b60105460050142101561353557601a546001600160a01b038481169116148015906134b057506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b80156134ca57506019546001600160a01b03848116911614155b15613535576001600160a01b0383166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b03191690911790555b600061354030611099565b601c54601a5491925082101590600160a01b900460ff1615801561356d5750601a54600160a81b900460ff165b80156135765750805b80156135905750601a546001600160a01b03868116911614155b156135b05761359e8261380a565b4780156135ae576135ae47613a31565b505b6001600160a01b03851660009081526008602052604090205460019060ff16806135f257506001600160a01b03851660009081526008602052604090205460ff165b156135fb575060005b61360786868684613a73565b505050505050565b6000818484111561369e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561366357818101518382015260200161364b565b50505050905090810190601f1680156136905780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006136b3613be7565b90925090506136c282826136c9565b9250505090565b600061370b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d4a565b9392505050565b60008282018381101561370b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006137898a601454601554613daf565b92509250925060006137996136a6565b905060008060006137ab8e8786613dfe565b919e509c509a509598509396509194505050505091939550919395565b600061370b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061360f565b601a805460ff60a01b1916600160a01b1790556040805160028082526060808301845292602083019080368337019050509050308160008151811061384b57fe5b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561389f57600080fd5b505afa1580156138b3573d6000803e3d6000fd5b505050506040513d60208110156138c957600080fd5b50518151829060019081106138da57fe5b6001600160a01b0392831660209182029290920101526019546139009130911684612ef8565b60195460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561398657818101518382015260200161396e565b505050509050019650505050505050600060405180830381600087803b1580156139af57600080fd5b505af11580156139c3573d6000803e3d6000fd5b5050601a805460ff60a01b1916905550505050565b6000826139e757506000610afe565b828202828482816139f457fe5b041461370b5760405162461bcd60e51b81526004018080602001828103825260218152602001806142686021913960400191505060405180910390fd5b6018546001600160a01b03166108fc613a4b8360026136c9565b6040518115909202916000818181858888f19350505050158015610cb8573d6000803e3d6000fd5b80613a8057613a80613e3a565b6001600160a01b03841660009081526009602052604090205460ff168015613ac157506001600160a01b03831660009081526009602052604090205460ff16155b15613ad657613ad1848484613e6c565b613bd4565b6001600160a01b03841660009081526009602052604090205460ff16158015613b1757506001600160a01b03831660009081526009602052604090205460ff165b15613b2757613ad1848484613f90565b6001600160a01b03841660009081526009602052604090205460ff16158015613b6957506001600160a01b03831660009081526009602052604090205460ff16155b15613b7957613ad1848484614039565b6001600160a01b03841660009081526009602052604090205460ff168015613bb957506001600160a01b03831660009081526009602052604090205460ff165b15613bc957613ad184848461407d565b613bd4848484614039565b80613be157613be16140f0565b50505050565b600e54600d546000918291825b600a54811015613d18578260036000600a8481548110613c1057fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c7557508160046000600a8481548110613c4e57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c8c57600e54600d5494509450505050613d46565b613ccc60036000600a8481548110613ca057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906137c8565b9250613d0e60046000600a8481548110613ce257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906137c8565b9150600101613bf4565b50600d54600e54613d28916136c9565b821015613d4057600e54600d54935093505050613d46565b90925090505b9091565b60008183613d995760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561366357818101518382015260200161364b565b506000838581613da557fe5b0495945050505050565b6000808080613dc3606461283a89896139d8565b90506000613dd6606461283a8a896139d8565b90506000613dee82613de88b866137c8565b906137c8565b9992985090965090945050505050565b6000808080613e0d87866139d8565b90506000613e1b87876139d8565b90506000613e2983836137c8565b929992985090965090945050505050565b601454158015613e4a5750601554155b15613e5457613e6a565b6014805460165560158054601755600091829055555b565b600080600080600080613e7e8761376c565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613eb090886137c8565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613edf90876137c8565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054613f0e9086613712565b6001600160a01b038916600090815260036020526040902055613f30816140fe565b613f3a8483614187565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613fa28761376c565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613fd490876137c8565b6001600160a01b03808b16600090815260036020908152604080832094909455918b1681526004909152205461400a9084613712565b6001600160a01b038916600090815260046020908152604080832093909355600390522054613f0e9086613712565b60008060008060008061404b8761376c565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613edf90876137c8565b60008060008060008061408f8761376c565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506140c190886137c8565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613fd490876137c8565b601654601455601754601555565b60006141086136a6565b9050600061411683836139d8565b306000908152600360205260409020549091506141339082613712565b3060009081526003602090815260408083209390935560099052205460ff161561418257306000908152600460205260409020546141719084613712565b306000908152600460205260409020555b505050565b600e5461419490836137c8565b600e55600f546141a49082613712565b600f55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373596f75277265206f6e20636f6f6c646f776e2120333073206265747765656e2074726164657321536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209d54840e5f24c21edf27f40ebda6e9199b4016a219656ba145803f232859bbf064736f6c634300060c0033

Deployed Bytecode Sourcemap

25052:28677:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36134:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37046:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37046:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;40883:481;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40883:481:0;-1:-1:-1;;;;;40883:481:0;;:::i;:::-;;38421:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26308:41;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;26308:41:0;;;;;;;;;;;;;;36411:95;;;;;;;;;;;;;:::i;53112:106::-;;;;;;;;;;;;;:::i;37215:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37215:313:0;;;;;;;;;;;;;;;;;:::i;39345:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39345:253:0;;:::i;36320:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37536:218;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37536:218:0;;;;;;;;:::i;38516:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38516:377:0;;:::i;38901:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38901:436:0;;;;;;;;;:::i;26356:28::-;;;;;;;;;;;;;:::i;46728:156::-;;;;;;;;;;;;;:::i;41717:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41717:123:0;-1:-1:-1;;;;;41717:123:0;;:::i;26419:30::-;;;;;;;;;;;;;:::i;36514:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36514:198:0;-1:-1:-1;;;;;36514:198:0;;:::i;15798:148::-;;;;;;;;;;;;;:::i;25903:25::-;;;;;;;;;;;;;:::i;26720:53::-;;;;;;;;;;;;;:::i;27248:8687::-;;;;;;;;;;;;;:::i;40543:332::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40543:332:0;-1:-1:-1;;;;;40543:332:0;;:::i;15164:79::-;;;;;;;;;;;;;:::i;53599:127::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53599:127:0;-1:-1:-1;;;;;53599:127:0;;:::i;53403:91::-;;;;;;;;;;;;;:::i;36225:87::-;;;;;;;;;;;;;:::i;37762:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37762:269:0;;;;;;;;:::i;16801:293::-;;;;;;;;;;;;;:::i;36720:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36720:167:0;;;;;;;;:::i;26541:35::-;;;;;;;;;;;;;:::i;38276:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38276:137:0;;;;;;;;;;:::i;16350:89::-;;;;;;;;;;;;;:::i;35943:183::-;;;;;;;;;;;;;:::i;38039:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38039:110:0;-1:-1:-1;;;;;38039:110:0;;:::i;53308:87::-;;;;;;;;;;;;;:::i;41848:162::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41848:162:0;;:::i;16515:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16515:214:0;;:::i;36895:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36895:143:0;;;;;;;;;;:::i;53502:89::-;;;;;;;;;;;;;:::i;47059:98::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47059:98:0;;;;:::i;38157:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38157:111:0;-1:-1:-1;;;;;38157:111:0;;:::i;39606:443::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39606:443:0;-1:-1:-1;;;;;39606:443:0;;:::i;16098:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16098:244:0;-1:-1:-1;;;;;16098:244:0;;:::i;46892:159::-;;;;;;;;;;;;;:::i;52994:110::-;;;;;;;;;;;;;:::i;40057:478::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40057:478:0;-1:-1:-1;;;;;40057:478:0;;:::i;26615:31::-;;;;;;;;;;;;;:::i;26456:::-;;;;;;;;;;;;;:::i;36134:83::-;36204:5;36197:12;;;;;;;;-1:-1:-1;;36197:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36171:13;;36197:12;;36204:5;;36197:12;;36204:5;36197:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36134:83;:::o;37046:161::-;37121:4;37138:39;37147:12;:10;:12::i;:::-;37161:7;37170:6;37138:8;:39::i;:::-;-1:-1:-1;37195:4:0;37046:161;;;;;:::o;40883:481::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40963:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;40955:57;;;::::0;;-1:-1:-1;;;40955:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;41028:9;41023:334;41047:17;:24:::0;41043:28;::::1;41023:334;;;41121:7;-1:-1:-1::0;;;;;41097:31:0::1;:17;41115:1;41097:20;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;41097:20:0::1;:31;41093:253;;;41172:17;41190:24:::0;;-1:-1:-1;;41190:28:0;;;41172:47;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;41149:17:::1;:20:::0;;-1:-1:-1;;;;;41172:47:0;;::::1;::::0;41167:1;;41149:20;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:70:::0;;-1:-1:-1;;;;;;41149:70:0::1;-1:-1:-1::0;;;;;41149:70:0;;::::1;;::::0;;41238:18;;::::1;::::0;;:9:::1;:18:::0;;;;;;:26;;-1:-1:-1;;41238:26:0::1;::::0;;41283:17:::1;:23:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;41283:23:0;;;;;-1:-1:-1;;;;;;41283:23:0::1;::::0;;;;;41325:5:::1;;41093:253;41073:3;;41023:334;;;;40883:481:::0;:::o;38421:87::-;38490:10;;38421:87;:::o;26308:41::-;;;-1:-1:-1;;;;;26308:41:0;;:::o;36411:95::-;36491:7;;36411:95;:::o;53112:106::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;53185:25:::1;53170:12;:40:::0;53112:106::o;37215:313::-;37313:4;37330:36;37340:6;37348:9;37359:6;37330:9;:36::i;:::-;37377:121;37386:6;37394:12;:10;:12::i;:::-;37408:89;37446:6;37408:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37408:19:0;;;;;;:11;:19;;;;;;37428:12;:10;:12::i;:::-;-1:-1:-1;;;;;37408:33:0;;;;;;;;;;;;-1:-1:-1;37408:33:0;;;:89;:37;:89::i;:::-;37377:8;:121::i;:::-;-1:-1:-1;37516:4:0;37215:313;;;;;:::o;39345:253::-;39411:7;39450;;39439;:18;;39431:73;;;;-1:-1:-1;;;39431:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39515:19;39538:10;:8;:10::i;:::-;39515:33;-1:-1:-1;39566:24:0;:7;39515:33;39566:11;:24::i;:::-;39559:31;;;39345:253;;;;:::o;36320:83::-;36386:9;;;;36320:83;:::o;37536:218::-;37624:4;37641:83;37650:12;:10;:12::i;:::-;37664:7;37673:50;37712:10;37673:11;:25;37685:12;:10;:12::i;:::-;-1:-1:-1;;;;;37673:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;37673:25:0;;;:34;;;;;;;;;;;:38;:50::i;38516:377::-;38568:14;38585:12;:10;:12::i;:::-;-1:-1:-1;;;;;38617:19:0;;;;;;:11;:19;;;;;;38568:29;;-1:-1:-1;38617:19:0;;38616:20;38608:77;;;;-1:-1:-1;;;38608:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38697:15;38721:19;38732:7;38721:10;:19::i;:::-;-1:-1:-1;;;;;;;;;38769:15:0;;;;;;:7;:15;;;;;;38696:44;;-1:-1:-1;38769:28:0;;:15;-1:-1:-1;38696:44:0;38769:19;:28::i;:::-;-1:-1:-1;;;;;38751:15:0;;;;;;:7;:15;;;;;:46;38818:7;;:20;;38830:7;38818:11;:20::i;:::-;38808:7;:30;38862:10;;:23;;38877:7;38862:14;:23::i;:::-;38849:10;:36;-1:-1:-1;;;38516:377:0:o;38901:436::-;38991:7;39030;;39019;:18;;39011:62;;;;;-1:-1:-1;;;39011:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39089:17;39084:246;;39124:15;39148:19;39159:7;39148:10;:19::i;:::-;-1:-1:-1;39123:44:0;;-1:-1:-1;39182:14:0;;-1:-1:-1;;;;;39182:14:0;39084:246;39231:23;39262:19;39273:7;39262:10;:19::i;:::-;-1:-1:-1;39229:52:0;;-1:-1:-1;39296:22:0;;-1:-1:-1;;;;;39296:22:0;26356:28;;;-1:-1:-1;;;;;26356:28:0;;:::o;46728:156::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;46782:23:::1;46808:24;46826:4;46808:9;:24::i;:::-;46782:50;;46843:33;46860:15;46843:16;:33::i;:::-;15444:1;46728:156::o:0;41717:123::-;-1:-1:-1;;;;;41805:27:0;41781:4;41805:27;;;:18;:27;;;;;;;;;41717:123::o;26419:30::-;;;-1:-1:-1;;;26419:30:0;;;;;:::o;36514:198::-;-1:-1:-1;;;;;36604:20:0;;36580:7;36604:20;;;:11;:20;;;;;;;;36600:49;;;-1:-1:-1;;;;;;36633:16:0;;;;;;:7;:16;;;;;;36626:23;;36600:49;-1:-1:-1;;;;;36687:16:0;;;;;;:7;:16;;;;;;36667:37;;:19;:37::i;15798:148::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;15905:1:::1;15889:6:::0;;15868:40:::1;::::0;-1:-1:-1;;;;;15889:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;15868:40:0;15905:1;;15868:40:::1;15936:1;15919:19:::0;;-1:-1:-1;;;;;;15919:19:0::1;::::0;;15798:148::o;25903:25::-;;;;:::o;26720:53::-;;;;:::o;27248:8687::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;27304:35:::1;27361:42;27304:100;;27518:16;-1:-1:-1::0;;;;;27518:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27518:26:0;27582:23:::1;::::0;;-1:-1:-1;;;27582:23:0;;;;-1:-1:-1;;;;;27500:66:0;;::::1;::::0;::::1;::::0;27575:4:::1;::::0;27582:21;;::::1;::::0;::::1;::::0;:23:::1;::::0;;::::1;::::0;27518:26:::1;::::0;27582:23;;;;;;;;:21;:23;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27582:23:0;27500:106:::1;::::0;;-1:-1:-1;;;;;;27500:106:0::1;::::0;;;;;;-1:-1:-1;;;;;27500:106:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;27582:23:::1;::::0;27500:106;;;;;;;-1:-1:-1;27500:106:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27500:106:0;27484:13:::1;:122:::0;;-1:-1:-1;;;;;;27484:122:0;;::::1;-1:-1:-1::0;;;;;27484:122:0;;::::1;;::::0;;;27670:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;27768:18:0::1;-1:-1:-1::0;27787:7:0::1;:5;:7::i;:::-;-1:-1:-1::0;;;;;27768:27:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;27768:27:0;;;:34;;;::::1;;-1:-1:-1::0;;27768:34:0;;::::1;;::::0;;27840:4:::1;27813:33:::0;;:18:::1;:33:::0;;;;;:40;;;::::1;27768:34:::0;27813:40;;::::1;::::0;;;27939:9:::1;:62:::0;;;;:69;;;::::1;::::0;::::1;::::0;;28019:17:::1;:75:::0;;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;28019:75:0;;::::1;27957:42;28019:75;::::0;;;28107:62;:69;;;::::1;::::0;::::1;::::0;;28187:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;28125:42;28187:75;::::0;;28275:62;:69;;;::::1;::::0;::::1;::::0;;28355:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;28293:42;28355:75:::0;;::::1;::::0;;;28443:69;;;::::1;::::0;::::1;::::0;;;28523:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;28611:62;:69;;;::::1;::::0;::::1;::::0;;28691:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;28629:42;28691:75;::::0;;28779:62;:69;;;::::1;::::0;::::1;::::0;;28859:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;28797:42;28859:75;::::0;;28947:62;:69;;;::::1;::::0;::::1;::::0;;29027:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;28965:42;29027:75;::::0;;29115:62;:69;;;::::1;::::0;::::1;::::0;;29195:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;29133:42;29195:75;::::0;;29283:62;:69;;;::::1;::::0;::::1;::::0;;29363:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;29301:42;29363:75;::::0;;29451:62;:69;;;::::1;::::0;::::1;::::0;;29531:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;29469:42;29531:75;::::0;;29619:62;:69;;;::::1;::::0;::::1;::::0;;29699:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;29637:42;29699:75;::::0;;29787:62;:69;;;::::1;::::0;::::1;::::0;;29867:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;29805:42;29867:75;::::0;;29955:62;:69;;;::::1;::::0;::::1;::::0;;30035:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;29973:42;30035:75;::::0;;30123:62;:69;;;::::1;::::0;::::1;::::0;;30203:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;30141:42;30203:75;::::0;;30291:62;:69;;;::::1;::::0;::::1;::::0;;30371:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;30309:42;30371:75;::::0;;30459:62;:69;;;::::1;::::0;::::1;::::0;;30539:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;30477:42;30539:75;::::0;;30627:62;:69;;;::::1;::::0;::::1;::::0;;30707:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;30645:42;30707:75;::::0;;30795:62;:69;;;::::1;::::0;::::1;::::0;;30875:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;30813:42;30875:75;::::0;;30963:62;:69;;;::::1;::::0;::::1;::::0;;31043:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;30981:42;31043:75;::::0;;31131:62;:69;;;::::1;::::0;::::1;::::0;;31211:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31149:42;31211:75;::::0;;31299:62;:69;;;::::1;::::0;::::1;::::0;;31379:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31317:42;31379:75;::::0;;31467:62;:69;;;::::1;::::0;::::1;::::0;;31547:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31485:42;31547:75;::::0;;31635:62;:69;;;::::1;::::0;::::1;::::0;;31715:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31653:42;31715:75;::::0;;31803:62;:69;;;::::1;::::0;::::1;::::0;;31883:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31821:42;31883:75;::::0;;31971:62;:69;;;::::1;::::0;::::1;::::0;;32051:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31989:42;32051:75;::::0;;32139:62;:69;;;::::1;::::0;::::1;::::0;;32219:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32157:42;32219:75;::::0;;32307:62;:69;;;::::1;::::0;::::1;::::0;;32387:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32325:42;32387:75;::::0;;32475:62;:69;;;::::1;::::0;::::1;::::0;;32555:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32493:42;32555:75;::::0;;32643:62;:69;;;::::1;::::0;::::1;::::0;;32723:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32661:42;32723:75:::0;;::::1;::::0;;;32811:62;:69;;;::::1;::::0;::::1;::::0;;32891:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32829:42;32891:75;::::0;;32979:62;:69;;;::::1;::::0;::::1;::::0;;33059:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32997:42;33059:75;::::0;;33147:62;:69;;;::::1;::::0;::::1;::::0;;33227:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;33165:42;33227:75;::::0;;33315:62;:69;;;::::1;::::0;::::1;::::0;;33395:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;33333:42;33395:75;::::0;;33483:62;:69;;;::::1;::::0;::::1;::::0;;33563:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;33501:42;33563:75;::::0;;33651:69;;;::::1;::::0;::::1;::::0;;;33731:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;33819:62;:69;;;::::1;::::0;::::1;::::0;;33899:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;33837:42;33899:75;::::0;;33987:62;:69;;;::::1;::::0;::::1;::::0;;34067:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34005:42;34067:75;::::0;;34155:62;:69;;;::::1;::::0;::::1;::::0;;34235:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34173:42;34235:75;::::0;;34323:62;:69;;;::::1;::::0;::::1;::::0;;34403:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34341:42;34403:75;::::0;;34491:62;:69;;;::::1;::::0;::::1;::::0;;34571:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34509:42;34571:75;::::0;;34659:62;:69;;;::::1;::::0;::::1;::::0;;34739:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34677:42;34739:75;::::0;;34827:62;:69;;;::::1;::::0;::::1;::::0;;34907:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34845:42;34907:75;::::0;;34995:62;:69;;;::::1;::::0;::::1;::::0;;35075:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;35013:42;35075:75;::::0;;35163:62;:69;;;::::1;::::0;::::1;::::0;;35243:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;35181:42;35243:75;::::0;;35331:62;:69;;;::::1;::::0;::::1;::::0;;35411:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;35349:42;35411:75;::::0;;35499:62;:69;;;::::1;::::0;::::1;::::0;;35579:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;35517:42;35579:75:::0;;::::1;::::0;;;35667:69;;;;::::1;::::0;::::1;::::0;;35747:75;;;;::::1;::::0;;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;35846:1:::1;35835:8;:12:::0;35858:15:::1;:69:::0;;;;::::1;35884:42;35858:69;::::0;;-1:-1:-1;27248:8687:0:o;40543:332::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;40633:42:::1;-1:-1:-1::0;;;;;40622:53:0;::::1;;;40614:102;;;;-1:-1:-1::0;;;40614:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;40736:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;40735:19;40727:62;;;::::0;;-1:-1:-1;;;40727:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;40800:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;40800:25:0::1;40821:4;40800:25:::0;;::::1;::::0;;;40836:17:::1;:31:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;40836:31:0::1;::::0;;::::1;::::0;;40543:332::o;15164:79::-;15202:7;15229:6;-1:-1:-1;;;;;15229:6:0;15164:79;:::o;53599:127::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;53686:15:::1;:32:::0;;-1:-1:-1;;;;;;53686:32:0::1;-1:-1:-1::0;;;;;53686:32:0;;;::::1;::::0;;;::::1;::::0;;53599:127::o;53403:91::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;53463:15:::1;:23:::0;;-1:-1:-1;;;;53463:23:0::1;::::0;;53403:91::o;36225:87::-;36297:7;36290:14;;;;;;;;-1:-1:-1;;36290:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36264:13;;36290:14;;36297:7;;36290:14;;36297:7;36290:14;;;;;;;;;;;;;;;;;;;;;;;;37762:269;37855:4;37872:129;37881:12;:10;:12::i;:::-;37895:7;37904:96;37943:15;37904:96;;;;;;;;;;;;;;;;;:11;:25;37916:12;:10;:12::i;:::-;-1:-1:-1;;;;;37904:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;37904:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;16801:293::-;16853:14;;-1:-1:-1;;;;;16853:14:0;16871:10;16853:28;16845:76;;;;-1:-1:-1;;;16845:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16946:9;;16940:3;:15;16932:60;;;;;-1:-1:-1;;;16932:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17037:14;;;17029:6;;17008:44;;-1:-1:-1;;;;;17037:14:0;;;;17029:6;;;;-1:-1:-1;;;;;;;;;;;17008:44:0;;17072:14;;;17063:23;;-1:-1:-1;;;;;;17063:23:0;-1:-1:-1;;;;;17072:14:0;;;17063:23;;;;;;16801:293::o;36720:167::-;36798:4;36815:42;36825:12;:10;:12::i;:::-;36839:9;36850:6;36815:9;:42::i;26541:35::-;;;-1:-1:-1;;;26541:35:0;;;;;:::o;38276:137::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38367:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;38367:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38276:137::o;16350:89::-;16422:9;;16350:89;:::o;35943:183::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;35998:11:::1;:18:::0;;-1:-1:-1;;;;;;;;35998:18:0;;::::1;-1:-1:-1::0;;;35998:18:0::1;36061::::0;-1:-1:-1;;;36061:18:0::1;::::0;;36103:15:::1;36090:10;:28:::0;35943:183::o;38039:110::-;-1:-1:-1;;;;;38121:20:0;38097:4;38121:20;;;:11;:20;;;;;;;;;38039:110::o;53308:87::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;53368:11:::1;:19:::0;;-1:-1:-1;;;;53368:19:0::1;::::0;;53308:87::o;41848:162::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;41942:60:::1;41986:5;41942:25;41954:12;41942:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;41927:12;:75:::0;-1:-1:-1;41848:162:0:o;16515:214::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;16596:6:::1;::::0;;;16579:23;;-1:-1:-1;;;;;;16579:23:0;;::::1;-1:-1:-1::0;;;;;16596:6:0;::::1;16579:23;::::0;;;16613:19:::1;::::0;;16655:3:::1;:10:::0;::::1;16643:9;:22:::0;16681:40:::1;::::0;16596:6;;-1:-1:-1;;;;;;;;;;;16681:40:0;16596:6;;16681:40:::1;16515:214:::0;:::o;36895:143::-;-1:-1:-1;;;;;37003:18:0;;;36976:7;37003:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;36895:143::o;53502:89::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;53561:15:::1;:22:::0;;-1:-1:-1;;;;53561:22:0::1;-1:-1:-1::0;;;53561:22:0::1;::::0;;53502:89::o;47059:98::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;47128:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;47128:21:0::1;-1:-1:-1::0;;;;47128:21:0;;::::1;::::0;;;::::1;::::0;;47059:98::o;38157:111::-;-1:-1:-1;;;;;38242:18:0;38218:4;38242:18;;;:9;:18;;;;;;;;;38157:111::o;39606:443::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;39698:42:::1;-1:-1:-1::0;;;;;39687:53:0;::::1;;;39679:100;;;;-1:-1:-1::0;;;39679:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;39799:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;39798:21;39790:61;;;::::0;;-1:-1:-1;;;39790:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;39865:16:0;::::1;39884:1;39865:16:::0;;;:7:::1;:16;::::0;;;;;:20;39862:108:::1;;-1:-1:-1::0;;;;;39941:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;39921:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;39902:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;39862:108:::1;-1:-1:-1::0;;;;;39980:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;39980:27:0::1;40003:4;39980:27:::0;;::::1;::::0;;;40018:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;40018:23:0::1;::::0;;::::1;::::0;;39606:443::o;16098:244::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16187:22:0;::::1;16179:73;;;;-1:-1:-1::0;;;16179:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16289:6;::::0;;16268:38:::1;::::0;-1:-1:-1;;;;;16268:38:0;;::::1;::::0;16289:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16268:38:0;::::1;16317:6;:17:::0;;-1:-1:-1;;;;;;16317:17:0::1;-1:-1:-1::0;;;;;16317:17:0;;;::::1;::::0;;;::::1;::::0;;16098:244::o;46892:159::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;46975:21:::1;47007:36;46975:21:::0;47007:16:::1;:36::i;52994:110::-:0;53075:21;52994:110;:::o;40057:478::-;15384:12;:10;:12::i;:::-;15374:6;;-1:-1:-1;;;;;15374:6:0;;;:22;;;15366:67;;;;;-1:-1:-1;;;15366:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15366:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40138:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;40130:60;;;::::0;;-1:-1:-1;;;40130:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;40206:9;40201:327;40225:9;:16:::0;40221:20;::::1;40201:327;;;40283:7;-1:-1:-1::0;;;;;40267:23:0::1;:9;40277:1;40267:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;40267:12:0::1;:23;40263:254;;;40326:9;40336:16:::0;;-1:-1:-1;;40336:20:0;;;40326:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;40311:9:::1;:12:::0;;-1:-1:-1;;;;;40326:31:0;;::::1;::::0;40321:1;;40311:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;40311:46:0::1;-1:-1:-1::0;;;;;40311:46:0;;::::1;;::::0;;40376:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;40415:11:::1;:20:::0;;;;:28;;-1:-1:-1;;40415:28:0::1;::::0;;40462:9:::1;:15:::0;;;::::1;;;40263:254;40243:3;;40201:327;;26615:31:::0;;;-1:-1:-1;;;26615:31:0;;;;;:::o;26456:::-;;;-1:-1:-1;;;26456:31:0;;;;;:::o;985:106::-;1073:10;985:106;:::o;42018:337::-;-1:-1:-1;;;;;42111:19:0;;42103:68;;;;-1:-1:-1;;;42103:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42190:21:0;;42182:68;;;;-1:-1:-1;;;42182:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42263:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;42315:32;;;;;;;;;;;;;;;;;42018:337;;;:::o;42363:3491::-;-1:-1:-1;;;;;42460:20:0;;42452:70;;;;-1:-1:-1;;;42452:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42541:23:0;;42533:71;;;;-1:-1:-1;;;42533:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42632:1;42623:6;:10;42615:64;;;;-1:-1:-1;;;42615:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42699:20:0;;;;;;:9;:20;;;;;;;;42698:21;42690:57;;;;;-1:-1:-1;;;42690:57:0;;;;;;;;;;;;-1:-1:-1;;;42690:57:0;;;;;;;;;;;;;;;42777:10;42767:21;;;;:9;:21;;;;;;;;42766:22;42758:58;;;;;-1:-1:-1;;;42758:58:0;;;;;;;;;;;;-1:-1:-1;;;42758:58:0;;;;;;;;;;;;;;;42842:7;:5;:7::i;:::-;-1:-1:-1;;;;;42832:17:0;:6;-1:-1:-1;;;;;42832:17:0;;;:41;;;;;42866:7;:5;:7::i;:::-;-1:-1:-1;;;;;42853:20:0;:9;-1:-1:-1;;;;;42853:20:0;;;42832:41;42829:1772;;;42897:11;;-1:-1:-1;;;42897:11:0;;;;42892:283;;-1:-1:-1;;;;;42935:23:0;;42953:4;42935:23;;:53;;-1:-1:-1;;;;;;42962:26:0;;42983:4;42962:26;42935:53;:100;;;;43027:7;:5;:7::i;:::-;-1:-1:-1;;;;;43009:26:0;:6;-1:-1:-1;;;;;43009:26:0;;42935:100;:133;;;;43060:7;:5;:7::i;:::-;-1:-1:-1;;;;;43039:29:0;:9;-1:-1:-1;;;;;43039:29:0;;42935:133;42929:231;;43102:11;;-1:-1:-1;;;43102:11:0;;;;43094:46;;;;;-1:-1:-1;;;43094:46:0;;;;;;;;;;;;-1:-1:-1;;;43094:46:0;;;;;;;;;;;;;;;43195:15;;-1:-1:-1;;;43195:15:0;;;;43191:453;;;-1:-1:-1;;;;;43235:15:0;;;;;;:7;:15;;;;;;43258;43253:2;43235:20;;;:38;:124;;;;-1:-1:-1;;;;;;43298:61:0;;43316:42;43298:61;;43235:124;:181;;;;-1:-1:-1;43402:13:0;;-1:-1:-1;;;;;43384:32:0;;;43402:13;;43384:32;;43235:181;43231:398;;;-1:-1:-1;;;;;43459:15:0;;;;;;:7;:15;;;;;43477;43459:33;;43231:398;;;43550:15;;-1:-1:-1;;;43550:15:0;;;;43549:16;43541:68;;;;-1:-1:-1;;;43541:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43664:11;;-1:-1:-1;;;43664:11:0;;;;43660:540;;;-1:-1:-1;;;;;43722:23:0;;43740:4;43722:23;;;;:74;;-1:-1:-1;;;;;;43770:26:0;;43791:4;43770:26;;43722:74;:133;;;;-1:-1:-1;43839:15:0;;-1:-1:-1;;;;;43821:34:0;;;43839:15;;43821:34;;43722:133;:195;;;;-1:-1:-1;43901:15:0;;-1:-1:-1;;;;;43880:37:0;;;43901:15;;43880:37;;43722:195;43696:489;;;44018:15;;-1:-1:-1;;;;;44018:15:0;43994:12;:10;:12::i;:::-;-1:-1:-1;;;;;43994:40:0;;:98;;;-1:-1:-1;44079:13:0;;-1:-1:-1;;;;;44079:13:0;44063:12;:10;:12::i;:::-;-1:-1:-1;;;;;44063:29:0;;43994:98;43960:205;;;;;-1:-1:-1;;;43960:205:0;;;;;;;;;;;;-1:-1:-1;;;43960:205:0;;;;;;;;;;;;;;;44238:10;;44251:9;44238:22;44220:15;:40;44216:370;;;44295:13;;-1:-1:-1;;;;;44285:23:0;;;44295:13;;44285:23;;;;:105;;-1:-1:-1;;;;;;44329:61:0;;44347:42;44329:61;;44285:105;:164;;;;-1:-1:-1;44433:15:0;;-1:-1:-1;;;;;44415:34:0;;;44433:15;;44415:34;;44285:164;44281:290;;;-1:-1:-1;;;;;44474:17:0;;;;;;:9;:17;;;;;:24;;-1:-1:-1;;44474:24:0;44494:4;44474:24;;;;;;44521:17;:30;;;;;;;;;;;;;;-1:-1:-1;;;;;;44521:30:0;;;;;;44281:290;44866:28;44897:24;44915:4;44897:9;:24::i;:::-;44985:32;;45033:6;;44866:55;;-1:-1:-1;44961:56:0;;;;-1:-1:-1;;;45033:6:0;;;;45032:7;:22;;;;-1:-1:-1;45043:11:0;;-1:-1:-1;;;45043:11:0;;;;45032:22;:45;;;;;45058:19;45032:45;:72;;;;-1:-1:-1;45091:13:0;;-1:-1:-1;;;;;45081:23:0;;;45091:13;;45081:23;;45032:72;45028:410;;;45206:38;45223:20;45206:16;:38::i;:::-;45290:21;45329:22;;45326:101;;45372:39;45389:21;45372:16;:39::i;:::-;45028:410;;-1:-1:-1;;;;;45630:26:0;;45511:12;45630:26;;;:18;:26;;;;;;45526:4;;45630:26;;;:59;;-1:-1:-1;;;;;;45660:29:0;;;;;;:18;:29;;;;;;;;45630:59;45627:105;;;-1:-1:-1;45715:5:0;45627:105;45799:47;45814:6;45821:9;45831:6;45838:7;45799:14;:47::i;:::-;42363:3491;;;;;;:::o;5072:192::-;5158:7;5194:12;5186:6;;;;5178:29;;;;-1:-1:-1;;;5178:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5230:5:0;;;5072:192::o;52064:163::-;52105:7;52126:15;52143;52162:19;:17;:19::i;:::-;52125:56;;-1:-1:-1;52125:56:0;-1:-1:-1;52199:20:0;52125:56;;52199:11;:20::i;:::-;52192:27;;;;52064:163;:::o;6450:132::-;6508:7;6535:39;6539:1;6542;6535:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6528:46;6450:132;-1:-1:-1;;;6450:132:0:o;4187:181::-;4245:7;4277:5;;;4301:6;;;;4293:46;;;;;-1:-1:-1;;;4293:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;50873:467;50932:7;50941;50950;50959;50968;50977;50998:23;51023:12;51037:16;51057:39;51069:7;51078;;51087:8;;51057:11;:39::i;:::-;50997:99;;;;;;51107:19;51130:10;:8;:10::i;:::-;51107:33;;51152:15;51169:23;51194:12;51210:39;51222:7;51231:4;51237:11;51210;:39::i;:::-;51151:98;;-1:-1:-1;51151:98:0;-1:-1:-1;51151:98:0;-1:-1:-1;51300:15:0;;-1:-1:-1;51317:4:0;;-1:-1:-1;51323:8:0;;-1:-1:-1;;;;;50873:467:0;;;;;;;:::o;4642:136::-;4700:7;4727:43;4731:1;4734;4727:43;;;;;;;;;;;;;;;;;:3;:43::i;45862:600::-;27041:6;:13;;-1:-1:-1;;;;27041:13:0;-1:-1:-1;;;27041:13:0;;;46023:16:::1;::::0;;46037:1:::1;46023:16:::0;;;45999:21:::1;46023:16:::0;;::::1;::::0;;45999:21;46023:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;46023:16:0::1;45999:40;;46068:4;46050;46055:1;46050:7;;;;;;;;-1:-1:-1::0;;;;;46050:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;46094:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;46094:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;46050:7;;46094:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;46094:22:0;46084:7;;:4;;46089:1:::1;::::0;46084:7;::::1;;;;;-1:-1:-1::0;;;;;46084:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;46161:15:::1;::::0;46129:62:::1;::::0;46146:4:::1;::::0;46161:15:::1;46179:11:::0;46129:8:::1;:62::i;:::-;46230:15;::::0;:224:::1;::::0;-1:-1:-1;;;46230:224:0;;::::1;::::0;::::1;::::0;;;:15:::1;:224:::0;;;;;;46408:4:::1;46230:224:::0;;;;;;46428:15:::1;46230:224:::0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46230:15:0;;::::1;::::0;:66:::1;::::0;46311:11;;46381:4;;46408;46428:15;46230:224;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;:15;:224:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;27077:6:0;:14;;-1:-1:-1;;;;27077:14:0;;;-1:-1:-1;;;;45862:600:0:o;5514:471::-;5572:7;5817:6;5813:47;;-1:-1:-1;5847:1:0;5840:8;;5813:47;5884:5;;;5888:1;5884;:5;:1;5908:5;;;;;:10;5900:56;;;;-1:-1:-1;;;5900:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46470:108;46531:15;;-1:-1:-1;;;;;46531:15:0;:39;46556:13;:6;46567:1;46556:10;:13::i;:::-;46531:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47165:819;47277:7;47273:40;;47299:14;:12;:14::i;:::-;-1:-1:-1;;;;;47330:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;47354:22:0;;;;;;:11;:22;;;;;;;;47353:23;47330:46;47326:597;;;47393:48;47415:6;47423:9;47434:6;47393:21;:48::i;:::-;47326:597;;;-1:-1:-1;;;;;47464:19:0;;;;;;:11;:19;;;;;;;;47463:20;:46;;;;-1:-1:-1;;;;;;47487:22:0;;;;;;:11;:22;;;;;;;;47463:46;47459:464;;;47526:46;47546:6;47554:9;47565:6;47526:19;:46::i;47459:464::-;-1:-1:-1;;;;;47595:19:0;;;;;;:11;:19;;;;;;;;47594:20;:47;;;;-1:-1:-1;;;;;;47619:22:0;;;;;;:11;:22;;;;;;;;47618:23;47594:47;47590:333;;;47658:44;47676:6;47684:9;47695:6;47658:17;:44::i;47590:333::-;-1:-1:-1;;;;;47724:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;47747:22:0;;;;;;:11;:22;;;;;;;;47724:45;47720:203;;;47786:48;47808:6;47816:9;47827:6;47786:21;:48::i;47720:203::-;47867:44;47885:6;47893:9;47904:6;47867:17;:44::i;:::-;47939:7;47935:41;;47961:15;:13;:15::i;:::-;47165:819;;;;:::o;52235:555::-;52332:7;;52368;;52285;;;;;52386:289;52410:9;:16;52406:20;;52386:289;;;52476:7;52452;:21;52460:9;52470:1;52460:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52460:12:0;52452:21;;;;;;;;;;;;;:31;;:66;;;52511:7;52487;:21;52495:9;52505:1;52495:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52495:12:0;52487:21;;;;;;;;;;;;;:31;52452:66;52448:97;;;52528:7;;52537;;52520:25;;;;;;;;;52448:97;52570:34;52582:7;:21;52590:9;52600:1;52590:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52590:12:0;52582:21;;;;;;;;;;;;;52570:7;;:11;:34::i;:::-;52560:44;;52629:34;52641:7;:21;52649:9;52659:1;52649:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52649:12:0;52641:21;;;;;;;;;;;;;52629:7;;:11;:34::i;:::-;52619:44;-1:-1:-1;52428:3:0;;52386:289;;;-1:-1:-1;52711:7:0;;52699;;:20;;:11;:20::i;:::-;52689:7;:30;52685:61;;;52729:7;;52738;;52721:25;;;;;;;;52685:61;52765:7;;-1:-1:-1;52774:7:0;-1:-1:-1;52235:555:0;;;:::o;7067:278::-;7153:7;7188:12;7181:5;7173:28;;;;-1:-1:-1;;;7173:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7212:9;7228:1;7224;:5;;;;;;;7067:278;-1:-1:-1;;;;;7067:278:0:o;51348:366::-;51444:7;;;;51497:28;51521:3;51497:19;:7;51509:6;51497:11;:19::i;:28::-;51482:43;-1:-1:-1;51536:16:0;51555:32;51583:3;51555:23;:7;51567:10;51555:11;:23::i;:32::-;51536:51;-1:-1:-1;51598:23:0;51624:31;51536:51;51624:17;:7;51636:4;51624:11;:17::i;:::-;:21;;:31::i;:::-;51598:57;51691:4;;-1:-1:-1;51697:8:0;;-1:-1:-1;51348:366:0;;-1:-1:-1;;;;;51348:366:0:o;51722:334::-;51817:7;;;;51873:24;:7;51885:11;51873;:24::i;:::-;51855:42;-1:-1:-1;51908:12:0;51923:21;:4;51932:11;51923:8;:21::i;:::-;51908:36;-1:-1:-1;51955:23:0;51981:17;:7;51908:36;51981:11;:17::i;:::-;52017:7;;;;-1:-1:-1;52043:4:0;;-1:-1:-1;51722:334:0;;-1:-1:-1;;;;;51722:334:0:o;41372:214::-;41418:7;;:12;:29;;;;-1:-1:-1;41434:8:0;;:13;41418:29;41415:41;;;41449:7;;41415:41;41486:7;;;41468:15;:25;41523:8;;;41504:16;:27;-1:-1:-1;41544:11:0;;;;41566:12;41372:214;:::o;49073:557::-;49176:15;49193:23;49218:12;49232:23;49257:12;49271:16;49291:19;49302:7;49291:10;:19::i;:::-;-1:-1:-1;;;;;49339:15:0;;;;;;:7;:15;;;;;;49175:135;;-1:-1:-1;49175:135:0;;-1:-1:-1;49175:135:0;;-1:-1:-1;49175:135:0;-1:-1:-1;49175:135:0;-1:-1:-1;49175:135:0;-1:-1:-1;49339:28:0;;49359:7;49339:19;:28::i;:::-;-1:-1:-1;;;;;49321:15:0;;;;;;:7;:15;;;;;;;;:46;;;;49396:7;:15;;;;:28;;49416:7;49396:19;:28::i;:::-;-1:-1:-1;;;;;49378:15:0;;;;;;;:7;:15;;;;;;:46;;;;49456:18;;;;;;;:39;;49479:15;49456:22;:39::i;:::-;-1:-1:-1;;;;;49435:18:0;;;;;;:7;:18;;;;;:60;49506:22;49519:8;49506:12;:22::i;:::-;49539:23;49551:4;49557;49539:11;:23::i;:::-;49595:9;-1:-1:-1;;;;;49578:44:0;49587:6;-1:-1:-1;;;;;49578:44:0;;49606:15;49578:44;;;;;;;;;;;;;;;;;;49073:557;;;;;;;;;:::o;48496:569::-;48597:15;48614:23;48639:12;48653:23;48678:12;48692:16;48712:19;48723:7;48712:10;:19::i;:::-;-1:-1:-1;;;;;48760:15:0;;;;;;:7;:15;;;;;;48596:135;;-1:-1:-1;48596:135:0;;-1:-1:-1;48596:135:0;;-1:-1:-1;48596:135:0;-1:-1:-1;48596:135:0;-1:-1:-1;48596:135:0;-1:-1:-1;48760:28:0;;48596:135;48760:19;:28::i;:::-;-1:-1:-1;;;;;48742:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;48820:18;;;;;:7;:18;;;;;:39;;48843:15;48820:22;:39::i;:::-;-1:-1:-1;;;;;48799:18:0;;;;;;:7;:18;;;;;;;;:60;;;;48891:7;:18;;;;:39;;48914:15;48891:22;:39::i;47992:496::-;48091:15;48108:23;48133:12;48147:23;48172:12;48186:16;48206:19;48217:7;48206:10;:19::i;:::-;-1:-1:-1;;;;;48254:15:0;;;;;;:7;:15;;;;;;48090:135;;-1:-1:-1;48090:135:0;;-1:-1:-1;48090:135:0;;-1:-1:-1;48090:135:0;-1:-1:-1;48090:135:0;-1:-1:-1;48090:135:0;-1:-1:-1;48254:28:0;;48090:135;48254:19;:28::i;49638:628::-;49741:15;49758:23;49783:12;49797:23;49822:12;49836:16;49856:19;49867:7;49856:10;:19::i;:::-;-1:-1:-1;;;;;49904:15:0;;;;;;:7;:15;;;;;;49740:135;;-1:-1:-1;49740:135:0;;-1:-1:-1;49740:135:0;;-1:-1:-1;49740:135:0;-1:-1:-1;49740:135:0;-1:-1:-1;49740:135:0;-1:-1:-1;49904:28:0;;49924:7;49904:19;:28::i;:::-;-1:-1:-1;;;;;49886:15:0;;;;;;:7;:15;;;;;;;;:46;;;;49961:7;:15;;;;:28;;49981:7;49961:19;:28::i;41594:115::-;41648:15;;41638:7;:25;41685:16;;41674:8;:27;41594:115::o;50274:343::-;50333:19;50356:10;:8;:10::i;:::-;50333:33;-1:-1:-1;50377:16:0;50396:25;:8;50333:33;50396:12;:25::i;:::-;50473:4;50457:22;;;;:7;:22;;;;;;50377:44;;-1:-1:-1;50457:36:0;;50377:44;50457:26;:36::i;:::-;50448:4;50432:22;;;;:7;:22;;;;;;;;:61;;;;50507:11;:26;;;;;;50504:105;;;50589:4;50573:22;;;;:7;:22;;;;;;:36;;50600:8;50573:26;:36::i;:::-;50564:4;50548:22;;;;:7;:22;;;;;:61;50504:105;50274:343;;;:::o;50625:147::-;50703:7;;:17;;50715:4;50703:11;:17::i;:::-;50693:7;:27;50744:10;;:20;;50759:4;50744:14;:20::i;:::-;50731:10;:33;-1:-1:-1;;50625:147:0:o

Swarm Source

ipfs://9d54840e5f24c21edf27f40ebda6e9199b4016a219656ba145803f232859bbf0
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.