ETH Price: $2,506.91 (+0.34%)

Token

KaikenInu (Kaiken)
 

Overview

Max Total Supply

998,999,999,999,999 Kaiken

Holders

441

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
295,614,863,852.36674599 Kaiken

Value
$0.00
0xd66972979B13905888F18d0F17140686Cb8e6C04
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Kaiken Inu is a community driven, DEFI token. Its value depends on the community’s support.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
KaikenInuToken

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-08-10
*/

pragma solidity ^0.6.12;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @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;
    }
}

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

library Address {

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

// pragma solidity >=0.5.0;

interface IPancakeV2Factory {
    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;
}


// pragma solidity >=0.5.0;

interface IPancakeV2Pair {
    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;
}

// pragma solidity >=0.6.2;

interface IPancakeV2Router01 {
    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);
}



// pragma solidity >=0.6.2;

interface IPancakeV2Router02 is IPancakeV2Router01 {
    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 KaikenInuToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;

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


    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1000000000 * 10**6 * 10**9;

    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string constant private _name = "KaikenInu";
    string constant private _symbol = "Kaiken";
    uint8 constant private _decimals = 9;

    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 1;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _marketingFee = 1;
    uint256 private _previousMarketingFee = _marketingFee;

    uint256 public _extraFee = 1;
    uint256 private _previousExtraFee = _extraFee;

    uint256 public _burnFee = 1;
    uint256 private _previousBurnFee = _burnFee;

    uint256 public _buybackFee = 2;
    uint256 private _previousBuybackFee = _buybackFee;



    IPancakeV2Router02 public pancakeV2Router;
    address public pancakeV2Pair;
    address payable public _marketingWalletAddress;
    address payable public _buybackWalletAddress;
    address payable public _burnWalletAddress;
    address payable public  _RewardsWalletAddress;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 1000000000 * 10**6 * 10**9;
    uint256 private numTokensSellToAddToLiquidity = 50 * 10**6 * 10**9;  // 50 000 000 (+ 9 decimals)

    event Burn(address indexed sender, uint amount);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

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

    constructor () public {
        _marketingWalletAddress = 0x092406Df82C3631bC0F0D77937379c3CbaABcA8F;
        _burnWalletAddress = 0x000000000000000000000000000000000000dEaD;
        _buybackWalletAddress = 0x47eFeBe97a5Ef51b6521334fF1B2398616c955B1;
         _RewardsWalletAddress = 0x8E7E335C32471Cfdf5FcE53E0b189Afb44b7445a;

        _rOwned[msg.sender] = _rTotal; // owner 
        
        // _rOwned[0xfED3051B554A9FCf8eDFbAd7a597f54c7d61814c] = _rTotal.div(100); // Team - Anubis - 1%
        // _rOwned[0xBeC16697926f43a9c6de7817a8BCce335F366BcD] = _rTotal.div(1000).mul(5); // Team Member - 0,5%
        // _rOwned[0xaBd5fe6a52F8a33c58a19254D6A1fcF4709C2526] = _rTotal.div(1000).mul(5); // Team Member - 0,5%
        // _rOwned[0x3184bF7c88b72C470EC61EB8aeC7bD4278649986] = _rTotal.div(1000).mul(5); // Team Member - 0,5%
        // _rOwned[0x1DfEDFEdfC4C428A0F9850ea89430CD906C4E69e] = _rTotal.div(1000).mul(5); // Team Member - 0,5%

        IPancakeV2Router02 _pancakeV2Router = IPancakeV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a pancakeswap pair for this new token
        pancakeV2Pair = IPancakeV2Factory(_pancakeV2Router.factory())
            .createPair(address(this), _pancakeV2Router.WETH());
        // set the rest of the contract variables
        pancakeV2Router = _pancakeV2Router;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        //  emit Transfer(address(0), 0xfED3051B554A9FCf8eDFbAd7a597f54c7d61814c, _rTotal.div(100)); 
        //   emit Transfer(address(0), 0xBeC16697926f43a9c6de7817a8BCce335F366BcD, _rTotal.div(1000).mul(5)); 
        //   emit Transfer(address(0), 0xaBd5fe6a52F8a33c58a19254D6A1fcF4709C2526, _rTotal.div(1000).mul(5)); 
        //     emit Transfer(address(0), 0x3184bF7c88b72C470EC61EB8aeC7bD4278649986, _rTotal.div(1000).mul(5)); 
        //      emit Transfer(address(0), 0x1DfEDFEdfC4C428A0F9850ea89430CD906C4E69e, _rTotal.div(1000).mul(5)); 
        emit Transfer(address(0), msg.sender, _rTotal); 
    }

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

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

    function decimals() public view override returns (uint256) {
        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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

    function deliver(uint256 tAmount, uint256 tax_fee) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256[3] memory rValues,) =  _getValues(tAmount, tax_fee);
        uint256 rAmount = rValues[0];

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee,uint256 tax_fee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256[3] memory rValues,) =  _getValues(tAmount,tax_fee);
            uint256 rAmount = rValues[0];

            return rAmount;
        } else {
            (uint256[3] memory rValues,) =  _getValues(tAmount, tax_fee);
            uint256 rTransferAmount = rValues[1];

            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 excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Pancake router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount,uint256 tax_fee) private {
        (uint256[3] memory rValues, uint256[7] memory tValues) =  _getValues(tAmount, tax_fee);
        uint256 rAmount = rValues[0];
        uint256 rTransferAmount = rValues[1];
        uint256 rFee = rValues[2];
        uint256 tTransferAmount = tValues[0];
        uint256 tFee = tValues[1];
        uint256 tLiquidity = tValues[2];
        uint256 tMarketing = tValues[3];
        uint256 tBurn = tValues[4];
        uint256 tBuyback = tValues[5];


        decreaseROwned(sender, rAmount);
        decreaseTOwned(sender, tAmount);
        increaseTOwned(recipient, tTransferAmount);
        increaseROwned(recipient, rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _takeBurn(tBurn);
        _takeBuyback(tBuyback);
        _takeExtra(tValues[6]);

        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        //require(taxFee <= 3, "Max fee 3%");
        _taxFee = taxFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        //require(liquidityFee <= 3, "Max fee 3%");
        _liquidityFee = liquidityFee;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = maxTxPercent;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

    function _reflectFee(uint256 rFee, uint256 tFee) private {

            // Reflect fee between holders as usual
            _rTotal = _rTotal.sub(rFee);
            _tFeeTotal = _tFeeTotal.add(tFee);
        
    }

    function _getValues(uint256 tAmount, uint256 tax_fee) private view returns (uint256[3] memory, uint256[7] memory) {
        uint256[7] memory tValues = _getTValues(tAmount, tax_fee);
        uint256[3] memory rValues = _getRValues(tAmount, tValues[1], tValues[2], tValues[3], tValues[4], tValues[5], tValues[6], _getRate());

        return (rValues, tValues);
    }

    function _getTValues(uint256 tAmount, uint256 tax_fee) private view returns (uint256[7] memory) {
        uint256[7] memory tValues = [0, calculateTaxFee(tAmount, tax_fee), calculateLiquidityFee(tAmount), calculateMarketingFee(tAmount), calculateBurnFee(tAmount), calculateBuybackFee(tAmount), calculateExtraFee(tAmount)];
        tValues[0] = _getTTransferAmount(tAmount, tValues);

        return tValues;
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn, uint256 tBuyback, uint256 tExtra, uint256 currentRate) private pure returns (uint256[3] memory) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rTresor = tBuyback.mul(currentRate);
        uint256 rStaking = tExtra.mul(currentRate);

        uint256[7] memory tempRValues = [rAmount, rLiquidity, rFee, rMarketing, rBurn, rTresor, rStaking];

        // uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rMarketing).sub(rBurn).sub(rTresor);
        // uint256 rTransferAmount = _getRTransferAmount(rAmount, rLiquidity, rFee, rMarketing, rBurn, rTresor);
        uint256[3] memory rValues = [rAmount, _getRTransferAmount(tempRValues), rFee];

        // return (rAmount, rTransferAmount, rFee);
        return rValues;
    }

    function _getTTransferAmount(uint256 tAmount, uint256[7] memory tValues) private pure returns(uint256) {
        // return tAmount.sub(tFee).sub(tLiquidity).sub(tMarketing).sub(tBurn).sub(tBuyback);
        return tAmount.sub(tValues[1]).sub(tValues[2]).sub(tValues[3]).sub(tValues[4]).sub(tValues[5]).sub(tValues[6]);
    }

    function _getRTransferAmount(uint256[7] memory rValues) private pure returns(uint256) {
        return rValues[0].sub(rValues[2]).sub(rValues[1]).sub(rValues[3]).sub(rValues[4]).sub(rValues[5]).sub(rValues[6]);
    }

    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 update_pair_address(address temp_pair) public onlyOwner {
        pancakeV2Pair = temp_pair;
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate =  _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[_marketingWalletAddress] = _rOwned[_marketingWalletAddress].add(rMarketing);
        if(_isExcluded[_marketingWalletAddress])
            _tOwned[_marketingWalletAddress] = _tOwned[_marketingWalletAddress].add(tMarketing);
    }

    function _takeBurn(uint256 tBurn) private {
        uint256 currentRate =  _getRate();
        uint256 rBurn = tBurn.mul(currentRate);
        _rOwned[_burnWalletAddress] = _rOwned[_burnWalletAddress].add(rBurn);
        if(_isExcluded[_burnWalletAddress]) {
            _tOwned[_burnWalletAddress] = _tOwned[_burnWalletAddress].add(tBurn);
        }
    }

    function _takeBuyback(uint256 tBuyback) private {
        uint256 currentRate =  _getRate();
        uint256 rTresor = tBuyback.mul(currentRate);
        _rOwned[_buybackWalletAddress] = _rOwned[_buybackWalletAddress].add(rTresor);
        if(_isExcluded[_buybackWalletAddress])
            _tOwned[_buybackWalletAddress] = _tOwned[_buybackWalletAddress].add(tBuyback);
    }

    function _takeExtra(uint256 tExtra) private {
        uint256 currentRate =  _getRate();
        uint256 rStaking = tExtra.mul(currentRate);
        _rOwned[ _RewardsWalletAddress] = _rOwned[ _RewardsWalletAddress].add(rStaking);
        if(_isExcluded[ _RewardsWalletAddress])
            _tOwned[ _RewardsWalletAddress] = _tOwned[ _RewardsWalletAddress].add(tExtra);
    }

    function calculateTaxFee(uint256 _amount, uint256 tax_fee) pure private returns (uint256) {
        return _amount.mul(tax_fee).div(
            10**2
        );
    }

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

    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_marketingFee).div(
            10**2
        );
    }

    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(
            10**2
        );
    }

    function calculateBuybackFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_buybackFee).div(
            10**2
        );
    }

    function calculateExtraFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_extraFee).div(
            10**2
        );
    }



    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0 && _burnFee == 0 && _buybackFee == 0 && _extraFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousMarketingFee = _marketingFee;
        _previousBuybackFee = _buybackFee;
        _previousBurnFee = _burnFee;
        _previousExtraFee = _extraFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
        _buybackFee = 0;
        _burnFee = 0;
        _extraFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _marketingFee = _previousMarketingFee;
        _buybackFee = _previousBuybackFee;
        _burnFee = _previousBurnFee;
        _extraFee = _previousExtraFee;
    }

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

    function _setMarketingWallet(address payable marketingWalletAddress) external onlyOwner() {
        _marketingWalletAddress = marketingWalletAddress;
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }
        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is pancakeswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != pancakeV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

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

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        uint256 temp_tax_fee = _taxFee;
        
        //if selling
        if(takeFee && to == pancakeV2Pair){
           if(amount <= getTokenPrice(1) ){

                temp_tax_fee = _taxFee;
            
            }else if(amount > getTokenPrice(1) && amount <= getTokenPrice(3)){
                temp_tax_fee = 3;
                 
            }else if(amount > getTokenPrice(3) && amount <= getTokenPrice(5)){
                temp_tax_fee = 4;
                 
            }else if(amount > getTokenPrice(5) && amount <= getTokenPrice(7)){
                temp_tax_fee = 5;
                 
            }else if(amount > getTokenPrice(7) && amount <= getTokenPrice(9)){
                temp_tax_fee = 6;
                 
            }else if(amount > getTokenPrice(9)){
                temp_tax_fee = 7;
                 
            }else{
                temp_tax_fee = _taxFee;
            }
        }
        
            //transfer amount, it will take tax, burn, liquidity fee
            _tokenTransfer(from,to,amount,takeFee,temp_tax_fee);
        

    }
   // calculate price based on pair reserves
   function getTokenPrice(uint256 eth_amount) public view returns(uint256)
   {
    IPancakeV2Pair pair = IPancakeV2Pair(pancakeV2Pair);
    IERC20 token1 = IERC20(pair.token1());
    (uint256 Res0, uint256 Res1,) = pair.getReserves();

    // decimals
    uint256 res0 = Res0*(10**token1.decimals());
    return((eth_amount.mul(res0)).div(Res1)); // returns how much kaiken you will get on that eth amount
   }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to pancakeswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(pancakeV2Router), tokenAmount);

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee, uint256 tax_fee) private {
        if(!takeFee || !swapAndLiquifyEnabled){
            removeAllFee();
            tax_fee = 0;
        }
            

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

        if(!takeFee || !swapAndLiquifyEnabled){
            restoreAllFee();
        }
            
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount, uint256 tax_fee) private {
        (uint256[3] memory rValues, uint256[7] memory tValues) =  _getValues(tAmount, tax_fee);
        uint256 rAmount = rValues[0];
        uint256 rTransferAmount = rValues[1];
        uint256 rFee = rValues[2];
        uint256 tTransferAmount = tValues[0];
        uint256 tFee = tValues[1];
        uint256 tLiquidity = tValues[2];
        uint256 tMarketing = tValues[3];
        uint256 tBurn = tValues[4];
        uint256 tBuyback = tValues[5];


        decreaseROwned(sender, rAmount);
        increaseROwned(recipient, rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _takeBurn(tBurn);
        _takeBuyback(tBuyback);
        _takeExtra(tValues[6]);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount, uint256 tax_fee) private {
        (uint256[3] memory rValues, uint256[7] memory tValues) =  _getValues(tAmount, tax_fee);
        uint256 rAmount = rValues[0];
        uint256 rTransferAmount = rValues[1];
        uint256 rFee = rValues[2];
        uint256 tTransferAmount = tValues[0];
        uint256 tFee = tValues[1];
        uint256 tLiquidity = tValues[2];
        uint256 tMarketing = tValues[3];
        uint256 tBurn = tValues[4];
        uint256 tBuyback = tValues[5];

        // (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn, uint256 tBuyback) = _getValues(tAmount);
        // _rOwned[sender] = _rOwned[sender].sub(rAmount);
        decreaseROwned(sender, rAmount);
        increaseTOwned(recipient, tTransferAmount);
        increaseROwned(recipient, rTransferAmount);

        // _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        // _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _takeBurn(tBurn);
        _takeBuyback(tBuyback);
        _takeExtra(tValues[6]);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount, uint256 tax_fee) private {
        (uint256[3] memory rValues, uint256[7] memory tValues) =  _getValues(tAmount, tax_fee);
        uint256 rAmount = rValues[0];
        uint256 rTransferAmount = rValues[1];
        uint256 rFee = rValues[2];
        uint256 tTransferAmount = tValues[0];
        uint256 tFee = tValues[1];
        uint256 tLiquidity = tValues[2];
        uint256 tMarketing = tValues[3];
        uint256 tBurn = tValues[4];
        uint256 tBuyback = tValues[5];
 

        decreaseTOwned(sender, tAmount);
        decreaseROwned(sender, rAmount);
        increaseROwned(recipient, rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _takeBurn(tBurn);
        _takeBuyback(tBuyback);
        _takeExtra(tValues[6]);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function decreaseTOwned(address sender, uint256 tAmount) private {
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
    }

    function decreaseROwned(address sender, uint256 rAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
    }

    function increaseROwned(address recipient, uint256 rTransferAmount) private {
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
    }

    function increaseTOwned(address recipient, uint256 tTransferAmount) private {
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
    }

    function getMarketingWalletAddress() public view returns (address) {
        return _marketingWalletAddress;
    }

    function setMarketingWalletAddress(address payable newAdress)  external onlyOwner() {
        _marketingWalletAddress = newAdress;
    }

    function getExtraWalletAddress() public view returns (address) {
        return  _RewardsWalletAddress;
    }

    function _setExtraWallet(address payable stakingWalletAddress) external onlyOwner() {
         _RewardsWalletAddress = stakingWalletAddress;
    }

    function getBuybackWalletAddress() public view returns (address) {
        return _buybackWalletAddress;
    }

    function setBuybackWalletAddress(address payable newAdress)  external onlyOwner() {
        _buybackWalletAddress = newAdress;
    }

    function getBurnWalletAddress() public view returns (address) {
        return _burnWalletAddress;
    }

    function setBurnWalletAddress(address payable newAdress)  external onlyOwner() {
        _burnWalletAddress = newAdress;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _numTokensSellToAddToLiquidity) external onlyOwner() {
        numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity;
    }

    function getNumTokensSellToAddToLiquidity() public view returns (uint256) {
        return numTokensSellToAddToLiquidity;
    }

    function setMarketingFeePercent(uint256 marketingFee) external onlyOwner() {
       // require(marketingFee <= 3, "Max fee 3%");
        _marketingFee = marketingFee;
    }

    function setExtraFeePercent(uint256 stakingFee) external onlyOwner() {
       // require(stakingFee <= 3, "Max fee 3%");
        _extraFee = stakingFee;
    }

    function setBurnFeePercent(uint256 burnFee) external onlyOwner() {
        //require(burnFee <= 3, "Max fee 3%");
        _burnFee = burnFee;
    }

    function setBuybackFeePercent(uint256 tresorFee) external onlyOwner() {
       // require(tresorFee <= 3, "Max fee 3%");
        _buybackFee = tresorFee;
    }

    function setRouterAddress(address newRouter) public onlyOwner() {
        IPancakeV2Router02 _newPancakeRouter = IPancakeV2Router02(newRouter);
        // create the pair if it doesn't exist yet
        if (IPancakeV2Factory(_newPancakeRouter.factory()).getPair(address(this), _newPancakeRouter.WETH()) == address(0)) {
            pancakeV2Pair = IPancakeV2Factory(_newPancakeRouter.factory()).createPair(address(this), _newPancakeRouter.WETH());
        } else {
            pancakeV2Pair = IPancakeV2Factory(_newPancakeRouter.factory()).getPair(address(this), _newPancakeRouter.WETH());
        }
        pancakeV2Router = _newPancakeRouter;
    }



    function burn(uint256 _amount) public returns (bool) {
        uint256 senderBalance = balanceOf(_msgSender());
        require(_amount <= senderBalance, "Not enough tokens");
        uint256 currentRate =  _getRate();
        uint256 _rAmount = _amount.mul(currentRate);

        _tokenTransfer(_msgSender(),address(0),_amount,false,0);

        _tTotal = _tTotal.sub(_amount);
        _rTotal = _rTotal.sub(_rAmount);


        emit Burn(_msgSender(), _amount);
        // emit Transfer(_msgSender(), address(0),_amount);

        return true;
    }




}

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":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_RewardsWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buybackWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_extraFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"stakingWalletAddress","type":"address"}],"name":"_setExtraWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWalletAddress","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"internalType":"uint256","name":"tax_fee","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBurnWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuybackWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExtraWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eth_amount","type":"uint256"}],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeV2Router","outputs":[{"internalType":"contract IPancakeV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"},{"internalType":"uint256","name":"tax_fee","type":"uint256"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAdress","type":"address"}],"name":"setBurnWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tresorFee","type":"uint256"}],"name":"setBuybackFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAdress","type":"address"}],"name":"setBuybackWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakingFee","type":"uint256"}],"name":"setExtraFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAdress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"temp_pair","type":"address"}],"name":"update_pair_address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269d3c21bcecceda1000000600981905569085afffa6ff50bffffff19600a556002600c819055600d8190556001600e819055600f819055601081905560118190556012819055601381905560148190556015556016819055601755601d805460ff60a81b1916600160a81b179055601e5566b1a2bc2ec50000601f553480156200008d57600080fd5b5060006200009a6200039e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601a80546001600160a01b031990811673092406df82c3631bc0f0d77937379c3cbaabca8f17909155601c8054821661dead179055601b805482167347efebe97a5ef51b6521334ff1b2398616c955b1179055601d8054909116738e7e335c32471cfdf5fce53e0b189afb44b7445a179055600a543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001b857600080fd5b505afa158015620001cd573d6000803e3d6000fd5b505050506040513d6020811015620001e457600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200023557600080fd5b505afa1580156200024a573d6000803e3d6000fd5b505050506040513d60208110156200026157600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620002b457600080fd5b505af1158015620002c9573d6000803e3d6000fd5b505050506040513d6020811015620002e057600080fd5b5051601980546001600160a01b03199081166001600160a01b03938416179091556018805490911691831691909117905560016006600062000321620003a2565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600683528181208054909416600117909355600a54815190815290513393927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928290030190a350620003b1565b3390565b6000546001600160a01b031690565b613f4b80620003c16000396000f3fe6080604052600436106103a65760003560e01c806364a012a0116101e7578063a0b69aae1161010d578063cea26958116100a0578063ea2f0b371161006f578063ea2f0b3714610c61578063f0f165af14610c94578063f2fde38b14610cbe578063fda55a3d14610cf1576103ad565b8063cea2695814610b9f578063d543dbeb14610bc9578063dd62ed3e14610bf3578063ddb61bc214610c2e576103ad565b8063b2c89770116100dc578063b2c8977014610b0a578063c0b0fda214610b34578063c457fb3714610b49578063c49b9a8014610b73576103ad565b8063a0b69aae14610a50578063a457c2d714610a65578063a9059cbb14610a9e578063b0ea115814610ad7576103ad565b80637ec24e561161018557806394e7fa361161015457806394e7fa36146109fc57806395d89b4114610a11578063996c671b14610a265780639b2f821b14610a3b576103ad565b80637ec24e561461095257806388f820201461098a5780638da5cb5b146109bd5780638ee88c53146109d2576103ad565b8063715018a6116101c1578063715018a6146108e35780637b8ac66b146108f85780637d1db4a5146109285780637d7163dd1461093d576103ad565b806364a012a0146108685780636bc87c3a1461089b57806370a08231146108b0576103ad565b80633685d419116102cc578063457c194c1161026a5780635342acb4116102395780635342acb4146107f6578063577171e1146108295780635db423f11461083e578063632a6a3514610853576103ad565b8063457c194c146107845780634a74bb02146107ae5780634cb80fd51461054c57806352390c02146107c3576103ad565b80634144d9e4116102a65780634144d9e4146106df57806341cb87fc146106f457806342966c6814610727578063437823ec14610751576103ad565b80633685d4191461065e57806339509351146106915780633b124fe7146106ca576103ad565b80631a9b30531161034457806325e7df521161031357806325e7df52146105d757806329d95d5d1461060a5780632d8381191461061f578063313ce56714610649576103ad565b80631a9b3053146105375780631ff53b601461054c57806322976e0d1461057f57806323b872dd14610594576103ad565b806313114a9d1161038057806313114a9d146104b557806318160ddd146104dc57806319de79ab146104f15780631a4cd1b114610506576103ad565b8063061c82d0146103b257806306fdde03146103de578063095ea7b314610468576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103dc600480360360208110156103d557600080fd5b5035610d1b565b005b3480156103ea57600080fd5b506103f3610d78565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561042d578181015183820152602001610415565b50505050905090810190601f16801561045a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561047457600080fd5b506104a16004803603604081101561048b57600080fd5b506001600160a01b038135169060200135610d9b565b604080519115158252519081900360200190f35b3480156104c157600080fd5b506104ca610db9565b60408051918252519081900360200190f35b3480156104e857600080fd5b506104ca610dbf565b3480156104fd57600080fd5b506104ca610dc5565b34801561051257600080fd5b5061051b610dcb565b604080516001600160a01b039092168252519081900360200190f35b34801561054357600080fd5b5061051b610dda565b34801561055857600080fd5b506103dc6004803603602081101561056f57600080fd5b50356001600160a01b0316610de9565b34801561058b57600080fd5b506104ca610e63565b3480156105a057600080fd5b506104a1600480360360608110156105b757600080fd5b506001600160a01b03813581169160208101359091169060400135610e69565b3480156105e357600080fd5b506103dc600480360360208110156105fa57600080fd5b50356001600160a01b0316610ef1565b34801561061657600080fd5b5061051b610f6b565b34801561062b57600080fd5b506104ca6004803603602081101561064257600080fd5b5035610f7a565b34801561065557600080fd5b506104ca610fdc565b34801561066a57600080fd5b506103dc6004803603602081101561068157600080fd5b50356001600160a01b0316610fe1565b34801561069d57600080fd5b506104a1600480360360408110156106b457600080fd5b506001600160a01b0381351690602001356111a2565b3480156106d657600080fd5b506104ca6111f0565b3480156106eb57600080fd5b5061051b6111f6565b34801561070057600080fd5b506103dc6004803603602081101561071757600080fd5b50356001600160a01b0316611205565b34801561073357600080fd5b506104a16004803603602081101561074a57600080fd5b50356116f0565b34801561075d57600080fd5b506103dc6004803603602081101561077457600080fd5b50356001600160a01b03166117f1565b34801561079057600080fd5b506103dc600480360360208110156107a757600080fd5b503561186d565b3480156107ba57600080fd5b506104a16118ca565b3480156107cf57600080fd5b506103dc600480360360208110156107e657600080fd5b50356001600160a01b03166118da565b34801561080257600080fd5b506104a16004803603602081101561081957600080fd5b50356001600160a01b0316611a60565b34801561083557600080fd5b5061051b611a7e565b34801561084a57600080fd5b5061051b611a8d565b34801561085f57600080fd5b5061051b611a9c565b34801561087457600080fd5b506103dc6004803603602081101561088b57600080fd5b50356001600160a01b0316611aab565b3480156108a757600080fd5b506104ca611b25565b3480156108bc57600080fd5b506104ca600480360360208110156108d357600080fd5b50356001600160a01b0316611b2b565b3480156108ef57600080fd5b506103dc611b8d565b34801561090457600080fd5b506103dc6004803603604081101561091b57600080fd5b5080359060200135611c2f565b34801561093457600080fd5b506104ca611d10565b34801561094957600080fd5b506104ca611d16565b34801561095e57600080fd5b506104ca6004803603606081101561097557600080fd5b50803590602081013515159060400135611d1c565b34801561099657600080fd5b506104a1600480360360208110156109ad57600080fd5b50356001600160a01b0316611dc2565b3480156109c957600080fd5b5061051b611de0565b3480156109de57600080fd5b506103dc600480360360208110156109f557600080fd5b5035611def565b348015610a0857600080fd5b5061051b611e4c565b348015610a1d57600080fd5b506103f3611e5b565b348015610a3257600080fd5b5061051b611e7b565b348015610a4757600080fd5b506104ca611e8a565b348015610a5c57600080fd5b5061051b611e90565b348015610a7157600080fd5b506104a160048036036040811015610a8857600080fd5b506001600160a01b038135169060200135611e9f565b348015610aaa57600080fd5b506104a160048036036040811015610ac157600080fd5b506001600160a01b038135169060200135611f07565b348015610ae357600080fd5b506103dc60048036036020811015610afa57600080fd5b50356001600160a01b0316611f1b565b348015610b1657600080fd5b506103dc60048036036020811015610b2d57600080fd5b5035611f95565b348015610b4057600080fd5b506104ca611ff2565b348015610b5557600080fd5b506104ca60048036036020811015610b6c57600080fd5b5035611ff8565b348015610b7f57600080fd5b506103dc60048036036020811015610b9657600080fd5b50351515612195565b348015610bab57600080fd5b506103dc60048036036020811015610bc257600080fd5b5035612240565b348015610bd557600080fd5b506103dc60048036036020811015610bec57600080fd5b503561229d565b348015610bff57600080fd5b506104ca60048036036040811015610c1657600080fd5b506001600160a01b03813581169160200135166122fa565b348015610c3a57600080fd5b506103dc60048036036020811015610c5157600080fd5b50356001600160a01b0316612325565b348015610c6d57600080fd5b506103dc60048036036020811015610c8457600080fd5b50356001600160a01b031661239f565b348015610ca057600080fd5b506103dc60048036036020811015610cb757600080fd5b5035612418565b348015610cca57600080fd5b506103dc60048036036020811015610ce157600080fd5b50356001600160a01b0316612475565b348015610cfd57600080fd5b506103dc60048036036020811015610d1457600080fd5b503561256d565b610d236125ca565b6000546001600160a01b03908116911614610d73576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b600c55565b6040805180820190915260098152684b61696b656e496e7560b81b602082015290565b6000610daf610da86125ca565b84846125ce565b5060015b92915050565b600b5490565b60095490565b60165481565b6018546001600160a01b031681565b601c546001600160a01b031681565b610df16125ca565b6000546001600160a01b03908116911614610e41576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b60105481565b6000610e768484846126ba565b610ee684610e826125ca565b610ee185604051806060016040528060288152602001613e0b602891396001600160a01b038a16600090815260056020526040812090610ec06125ca565b6001600160a01b0316815260208101919091526040016000205491906129f8565b6125ce565b5060015b9392505050565b610ef96125ca565b6000546001600160a01b03908116911614610f49576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b601b546001600160a01b031681565b6000600a54821115610fbd5760405162461bcd60e51b815260040180806020018281038252602a815260200180613d50602a913960400191505060405180910390fd5b6000610fc7612a8f565b9050610fd38382612ab2565b9150505b919050565b600990565b610fe96125ca565b6000546001600160a01b03908116911614611039576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff166110a6576040805162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015290519081900360640190fd5b60005b60085481101561119e57816001600160a01b0316600882815481106110ca57fe5b6000918252602090912001546001600160a01b03161415611196576008805460001981019081106110f757fe5b600091825260209091200154600880546001600160a01b03909216918390811061111d57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600880548061116f57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561119e565b6001016110a9565b5050565b6000610daf6111af6125ca565b84610ee185600560006111c06125ca565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612af4565b600c5481565b601a546001600160a01b031681565b61120d6125ca565b6000546001600160a01b0390811691161461125d576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b600081905060006001600160a01b0316816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112a657600080fd5b505afa1580156112ba573d6000803e3d6000fd5b505050506040513d60208110156112d057600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263e6a439059230929187169163ad5c464891600480820192602092909190829003018186803b15801561132057600080fd5b505afa158015611334573d6000803e3d6000fd5b505050506040513d602081101561134a57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b15801561139a57600080fd5b505afa1580156113ae573d6000803e3d6000fd5b505050506040513d60208110156113c457600080fd5b50516001600160a01b0316141561155457806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561140e57600080fd5b505afa158015611422573d6000803e3d6000fd5b505050506040513d602081101561143857600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b15801561148857600080fd5b505afa15801561149c573d6000803e3d6000fd5b505050506040513d60208110156114b257600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b15801561150457600080fd5b505af1158015611518573d6000803e3d6000fd5b505050506040513d602081101561152e57600080fd5b5051601980546001600160a01b0319166001600160a01b039092169190911790556116cd565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561158d57600080fd5b505afa1580156115a1573d6000803e3d6000fd5b505050506040513d60208110156115b757600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263e6a439059230929186169163ad5c464891600480820192602092909190829003018186803b15801561160757600080fd5b505afa15801561161b573d6000803e3d6000fd5b505050506040513d602081101561163157600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b15801561168157600080fd5b505afa158015611695573d6000803e3d6000fd5b505050506040513d60208110156116ab57600080fd5b5051601980546001600160a01b0319166001600160a01b039092169190911790555b601880546001600160a01b0319166001600160a01b039290921691909117905550565b6000806117036116fe6125ca565b611b2b565b90508083111561174e576040805162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b604482015290519081900360640190fd5b6000611758612a8f565b905060006117668583612b4e565b905061177e6117736125ca565b600087600080612ba7565b60095461178b9086612d53565b600955600a5461179b9082612d53565b600a556117a66125ca565b6001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5866040518082815260200191505060405180910390a2506001949350505050565b6117f96125ca565b6000546001600160a01b03908116911614611849576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6118756125ca565b6000546001600160a01b039081169116146118c5576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601055565b601d54600160a81b900460ff1681565b6118e26125ca565b6000546001600160a01b03908116911614611932576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16156119a0576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260036020526040902054156119fa576001600160a01b0381166000908152600360205260409020546119e090610f7a565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b601b546001600160a01b031690565b601c546001600160a01b031690565b6019546001600160a01b031681565b611ab36125ca565b6000546001600160a01b03908116911614611b03576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600e5481565b6001600160a01b03811660009081526007602052604081205460ff1615611b6b57506001600160a01b038116600090815260046020526040902054610fd7565b6001600160a01b038216600090815260036020526040902054610db390610f7a565b611b956125ca565b6000546001600160a01b03908116911614611be5576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000611c396125ca565b6001600160a01b03811660009081526007602052604090205490915060ff1615611c945760405162461bcd60e51b815260040180806020018281038252602c815260200180613ec5602c913960400191505060405180910390fd5b611c9c613cf0565b611ca68484612d95565b5080516001600160a01b03841660009081526003602052604090205491925090611cd09082612d53565b6001600160a01b038416600090815260036020526040902055600a54611cf69082612d53565b600a55600b54611d069086612af4565b600b555050505050565b601e5481565b60125481565b6000600954841115611d75576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b82611da357611d82613cf0565b611d8c8584612d95565b509050600081815b60200201519250610eea915050565b611dab613cf0565b611db58584612d95565b5090506000816001611d94565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b611df76125ca565b6000546001600160a01b03908116911614611e47576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b600e55565b601a546001600160a01b031690565b60408051808201909152600681526525b0b4b5b2b760d11b602082015290565b601d546001600160a01b031690565b601f5490565b601d546001600160a01b031681565b6000610daf611eac6125ca565b84610ee185604051806060016040528060258152602001613ef16025913960056000611ed66125ca565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906129f8565b6000610daf611f146125ca565b84846126ba565b611f236125ca565b6000546001600160a01b03908116911614611f73576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b611f9d6125ca565b6000546001600160a01b03908116911614611fed576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601255565b60145481565b6019546040805163d21220a760e01b815290516000926001600160a01b0316918391839163d21220a7916004808301926020929190829003018186803b15801561204157600080fd5b505afa158015612055573d6000803e3d6000fd5b505050506040513d602081101561206b57600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03861691630902f1ac91600480820192606092909190829003018186803b1580156120b657600080fd5b505afa1580156120ca573d6000803e3d6000fd5b505050506040513d60608110156120e057600080fd5b5080516020918201516040805163313ce56760e01b815290516dffffffffffffffffffffffffffff93841696509290911693506000926001600160a01b0387169263313ce567926004808201939291829003018186803b15801561214357600080fd5b505afa158015612157573d6000803e3d6000fd5b505050506040513d602081101561216d57600080fd5b5051600a0a8302905061218a826121848984612b4e565b90612ab2565b979650505050505050565b61219d6125ca565b6000546001600160a01b039081169116146121ed576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601d8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6122486125ca565b6000546001600160a01b03908116911614612298576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601455565b6122a56125ca565b6000546001600160a01b039081169116146122f5576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601e55565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b61232d6125ca565b6000546001600160a01b0390811691161461237d576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6123a76125ca565b6000546001600160a01b039081169116146123f7576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b6124206125ca565b6000546001600160a01b03908116911614612470576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601f55565b61247d6125ca565b6000546001600160a01b039081169116146124cd576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b6001600160a01b0381166125125760405162461bcd60e51b8152600401808060200182810382526026815260200180613d7a6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125756125ca565b6000546001600160a01b039081169116146125c5576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601655565b3390565b6001600160a01b0383166126135760405162461bcd60e51b8152600401808060200182810382526024815260200180613ea16024913960400191505060405180910390fd5b6001600160a01b0382166126585760405162461bcd60e51b8152600401808060200182810382526022815260200180613da06022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166126ff5760405162461bcd60e51b8152600401808060200182810382526025815260200180613e7c6025913960400191505060405180910390fd5b6001600160a01b0382166127445760405162461bcd60e51b8152600401808060200182810382526023815260200180613d2d6023913960400191505060405180910390fd5b600081116127835760405162461bcd60e51b8152600401808060200182810382526029815260200180613e536029913960400191505060405180910390fd5b61278b611de0565b6001600160a01b0316836001600160a01b0316141580156127c557506127af611de0565b6001600160a01b0316826001600160a01b031614155b1561280b57601e5481111561280b5760405162461bcd60e51b8152600401808060200182810382526028815260200180613dc26028913960400191505060405180910390fd5b600061281630611b2b565b9050601e5481106128265750601e545b601f54811080159081906128445750601d54600160a01b900460ff16155b801561285e57506019546001600160a01b03868116911614155b80156128735750601d54600160a81b900460ff165b1561288657601f54915061288682612e06565b6001600160a01b03851660009081526006602052604090205460019060ff16806128c857506001600160a01b03851660009081526006602052604090205460ff165b156128d1575060005b600c548180156128ee57506019546001600160a01b038781169116145b156129e2576128fd6001611ff8565b851161290c5750600c546129e2565b6129166001611ff8565b8511801561292d57506129296003611ff8565b8511155b1561293a575060036129e2565b6129446003611ff8565b8511801561295b57506129576005611ff8565b8511155b15612968575060046129e2565b6129726005611ff8565b8511801561298957506129856007611ff8565b8511155b15612996575060056129e2565b6129a06007611ff8565b851180156129b757506129b36009611ff8565b8511155b156129c4575060066129e2565b6129ce6009611ff8565b8511156129dd575060076129e2565b50600c545b6129ef8787878585612ba7565b50505050505050565b60008184841115612a875760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a4c578181015183820152602001612a34565b50505050905090810190601f168015612a795780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000612a9c612eac565b9092509050612aab8282612ab2565b9250505090565b6000610eea83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061300f565b600082820183811015610eea576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612b5d57506000610db3565b82820282848281612b6a57fe5b0414610eea5760405162461bcd60e51b8152600401808060200182810382526021815260200180613dea6021913960400191505060405180910390fd5b811580612bbe5750601d54600160a81b900460ff16155b15612bcf57612bcb613074565b5060005b6001600160a01b03851660009081526007602052604090205460ff168015612c1057506001600160a01b03841660009081526007602052604090205460ff16155b15612c2657612c2185858584613100565b612d28565b6001600160a01b03851660009081526007602052604090205460ff16158015612c6757506001600160a01b03841660009081526007602052604090205460ff165b15612c7857612c2185858584613209565b6001600160a01b03851660009081526007602052604090205460ff16158015612cba57506001600160a01b03841660009081526007602052604090205460ff16155b15612ccb57612c2185858584613270565b6001600160a01b03851660009081526007602052604090205460ff168015612d0b57506001600160a01b03841660009081526007602052604090205460ff165b15612d1c57612c21858585846132cd565b612d2885858584613270565b811580612d3f5750601d54600160a81b900460ff16155b15612d4c57612d4c613334565b5050505050565b6000610eea83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129f8565b612d9d613cf0565b612da5613d0e565b612dad613d0e565b612db7858561335a565b9050612dc1613cf0565b602082015160408301516060840151608085015160a086015160c0870151612dfa958c959094909390929091612df5612a8f565b6133e3565b96919550909350505050565b601d805460ff60a01b1916600160a01b1790556000612e26826002612ab2565b90506000612e348383612d53565b905047612e40836134cc565b6000612e4c4783612d53565b9050612e58838261367a565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050601d805460ff60a01b19169055505050565b600a546009546000918291825b600854811015612fdd57826003600060088481548110612ed557fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612f3a5750816004600060088481548110612f1357fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612f5157600a546009549450945050505061300b565b612f916003600060088481548110612f6557fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612d53565b9250612fd36004600060088481548110612fa757fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612d53565b9150600101612eb9565b50600954600a54612fed91612ab2565b82101561300557600a5460095493509350505061300b565b90925090505b9091565b6000818361305e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612a4c578181015183820152602001612a34565b50600083858161306a57fe5b0495945050505050565b600c541580156130845750600e54155b80156130905750601054155b801561309c5750601454155b80156130a85750601654155b80156130b45750601254155b156130be576130fe565b600c8054600d55600e8054600f55601080546011556016805460175560148054601555601280546013556000958690559385905591849055839055829055555b565b613108613cf0565b613110613d0e565b61311a8484612d95565b8151602080840151604080860151855193860151918601516060870151608088015160a0890151999b5097995095979396919592939092919061315d8f8e61374d565b6131678f8a613790565b6131718e896137d3565b61317a846137f6565b6131838361387f565b61318c8261393e565b613195816139fd565b60c08a01516131a390613abc565b6131ad8786613b7b565b8d6001600160a01b03168f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040518082815260200191505060405180910390a3505050505050505050505050505050565b613211613cf0565b613219613d0e565b6132238484612d95565b8151602080840151604080860151855193860151918601516060870151608088015160a0890151999b509799509597939691959293909291906132668f8a613790565b6131678e87613b9f565b613278613cf0565b613280613d0e565b61328a8484612d95565b8151602080840151604080860151855193860151918601516060870151608088015160a0890151999b509799509597939691959293909291906131678f8a613790565b6132d5613cf0565b6132dd613d0e565b6132e78484612d95565b8151602080840151604080860151855193860151918601516060870151608088015160a0890151999b5097995095979396919592939092919061332a8f8a613790565b6132668f8e61374d565b600d54600c55600f54600e55601154601055601754601655601554601455601354601255565b613362613d0e565b61336a613d0e565b6040518060e00160405280600081526020016133868686613bc2565b815260200161339486613bd3565b81526020016133a286613bef565b81526020016133b086613c0b565b81526020016133be86613c27565b81526020016133cc86613c43565b905290506133da8482613c5f565b81529392505050565b6133eb613cf0565b60006133f78a84612b4e565b905060006134058a85612b4e565b905060006134138a86612b4e565b905060006134218a87612b4e565b9050600061342f8a88612b4e565b9050600061343d8a89612b4e565b9050600061344b8a8a612b4e565b9050613455613d0e565b6040518060e00160405280898152602001878152602001888152602001868152602001858152602001848152602001838152509050613492613cf0565b60405180606001604052808a81526020016134ac84613cb0565b815260200198909852509597505050505050505098975050505050505050565b604080516002808252606080830184529260208301908036833701905050905030816000815181106134fa57fe5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561354e57600080fd5b505afa158015613562573d6000803e3d6000fd5b505050506040513d602081101561357857600080fd5b505181518290600190811061358957fe5b6001600160a01b0392831660209182029290920101526018546135af91309116846125ce565b60185460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561363557818101518382015260200161361d565b505050509050019650505050505050600060405180830381600087803b15801561365e57600080fd5b505af1158015613672573d6000803e3d6000fd5b505050505050565b6018546136929030906001600160a01b0316846125ce565b6018546001600160a01b031663f305d7198230856000806136b1611de0565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b15801561371c57600080fd5b505af1158015613730573d6000803e3d6000fd5b50505050506040513d606081101561374757600080fd5b50505050565b6001600160a01b0382166000908152600460205260409020546137709082612d53565b6001600160a01b0390921660009081526004602052604090209190915550565b6001600160a01b0382166000908152600360205260409020546137b39082612d53565b6001600160a01b0390921660009081526003602052604090209190915550565b6001600160a01b0382166000908152600360205260409020546137b39082612af4565b6000613800612a8f565b9050600061380e8383612b4e565b3060009081526003602052604090205490915061382b9082612af4565b3060009081526003602090815260408083209390935560079052205460ff161561387a57306000908152600460205260409020546138699084612af4565b306000908152600460205260409020555b505050565b6000613889612a8f565b905060006138978383612b4e565b601a546001600160a01b03166000908152600360205260409020549091506138bf9082612af4565b601a80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff161561387a57601a546001600160a01b031660009081526004602052604090205461391e9084612af4565b601a546001600160a01b0316600090815260046020526040902055505050565b6000613948612a8f565b905060006139568383612b4e565b601c546001600160a01b031660009081526003602052604090205490915061397e9082612af4565b601c80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff161561387a57601c546001600160a01b03166000908152600460205260409020546139dd9084612af4565b601c546001600160a01b0316600090815260046020526040902055505050565b6000613a07612a8f565b90506000613a158383612b4e565b601b546001600160a01b0316600090815260036020526040902054909150613a3d9082612af4565b601b80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff161561387a57601b546001600160a01b0316600090815260046020526040902054613a9c9084612af4565b601b546001600160a01b0316600090815260046020526040902055505050565b6000613ac6612a8f565b90506000613ad48383612b4e565b601d546001600160a01b0316600090815260036020526040902054909150613afc9082612af4565b601d80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff161561387a57601d546001600160a01b0316600090815260046020526040902054613b5b9084612af4565b601d546001600160a01b0316600090815260046020526040902055505050565b600a54613b889083612d53565b600a55600b54613b989082612af4565b600b555050565b6001600160a01b0382166000908152600460205260409020546137709082612af4565b6000610eea60646121848585612b4e565b6000610db36064612184600e5485612b4e90919063ffffffff16565b6000610db3606461218460105485612b4e90919063ffffffff16565b6000610db3606461218460145485612b4e90919063ffffffff16565b6000610db3606461218460165485612b4e90919063ffffffff16565b6000610db3606461218460125485612b4e90919063ffffffff16565b6000610eea8260066020020151613caa8460056020020151613caa8660046020020151613caa8860036020020151613caa8a60026020020151613caa8c600160200201518e90612d53565b90612d53565b60c081015160a082015160808301516060840151602085015160408601518651600096610db3969095613caa959194869491938593928492918391612d53565b60405180606001604052806003906020820280368337509192915050565b6040518060e00160405280600790602082028036833750919291505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aa8400279178d24bbf9e2c177f9b600c38c67bbf9b9cc69e8562ed517d7ef0d164736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c806364a012a0116101e7578063a0b69aae1161010d578063cea26958116100a0578063ea2f0b371161006f578063ea2f0b3714610c61578063f0f165af14610c94578063f2fde38b14610cbe578063fda55a3d14610cf1576103ad565b8063cea2695814610b9f578063d543dbeb14610bc9578063dd62ed3e14610bf3578063ddb61bc214610c2e576103ad565b8063b2c89770116100dc578063b2c8977014610b0a578063c0b0fda214610b34578063c457fb3714610b49578063c49b9a8014610b73576103ad565b8063a0b69aae14610a50578063a457c2d714610a65578063a9059cbb14610a9e578063b0ea115814610ad7576103ad565b80637ec24e561161018557806394e7fa361161015457806394e7fa36146109fc57806395d89b4114610a11578063996c671b14610a265780639b2f821b14610a3b576103ad565b80637ec24e561461095257806388f820201461098a5780638da5cb5b146109bd5780638ee88c53146109d2576103ad565b8063715018a6116101c1578063715018a6146108e35780637b8ac66b146108f85780637d1db4a5146109285780637d7163dd1461093d576103ad565b806364a012a0146108685780636bc87c3a1461089b57806370a08231146108b0576103ad565b80633685d419116102cc578063457c194c1161026a5780635342acb4116102395780635342acb4146107f6578063577171e1146108295780635db423f11461083e578063632a6a3514610853576103ad565b8063457c194c146107845780634a74bb02146107ae5780634cb80fd51461054c57806352390c02146107c3576103ad565b80634144d9e4116102a65780634144d9e4146106df57806341cb87fc146106f457806342966c6814610727578063437823ec14610751576103ad565b80633685d4191461065e57806339509351146106915780633b124fe7146106ca576103ad565b80631a9b30531161034457806325e7df521161031357806325e7df52146105d757806329d95d5d1461060a5780632d8381191461061f578063313ce56714610649576103ad565b80631a9b3053146105375780631ff53b601461054c57806322976e0d1461057f57806323b872dd14610594576103ad565b806313114a9d1161038057806313114a9d146104b557806318160ddd146104dc57806319de79ab146104f15780631a4cd1b114610506576103ad565b8063061c82d0146103b257806306fdde03146103de578063095ea7b314610468576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103dc600480360360208110156103d557600080fd5b5035610d1b565b005b3480156103ea57600080fd5b506103f3610d78565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561042d578181015183820152602001610415565b50505050905090810190601f16801561045a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561047457600080fd5b506104a16004803603604081101561048b57600080fd5b506001600160a01b038135169060200135610d9b565b604080519115158252519081900360200190f35b3480156104c157600080fd5b506104ca610db9565b60408051918252519081900360200190f35b3480156104e857600080fd5b506104ca610dbf565b3480156104fd57600080fd5b506104ca610dc5565b34801561051257600080fd5b5061051b610dcb565b604080516001600160a01b039092168252519081900360200190f35b34801561054357600080fd5b5061051b610dda565b34801561055857600080fd5b506103dc6004803603602081101561056f57600080fd5b50356001600160a01b0316610de9565b34801561058b57600080fd5b506104ca610e63565b3480156105a057600080fd5b506104a1600480360360608110156105b757600080fd5b506001600160a01b03813581169160208101359091169060400135610e69565b3480156105e357600080fd5b506103dc600480360360208110156105fa57600080fd5b50356001600160a01b0316610ef1565b34801561061657600080fd5b5061051b610f6b565b34801561062b57600080fd5b506104ca6004803603602081101561064257600080fd5b5035610f7a565b34801561065557600080fd5b506104ca610fdc565b34801561066a57600080fd5b506103dc6004803603602081101561068157600080fd5b50356001600160a01b0316610fe1565b34801561069d57600080fd5b506104a1600480360360408110156106b457600080fd5b506001600160a01b0381351690602001356111a2565b3480156106d657600080fd5b506104ca6111f0565b3480156106eb57600080fd5b5061051b6111f6565b34801561070057600080fd5b506103dc6004803603602081101561071757600080fd5b50356001600160a01b0316611205565b34801561073357600080fd5b506104a16004803603602081101561074a57600080fd5b50356116f0565b34801561075d57600080fd5b506103dc6004803603602081101561077457600080fd5b50356001600160a01b03166117f1565b34801561079057600080fd5b506103dc600480360360208110156107a757600080fd5b503561186d565b3480156107ba57600080fd5b506104a16118ca565b3480156107cf57600080fd5b506103dc600480360360208110156107e657600080fd5b50356001600160a01b03166118da565b34801561080257600080fd5b506104a16004803603602081101561081957600080fd5b50356001600160a01b0316611a60565b34801561083557600080fd5b5061051b611a7e565b34801561084a57600080fd5b5061051b611a8d565b34801561085f57600080fd5b5061051b611a9c565b34801561087457600080fd5b506103dc6004803603602081101561088b57600080fd5b50356001600160a01b0316611aab565b3480156108a757600080fd5b506104ca611b25565b3480156108bc57600080fd5b506104ca600480360360208110156108d357600080fd5b50356001600160a01b0316611b2b565b3480156108ef57600080fd5b506103dc611b8d565b34801561090457600080fd5b506103dc6004803603604081101561091b57600080fd5b5080359060200135611c2f565b34801561093457600080fd5b506104ca611d10565b34801561094957600080fd5b506104ca611d16565b34801561095e57600080fd5b506104ca6004803603606081101561097557600080fd5b50803590602081013515159060400135611d1c565b34801561099657600080fd5b506104a1600480360360208110156109ad57600080fd5b50356001600160a01b0316611dc2565b3480156109c957600080fd5b5061051b611de0565b3480156109de57600080fd5b506103dc600480360360208110156109f557600080fd5b5035611def565b348015610a0857600080fd5b5061051b611e4c565b348015610a1d57600080fd5b506103f3611e5b565b348015610a3257600080fd5b5061051b611e7b565b348015610a4757600080fd5b506104ca611e8a565b348015610a5c57600080fd5b5061051b611e90565b348015610a7157600080fd5b506104a160048036036040811015610a8857600080fd5b506001600160a01b038135169060200135611e9f565b348015610aaa57600080fd5b506104a160048036036040811015610ac157600080fd5b506001600160a01b038135169060200135611f07565b348015610ae357600080fd5b506103dc60048036036020811015610afa57600080fd5b50356001600160a01b0316611f1b565b348015610b1657600080fd5b506103dc60048036036020811015610b2d57600080fd5b5035611f95565b348015610b4057600080fd5b506104ca611ff2565b348015610b5557600080fd5b506104ca60048036036020811015610b6c57600080fd5b5035611ff8565b348015610b7f57600080fd5b506103dc60048036036020811015610b9657600080fd5b50351515612195565b348015610bab57600080fd5b506103dc60048036036020811015610bc257600080fd5b5035612240565b348015610bd557600080fd5b506103dc60048036036020811015610bec57600080fd5b503561229d565b348015610bff57600080fd5b506104ca60048036036040811015610c1657600080fd5b506001600160a01b03813581169160200135166122fa565b348015610c3a57600080fd5b506103dc60048036036020811015610c5157600080fd5b50356001600160a01b0316612325565b348015610c6d57600080fd5b506103dc60048036036020811015610c8457600080fd5b50356001600160a01b031661239f565b348015610ca057600080fd5b506103dc60048036036020811015610cb757600080fd5b5035612418565b348015610cca57600080fd5b506103dc60048036036020811015610ce157600080fd5b50356001600160a01b0316612475565b348015610cfd57600080fd5b506103dc60048036036020811015610d1457600080fd5b503561256d565b610d236125ca565b6000546001600160a01b03908116911614610d73576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b600c55565b6040805180820190915260098152684b61696b656e496e7560b81b602082015290565b6000610daf610da86125ca565b84846125ce565b5060015b92915050565b600b5490565b60095490565b60165481565b6018546001600160a01b031681565b601c546001600160a01b031681565b610df16125ca565b6000546001600160a01b03908116911614610e41576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b60105481565b6000610e768484846126ba565b610ee684610e826125ca565b610ee185604051806060016040528060288152602001613e0b602891396001600160a01b038a16600090815260056020526040812090610ec06125ca565b6001600160a01b0316815260208101919091526040016000205491906129f8565b6125ce565b5060015b9392505050565b610ef96125ca565b6000546001600160a01b03908116911614610f49576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b601b546001600160a01b031681565b6000600a54821115610fbd5760405162461bcd60e51b815260040180806020018281038252602a815260200180613d50602a913960400191505060405180910390fd5b6000610fc7612a8f565b9050610fd38382612ab2565b9150505b919050565b600990565b610fe96125ca565b6000546001600160a01b03908116911614611039576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff166110a6576040805162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015290519081900360640190fd5b60005b60085481101561119e57816001600160a01b0316600882815481106110ca57fe5b6000918252602090912001546001600160a01b03161415611196576008805460001981019081106110f757fe5b600091825260209091200154600880546001600160a01b03909216918390811061111d57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600880548061116f57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561119e565b6001016110a9565b5050565b6000610daf6111af6125ca565b84610ee185600560006111c06125ca565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612af4565b600c5481565b601a546001600160a01b031681565b61120d6125ca565b6000546001600160a01b0390811691161461125d576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b600081905060006001600160a01b0316816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112a657600080fd5b505afa1580156112ba573d6000803e3d6000fd5b505050506040513d60208110156112d057600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263e6a439059230929187169163ad5c464891600480820192602092909190829003018186803b15801561132057600080fd5b505afa158015611334573d6000803e3d6000fd5b505050506040513d602081101561134a57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b15801561139a57600080fd5b505afa1580156113ae573d6000803e3d6000fd5b505050506040513d60208110156113c457600080fd5b50516001600160a01b0316141561155457806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561140e57600080fd5b505afa158015611422573d6000803e3d6000fd5b505050506040513d602081101561143857600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b15801561148857600080fd5b505afa15801561149c573d6000803e3d6000fd5b505050506040513d60208110156114b257600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b15801561150457600080fd5b505af1158015611518573d6000803e3d6000fd5b505050506040513d602081101561152e57600080fd5b5051601980546001600160a01b0319166001600160a01b039092169190911790556116cd565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561158d57600080fd5b505afa1580156115a1573d6000803e3d6000fd5b505050506040513d60208110156115b757600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263e6a439059230929186169163ad5c464891600480820192602092909190829003018186803b15801561160757600080fd5b505afa15801561161b573d6000803e3d6000fd5b505050506040513d602081101561163157600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b15801561168157600080fd5b505afa158015611695573d6000803e3d6000fd5b505050506040513d60208110156116ab57600080fd5b5051601980546001600160a01b0319166001600160a01b039092169190911790555b601880546001600160a01b0319166001600160a01b039290921691909117905550565b6000806117036116fe6125ca565b611b2b565b90508083111561174e576040805162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b604482015290519081900360640190fd5b6000611758612a8f565b905060006117668583612b4e565b905061177e6117736125ca565b600087600080612ba7565b60095461178b9086612d53565b600955600a5461179b9082612d53565b600a556117a66125ca565b6001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5866040518082815260200191505060405180910390a2506001949350505050565b6117f96125ca565b6000546001600160a01b03908116911614611849576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6118756125ca565b6000546001600160a01b039081169116146118c5576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601055565b601d54600160a81b900460ff1681565b6118e26125ca565b6000546001600160a01b03908116911614611932576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16156119a0576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260036020526040902054156119fa576001600160a01b0381166000908152600360205260409020546119e090610f7a565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b601b546001600160a01b031690565b601c546001600160a01b031690565b6019546001600160a01b031681565b611ab36125ca565b6000546001600160a01b03908116911614611b03576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600e5481565b6001600160a01b03811660009081526007602052604081205460ff1615611b6b57506001600160a01b038116600090815260046020526040902054610fd7565b6001600160a01b038216600090815260036020526040902054610db390610f7a565b611b956125ca565b6000546001600160a01b03908116911614611be5576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000611c396125ca565b6001600160a01b03811660009081526007602052604090205490915060ff1615611c945760405162461bcd60e51b815260040180806020018281038252602c815260200180613ec5602c913960400191505060405180910390fd5b611c9c613cf0565b611ca68484612d95565b5080516001600160a01b03841660009081526003602052604090205491925090611cd09082612d53565b6001600160a01b038416600090815260036020526040902055600a54611cf69082612d53565b600a55600b54611d069086612af4565b600b555050505050565b601e5481565b60125481565b6000600954841115611d75576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b82611da357611d82613cf0565b611d8c8584612d95565b509050600081815b60200201519250610eea915050565b611dab613cf0565b611db58584612d95565b5090506000816001611d94565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b611df76125ca565b6000546001600160a01b03908116911614611e47576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b600e55565b601a546001600160a01b031690565b60408051808201909152600681526525b0b4b5b2b760d11b602082015290565b601d546001600160a01b031690565b601f5490565b601d546001600160a01b031681565b6000610daf611eac6125ca565b84610ee185604051806060016040528060258152602001613ef16025913960056000611ed66125ca565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906129f8565b6000610daf611f146125ca565b84846126ba565b611f236125ca565b6000546001600160a01b03908116911614611f73576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b611f9d6125ca565b6000546001600160a01b03908116911614611fed576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601255565b60145481565b6019546040805163d21220a760e01b815290516000926001600160a01b0316918391839163d21220a7916004808301926020929190829003018186803b15801561204157600080fd5b505afa158015612055573d6000803e3d6000fd5b505050506040513d602081101561206b57600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03861691630902f1ac91600480820192606092909190829003018186803b1580156120b657600080fd5b505afa1580156120ca573d6000803e3d6000fd5b505050506040513d60608110156120e057600080fd5b5080516020918201516040805163313ce56760e01b815290516dffffffffffffffffffffffffffff93841696509290911693506000926001600160a01b0387169263313ce567926004808201939291829003018186803b15801561214357600080fd5b505afa158015612157573d6000803e3d6000fd5b505050506040513d602081101561216d57600080fd5b5051600a0a8302905061218a826121848984612b4e565b90612ab2565b979650505050505050565b61219d6125ca565b6000546001600160a01b039081169116146121ed576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601d8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6122486125ca565b6000546001600160a01b03908116911614612298576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601455565b6122a56125ca565b6000546001600160a01b039081169116146122f5576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601e55565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b61232d6125ca565b6000546001600160a01b0390811691161461237d576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6123a76125ca565b6000546001600160a01b039081169116146123f7576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b6124206125ca565b6000546001600160a01b03908116911614612470576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601f55565b61247d6125ca565b6000546001600160a01b039081169116146124cd576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b6001600160a01b0381166125125760405162461bcd60e51b8152600401808060200182810382526026815260200180613d7a6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125756125ca565b6000546001600160a01b039081169116146125c5576040805162461bcd60e51b81526020600482018190526024820152600080516020613e33833981519152604482015290519081900360640190fd5b601655565b3390565b6001600160a01b0383166126135760405162461bcd60e51b8152600401808060200182810382526024815260200180613ea16024913960400191505060405180910390fd5b6001600160a01b0382166126585760405162461bcd60e51b8152600401808060200182810382526022815260200180613da06022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166126ff5760405162461bcd60e51b8152600401808060200182810382526025815260200180613e7c6025913960400191505060405180910390fd5b6001600160a01b0382166127445760405162461bcd60e51b8152600401808060200182810382526023815260200180613d2d6023913960400191505060405180910390fd5b600081116127835760405162461bcd60e51b8152600401808060200182810382526029815260200180613e536029913960400191505060405180910390fd5b61278b611de0565b6001600160a01b0316836001600160a01b0316141580156127c557506127af611de0565b6001600160a01b0316826001600160a01b031614155b1561280b57601e5481111561280b5760405162461bcd60e51b8152600401808060200182810382526028815260200180613dc26028913960400191505060405180910390fd5b600061281630611b2b565b9050601e5481106128265750601e545b601f54811080159081906128445750601d54600160a01b900460ff16155b801561285e57506019546001600160a01b03868116911614155b80156128735750601d54600160a81b900460ff165b1561288657601f54915061288682612e06565b6001600160a01b03851660009081526006602052604090205460019060ff16806128c857506001600160a01b03851660009081526006602052604090205460ff165b156128d1575060005b600c548180156128ee57506019546001600160a01b038781169116145b156129e2576128fd6001611ff8565b851161290c5750600c546129e2565b6129166001611ff8565b8511801561292d57506129296003611ff8565b8511155b1561293a575060036129e2565b6129446003611ff8565b8511801561295b57506129576005611ff8565b8511155b15612968575060046129e2565b6129726005611ff8565b8511801561298957506129856007611ff8565b8511155b15612996575060056129e2565b6129a06007611ff8565b851180156129b757506129b36009611ff8565b8511155b156129c4575060066129e2565b6129ce6009611ff8565b8511156129dd575060076129e2565b50600c545b6129ef8787878585612ba7565b50505050505050565b60008184841115612a875760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a4c578181015183820152602001612a34565b50505050905090810190601f168015612a795780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000612a9c612eac565b9092509050612aab8282612ab2565b9250505090565b6000610eea83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061300f565b600082820183811015610eea576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612b5d57506000610db3565b82820282848281612b6a57fe5b0414610eea5760405162461bcd60e51b8152600401808060200182810382526021815260200180613dea6021913960400191505060405180910390fd5b811580612bbe5750601d54600160a81b900460ff16155b15612bcf57612bcb613074565b5060005b6001600160a01b03851660009081526007602052604090205460ff168015612c1057506001600160a01b03841660009081526007602052604090205460ff16155b15612c2657612c2185858584613100565b612d28565b6001600160a01b03851660009081526007602052604090205460ff16158015612c6757506001600160a01b03841660009081526007602052604090205460ff165b15612c7857612c2185858584613209565b6001600160a01b03851660009081526007602052604090205460ff16158015612cba57506001600160a01b03841660009081526007602052604090205460ff16155b15612ccb57612c2185858584613270565b6001600160a01b03851660009081526007602052604090205460ff168015612d0b57506001600160a01b03841660009081526007602052604090205460ff165b15612d1c57612c21858585846132cd565b612d2885858584613270565b811580612d3f5750601d54600160a81b900460ff16155b15612d4c57612d4c613334565b5050505050565b6000610eea83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129f8565b612d9d613cf0565b612da5613d0e565b612dad613d0e565b612db7858561335a565b9050612dc1613cf0565b602082015160408301516060840151608085015160a086015160c0870151612dfa958c959094909390929091612df5612a8f565b6133e3565b96919550909350505050565b601d805460ff60a01b1916600160a01b1790556000612e26826002612ab2565b90506000612e348383612d53565b905047612e40836134cc565b6000612e4c4783612d53565b9050612e58838261367a565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050601d805460ff60a01b19169055505050565b600a546009546000918291825b600854811015612fdd57826003600060088481548110612ed557fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612f3a5750816004600060088481548110612f1357fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612f5157600a546009549450945050505061300b565b612f916003600060088481548110612f6557fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612d53565b9250612fd36004600060088481548110612fa757fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612d53565b9150600101612eb9565b50600954600a54612fed91612ab2565b82101561300557600a5460095493509350505061300b565b90925090505b9091565b6000818361305e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612a4c578181015183820152602001612a34565b50600083858161306a57fe5b0495945050505050565b600c541580156130845750600e54155b80156130905750601054155b801561309c5750601454155b80156130a85750601654155b80156130b45750601254155b156130be576130fe565b600c8054600d55600e8054600f55601080546011556016805460175560148054601555601280546013556000958690559385905591849055839055829055555b565b613108613cf0565b613110613d0e565b61311a8484612d95565b8151602080840151604080860151855193860151918601516060870151608088015160a0890151999b5097995095979396919592939092919061315d8f8e61374d565b6131678f8a613790565b6131718e896137d3565b61317a846137f6565b6131838361387f565b61318c8261393e565b613195816139fd565b60c08a01516131a390613abc565b6131ad8786613b7b565b8d6001600160a01b03168f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040518082815260200191505060405180910390a3505050505050505050505050505050565b613211613cf0565b613219613d0e565b6132238484612d95565b8151602080840151604080860151855193860151918601516060870151608088015160a0890151999b509799509597939691959293909291906132668f8a613790565b6131678e87613b9f565b613278613cf0565b613280613d0e565b61328a8484612d95565b8151602080840151604080860151855193860151918601516060870151608088015160a0890151999b509799509597939691959293909291906131678f8a613790565b6132d5613cf0565b6132dd613d0e565b6132e78484612d95565b8151602080840151604080860151855193860151918601516060870151608088015160a0890151999b5097995095979396919592939092919061332a8f8a613790565b6132668f8e61374d565b600d54600c55600f54600e55601154601055601754601655601554601455601354601255565b613362613d0e565b61336a613d0e565b6040518060e00160405280600081526020016133868686613bc2565b815260200161339486613bd3565b81526020016133a286613bef565b81526020016133b086613c0b565b81526020016133be86613c27565b81526020016133cc86613c43565b905290506133da8482613c5f565b81529392505050565b6133eb613cf0565b60006133f78a84612b4e565b905060006134058a85612b4e565b905060006134138a86612b4e565b905060006134218a87612b4e565b9050600061342f8a88612b4e565b9050600061343d8a89612b4e565b9050600061344b8a8a612b4e565b9050613455613d0e565b6040518060e00160405280898152602001878152602001888152602001868152602001858152602001848152602001838152509050613492613cf0565b60405180606001604052808a81526020016134ac84613cb0565b815260200198909852509597505050505050505098975050505050505050565b604080516002808252606080830184529260208301908036833701905050905030816000815181106134fa57fe5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561354e57600080fd5b505afa158015613562573d6000803e3d6000fd5b505050506040513d602081101561357857600080fd5b505181518290600190811061358957fe5b6001600160a01b0392831660209182029290920101526018546135af91309116846125ce565b60185460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561363557818101518382015260200161361d565b505050509050019650505050505050600060405180830381600087803b15801561365e57600080fd5b505af1158015613672573d6000803e3d6000fd5b505050505050565b6018546136929030906001600160a01b0316846125ce565b6018546001600160a01b031663f305d7198230856000806136b1611de0565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b15801561371c57600080fd5b505af1158015613730573d6000803e3d6000fd5b50505050506040513d606081101561374757600080fd5b50505050565b6001600160a01b0382166000908152600460205260409020546137709082612d53565b6001600160a01b0390921660009081526004602052604090209190915550565b6001600160a01b0382166000908152600360205260409020546137b39082612d53565b6001600160a01b0390921660009081526003602052604090209190915550565b6001600160a01b0382166000908152600360205260409020546137b39082612af4565b6000613800612a8f565b9050600061380e8383612b4e565b3060009081526003602052604090205490915061382b9082612af4565b3060009081526003602090815260408083209390935560079052205460ff161561387a57306000908152600460205260409020546138699084612af4565b306000908152600460205260409020555b505050565b6000613889612a8f565b905060006138978383612b4e565b601a546001600160a01b03166000908152600360205260409020549091506138bf9082612af4565b601a80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff161561387a57601a546001600160a01b031660009081526004602052604090205461391e9084612af4565b601a546001600160a01b0316600090815260046020526040902055505050565b6000613948612a8f565b905060006139568383612b4e565b601c546001600160a01b031660009081526003602052604090205490915061397e9082612af4565b601c80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff161561387a57601c546001600160a01b03166000908152600460205260409020546139dd9084612af4565b601c546001600160a01b0316600090815260046020526040902055505050565b6000613a07612a8f565b90506000613a158383612b4e565b601b546001600160a01b0316600090815260036020526040902054909150613a3d9082612af4565b601b80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff161561387a57601b546001600160a01b0316600090815260046020526040902054613a9c9084612af4565b601b546001600160a01b0316600090815260046020526040902055505050565b6000613ac6612a8f565b90506000613ad48383612b4e565b601d546001600160a01b0316600090815260036020526040902054909150613afc9082612af4565b601d80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff161561387a57601d546001600160a01b0316600090815260046020526040902054613b5b9084612af4565b601d546001600160a01b0316600090815260046020526040902055505050565b600a54613b889083612d53565b600a55600b54613b989082612af4565b600b555050565b6001600160a01b0382166000908152600460205260409020546137709082612af4565b6000610eea60646121848585612b4e565b6000610db36064612184600e5485612b4e90919063ffffffff16565b6000610db3606461218460105485612b4e90919063ffffffff16565b6000610db3606461218460145485612b4e90919063ffffffff16565b6000610db3606461218460165485612b4e90919063ffffffff16565b6000610db3606461218460125485612b4e90919063ffffffff16565b6000610eea8260066020020151613caa8460056020020151613caa8660046020020151613caa8860036020020151613caa8a60026020020151613caa8c600160200201518e90612d53565b90612d53565b60c081015160a082015160808301516060840151602085015160408601518651600096610db3969095613caa959194869491938593928492918391612d53565b60405180606001604052806003906020820280368337509192915050565b6040518060e00160405280600790602082028036833750919291505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aa8400279178d24bbf9e2c177f9b600c38c67bbf9b9cc69e8562ed517d7ef0d164736f6c634300060c0033

Deployed Bytecode Sourcemap

23219:32610:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33345:145;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33345:145:0;;:::i;:::-;;27687:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28610:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28610:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;29731:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27975:95;;;;;;;;;;;;;:::i;24483:30::-;;;;;;;;;;;;;:::i;24582:41::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;24582:41:0;;;;;;;;;;;;;;24769;;;;;;;;;;;;;:::i;41602:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41602:157:0;-1:-1:-1;;;;;41602:157:0;;:::i;24207:32::-;;;;;;;;;;;;;:::i;28779:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28779:313:0;;;;;;;;;;;;;;;;;:::i;52903:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52903:148:0;-1:-1:-1;;;;;52903:148:0;;:::i;24718:44::-;;;;;;;;;;;;;:::i;30866:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30866:253:0;;:::i;27873:94::-;;;;;;;;;;;;;:::i;31582:475::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31582:475:0;-1:-1:-1;;;;;31582:475:0;;:::i;29100:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29100:218:0;;;;;;;;:::i;24023:26::-;;;;;;;;;;;;;:::i;24665:46::-;;;;;;;;;;;;;:::i;54580:659::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54580:659:0;-1:-1:-1;;;;;54580:659:0;;:::i;55251:567::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55251:567:0;;:::i;33108:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33108:111:0;-1:-1:-1;;;;;33108:111:0;;:::i;53900:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53900:175:0;;:::i;24899:40::-;;;;;;;;;;;;;:::i;31127:447::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31127:447:0;-1:-1:-1;;;;;31127:447:0;;:::i;41471:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41471:123:0;-1:-1:-1;;;;;41471:123:0;;:::i;53059:112::-;;;;;;;;;;;;;:::i;53321:106::-;;;;;;;;;;;;;:::i;24630:28::-;;;;;;;;;;;;;:::i;53179:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53179:134:0;-1:-1:-1;;;;;53179:134:0;;:::i;24106:32::-;;;;;;;;;;;;;:::i;28078:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28078:198:0;-1:-1:-1;;;;;28078:198:0;;:::i;14570:148::-;;;;;;;;;;;;;:::i;29826:451::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29826:451:0;;;;;;;:::i;24948:56::-;;;;;;;;;;;;;:::i;24308:28::-;;;;;;;;;;;;;:::i;30285:573::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30285:573:0;;;;;;;;;;;;;;:::i;29603:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29603:120:0;-1:-1:-1;;;;;29603:120:0;;:::i;13927:79::-;;;;;;;;;;;;;:::i;33498:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33498:175:0;;:::i;52514:116::-;;;;;;;;;;;;;:::i;27778:87::-;;;;;;;;;;;;;:::i;52784:111::-;;;;;;;;;;;;;:::i;53763:129::-;;;;;;;;;;;;;:::i;24817:45::-;;;;;;;;;;;;;:::i;29326:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29326:269:0;;;;;;;;:::i;28284:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28284:167:0;;;;;;;;:::i;53435:128::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53435:128:0;-1:-1:-1;;;;;53435:128:0;;:::i;54083:161::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54083:161:0;;:::i;24397:27::-;;;;;;;;;;;;;:::i;44941:417::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44941:417:0;;:::i;33803:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33803:171:0;;;;:::i;54252:150::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54252:150:0;;:::i;33681:114::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33681:114:0;;:::i;28459:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28459:143:0;;;;;;;;;;:::i;37506:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37506:109:0;-1:-1:-1;;;;;37506:109:0;;:::i;33227:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33227:110:0;-1:-1:-1;;;;;33227:110:0;;:::i;53571:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53571:184:0;;:::i;14873:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14873:244:0;-1:-1:-1;;;;;14873:244:0;;:::i;54410:162::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54410:162:0;;:::i;33345:145::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;33466:7:::1;:16:::0;33345:145::o;27687:83::-;27757:5;;;;;;;;;;;;-1:-1:-1;;;27757:5:0;;;;27687:83;:::o;28610:161::-;28685:4;28702:39;28711:12;:10;:12::i;:::-;28725:7;28734:6;28702:8;:39::i;:::-;-1:-1:-1;28759:4:0;28610:161;;;;;:::o;29731:87::-;29800:10;;29731:87;:::o;27975:95::-;28055:7;;27975:95;:::o;24483:30::-;;;;:::o;24582:41::-;;;-1:-1:-1;;;;;24582:41:0;;:::o;24769:::-;;;-1:-1:-1;;;;;24769:41:0;;:::o;41602:157::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;41703:23:::1;:48:::0;;-1:-1:-1;;;;;;41703:48:0::1;-1:-1:-1::0;;;;;41703:48:0;;;::::1;::::0;;;::::1;::::0;;41602:157::o;24207:32::-;;;;:::o;28779:313::-;28877:4;28894:36;28904:6;28912:9;28923:6;28894:9;:36::i;:::-;28941:121;28950:6;28958:12;:10;:12::i;:::-;28972:89;29010:6;28972:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28972:19:0;;;;;;:11;:19;;;;;;28992:12;:10;:12::i;:::-;-1:-1:-1;;;;;28972:33:0;;;;;;;;;;;;-1:-1:-1;28972:33:0;;;:89;:37;:89::i;:::-;28941:8;:121::i;:::-;-1:-1:-1;29080:4:0;28779:313;;;;;;:::o;52903:148::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;52999:21:::1;:44:::0;;-1:-1:-1;;;;;;52999:44:0::1;-1:-1:-1::0;;;;;52999:44:0;;;::::1;::::0;;;::::1;::::0;;52903:148::o;24718:44::-;;;-1:-1:-1;;;;;24718:44:0;;:::o;30866:253::-;30932:7;30971;;30960;:18;;30952:73;;;;-1:-1:-1;;;30952:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31036:19;31059:10;:8;:10::i;:::-;31036:33;-1:-1:-1;31087:24:0;:7;31036:33;31087:11;:24::i;:::-;31080:31;;;30866:253;;;;:::o;27873:94::-;24013:1;27873:94;:::o;31582:475::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31664:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31656:56;;;::::0;;-1:-1:-1;;;31656:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31728:9;31723:327;31747:9;:16:::0;31743:20;::::1;31723:327;;;31805:7;-1:-1:-1::0;;;;;31789:23:0::1;:9;31799:1;31789:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31789:12:0::1;:23;31785:254;;;31848:9;31858:16:::0;;-1:-1:-1;;31858:20:0;;;31848:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;31833:9:::1;:12:::0;;-1:-1:-1;;;;;31848:31:0;;::::1;::::0;31843:1;;31833:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31833:46:0::1;-1:-1:-1::0;;;;;31833:46:0;;::::1;;::::0;;31898:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;31937:11:::1;:20:::0;;;;:28;;-1:-1:-1;;31937:28:0::1;::::0;;31984:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;31984:15:0;;;;;-1:-1:-1;;;;;;31984:15:0::1;::::0;;;;;32018:5:::1;;31785:254;31765:3;;31723:327;;;;31582:475:::0;:::o;29100:218::-;29188:4;29205:83;29214:12;:10;:12::i;:::-;29228:7;29237:50;29276:10;29237:11;:25;29249:12;:10;:12::i;:::-;-1:-1:-1;;;;;29237:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;29237:25:0;;;:34;;;;;;;;;;;:38;:50::i;24023:26::-;;;;:::o;24665:46::-;;;-1:-1:-1;;;;;24665:46:0;;:::o;54580:659::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;54655:36:::1;54713:9;54655:68;;54897:1;-1:-1:-1::0;;;;;54790:109:0::1;54808:17;-1:-1:-1::0;;;;;54808:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;54808:27:0;54860:24:::1;::::0;;-1:-1:-1;;;54860:24:0;;;;-1:-1:-1;;;;;54790:54:0;;::::1;::::0;::::1;::::0;54853:4:::1;::::0;54860:22;;::::1;::::0;::::1;::::0;:24:::1;::::0;;::::1;::::0;54808:27:::1;::::0;54860:24;;;;;;;;:22;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;54860:24:0;54790:95:::1;::::0;;-1:-1:-1;;;;;;54790:95:0::1;::::0;;;;;;-1:-1:-1;;;;;54790:95:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;54860:24:::1;::::0;54790:95;;;;;;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;54790:95:0;-1:-1:-1;;;;;54790:109:0::1;;54786:400;;;54950:17;-1:-1:-1::0;;;;;54950:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;54950:27:0;55005:24:::1;::::0;;-1:-1:-1;;;55005:24:0;;;;-1:-1:-1;;;;;54932:57:0;;::::1;::::0;::::1;::::0;54998:4:::1;::::0;55005:22;;::::1;::::0;::::1;::::0;:24:::1;::::0;;::::1;::::0;54950:27:::1;::::0;55005:24;;;;;;;;:22;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;55005:24:0;54932:98:::1;::::0;;-1:-1:-1;;;;;;54932:98:0::1;::::0;;;;;;-1:-1:-1;;;;;54932:98:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;55005:24:::1;::::0;54932:98;;;;;;;-1:-1:-1;54932:98:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;54932:98:0;54916:13:::1;:114:::0;;-1:-1:-1;;;;;;54916:114:0::1;-1:-1:-1::0;;;;;54916:114:0;;::::1;::::0;;;::::1;::::0;;54786:400:::1;;;55097:17;-1:-1:-1::0;;;;;55097:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;55097:27:0;55149:24:::1;::::0;;-1:-1:-1;;;55149:24:0;;;;-1:-1:-1;;;;;55079:54:0;;::::1;::::0;::::1;::::0;55142:4:::1;::::0;55149:22;;::::1;::::0;::::1;::::0;:24:::1;::::0;;::::1;::::0;55097:27:::1;::::0;55149:24;;;;;;;;:22;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;55149:24:0;55079:95:::1;::::0;;-1:-1:-1;;;;;;55079:95:0::1;::::0;;;;;;-1:-1:-1;;;;;55079:95:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;55149:24:::1;::::0;55079:95;;;;;;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;55079:95:0;55063:13:::1;:111:::0;;-1:-1:-1;;;;;;55063:111:0::1;-1:-1:-1::0;;;;;55063:111:0;;::::1;::::0;;;::::1;::::0;;54786:400:::1;55196:15;:35:::0;;-1:-1:-1;;;;;;55196:35:0::1;-1:-1:-1::0;;;;;55196:35:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;54580:659:0:o;55251:567::-;55298:4;55315:21;55339:23;55349:12;:10;:12::i;:::-;55339:9;:23::i;:::-;55315:47;;55392:13;55381:7;:24;;55373:54;;;;;-1:-1:-1;;;55373:54:0;;;;;;;;;;;;-1:-1:-1;;;55373:54:0;;;;;;;;;;;;;;;55438:19;55461:10;:8;:10::i;:::-;55438:33;-1:-1:-1;55482:16:0;55501:24;:7;55438:33;55501:11;:24::i;:::-;55482:43;;55538:55;55553:12;:10;:12::i;:::-;55574:1;55577:7;55585:5;55591:1;55538:14;:55::i;:::-;55616:7;;:20;;55628:7;55616:11;:20::i;:::-;55606:7;:30;55657:7;;:21;;55669:8;55657:11;:21::i;:::-;55647:7;:31;55703:12;:10;:12::i;:::-;-1:-1:-1;;;;;55698:27:0;;55717:7;55698:27;;;;;;;;;;;;;;;;;;-1:-1:-1;55806:4:0;;55251:567;-1:-1:-1;;;;55251:567:0:o;33108:111::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33177:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;33177:34:0::1;33207:4;33177:34;::::0;;33108:111::o;53900:175::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;54039:13:::1;:28:::0;53900:175::o;24899:40::-;;;-1:-1:-1;;;24899:40:0;;;;;:::o;31127:447::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31324:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31323:21;31315:61;;;::::0;;-1:-1:-1;;;31315:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;31390:16:0;::::1;31409:1;31390:16:::0;;;:7:::1;:16;::::0;;;;;:20;31387:108:::1;;-1:-1:-1::0;;;;;31466:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31446:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31427:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31387:108:::1;-1:-1:-1::0;;;;;31505:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31505:27:0::1;31528:4;31505:27:::0;;::::1;::::0;;;31543:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31543:23:0::1;::::0;;::::1;::::0;;31127:447::o;41471:123::-;-1:-1:-1;;;;;41559:27:0;41535:4;41559:27;;;:18;:27;;;;;;;;;41471:123::o;53059:112::-;53142:21;;-1:-1:-1;;;;;53142:21:0;53059:112;:::o;53321:106::-;53401:18;;-1:-1:-1;;;;;53401:18:0;53321:106;:::o;24630:28::-;;;-1:-1:-1;;;;;24630:28:0;;:::o;53179:134::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;53272:21:::1;:33:::0;;-1:-1:-1;;;;;;53272:33:0::1;-1:-1:-1::0;;;;;53272:33:0;;;::::1;::::0;;;::::1;::::0;;53179:134::o;24106:32::-;;;;:::o;28078:198::-;-1:-1:-1;;;;;28168:20:0;;28144:7;28168:20;;;:11;:20;;;;;;;;28164:49;;;-1:-1:-1;;;;;;28197:16:0;;;;;;:7;:16;;;;;;28190:23;;28164:49;-1:-1:-1;;;;;28251:16:0;;;;;;:7;:16;;;;;;28231:37;;:19;:37::i;14570:148::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;14677:1:::1;14661:6:::0;;14640:40:::1;::::0;-1:-1:-1;;;;;14661:6:0;;::::1;::::0;14640:40:::1;::::0;14677:1;;14640:40:::1;14708:1;14691:19:::0;;-1:-1:-1;;;;;;14691:19:0::1;::::0;;14570:148::o;29826:451::-;29895:14;29912:12;:10;:12::i;:::-;-1:-1:-1;;;;;29944:19:0;;;;;;:11;:19;;;;;;29895:29;;-1:-1:-1;29944:19:0;;29943:20;29935:77;;;;-1:-1:-1;;;29935:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30024:25;;:::i;:::-;30055:28;30066:7;30075;30055:10;:28::i;:::-;-1:-1:-1;30112:10:0;;-1:-1:-1;;;;;30153:15:0;;30094;30153;;;:7;30112:10;30153:15;;;;;30023:60;;-1:-1:-1;30112:10:0;30153:28;;30112:10;30153:19;:28::i;:::-;-1:-1:-1;;;;;30135:15:0;;;;;;:7;:15;;;;;:46;30202:7;;:20;;30214:7;30202:11;:20::i;:::-;30192:7;:30;30246:10;;:23;;30261:7;30246:14;:23::i;:::-;30233:10;:36;-1:-1:-1;;;;;29826:451:0:o;24948:56::-;;;;:::o;24308:28::-;;;;:::o;30285:573::-;30391:7;30430;;30419;:18;;30411:62;;;;;-1:-1:-1;;;30411:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30489:17;30484:367;;30524:25;;:::i;:::-;30555:27;30566:7;30574;30555:10;:27::i;:::-;-1:-1:-1;30523:59:0;-1:-1:-1;30597:15:0;30523:59;30597:15;30615:10;;;;;;-1:-1:-1;30642:14:0;;-1:-1:-1;;30642:14:0;30484:367;30690:25;;:::i;:::-;30721:28;30732:7;30741;30721:10;:28::i;:::-;-1:-1:-1;30689:60:0;-1:-1:-1;30764:23:0;30689:60;30798:1;30790:10;;29603:120;-1:-1:-1;;;;;29695:20:0;29671:4;29695:20;;;:11;:20;;;;;;;;;29603:120::o;13927:79::-;13965:7;13992:6;-1:-1:-1;;;;;13992:6:0;13927:79;:::o;33498:175::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;33637:13:::1;:28:::0;33498:175::o;52514:116::-;52599:23;;-1:-1:-1;;;;;52599:23:0;52514:116;:::o;27778:87::-;27850:7;;;;;;;;;;;;-1:-1:-1;;;27850:7:0;;;;27778:87;:::o;52784:111::-;52866:21;;-1:-1:-1;;;;;52866:21:0;52784:111;:::o;53763:129::-;53855:29;;53763:129;:::o;24817:45::-;;;-1:-1:-1;;;;;24817:45:0;;:::o;29326:269::-;29419:4;29436:129;29445:12;:10;:12::i;:::-;29459:7;29468:96;29507:15;29468:96;;;;;;;;;;;;;;;;;:11;:25;29480:12;:10;:12::i;:::-;-1:-1:-1;;;;;29468:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;29468:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;28284:167::-;28362:4;28379:42;28389:12;:10;:12::i;:::-;28403:9;28414:6;28379:9;:42::i;53435:128::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;53525:18:::1;:30:::0;;-1:-1:-1;;;;;;53525:30:0::1;-1:-1:-1::0;;;;;53525:30:0;;;::::1;::::0;;;::::1;::::0;;53435:128::o;54083:161::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;54214:9:::1;:22:::0;54083:161::o;24397:27::-;;;;:::o;44941:417::-;45061:13;;45105;;;-1:-1:-1;;;45105:13:0;;;;45004:7;;-1:-1:-1;;;;;45061:13:0;;45004:7;;45061:13;;45105:11;;:13;;;;;;;;;;;;;;45061;45105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45105:13:0;45158:18;;;-1:-1:-1;;;45158:18:0;;;;45105:13;;-1:-1:-1;45127:12:0;;;;-1:-1:-1;;;;;45158:16:0;;;;;:18;;;;;;;;;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45158:18:0;;;;;;;;45227:17;;-1:-1:-1;;;45227:17:0;;;;45126:50;;;;;-1:-1:-1;45126:50:0;;;;;-1:-1:-1;45202:12:0;;-1:-1:-1;;;;;45227:15:0;;;;;:17;;;;;45158:18;45227:17;;;;;;:15;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45227:17:0;45223:2;:21;45217:28;;;-1:-1:-1;45259:32:0;45286:4;45260:20;:10;45217:28;45260:14;:20::i;:::-;45259:26;;:32::i;:::-;45252:40;44941:417;-1:-1:-1;;;;;;;44941:417:0:o;33803:171::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;33880:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;33880:32:0;::::1;-1:-1:-1::0;;;;33880:32:0;;::::1;::::0;;;::::1;::::0;;;33928:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;33803:171:::0;:::o;54252:150::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;54376:8:::1;:18:::0;54252:150::o;33681:114::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;33760:12:::1;:27:::0;33681:114::o;28459:143::-;-1:-1:-1;;;;;28567:18:0;;;28540:7;28567:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28459:143::o;37506:109::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;37582:13:::1;:25:::0;;-1:-1:-1;;;;;;37582:25:0::1;-1:-1:-1::0;;;;;37582:25:0;;;::::1;::::0;;;::::1;::::0;;37506:109::o;33227:110::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33294:27:0::1;33324:5;33294:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33294:35:0::1;::::0;;33227:110::o;53571:184::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;53685:29:::1;:62:::0;53571:184::o;14873:244::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14962:22:0;::::1;14954:73;;;;-1:-1:-1::0;;;14954:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15064:6;::::0;;15043:38:::1;::::0;-1:-1:-1;;;;;15043:38:0;;::::1;::::0;15064:6;::::1;::::0;15043:38:::1;::::0;::::1;15092:6;:17:::0;;-1:-1:-1;;;;;;15092:17:0::1;-1:-1:-1::0;;;;;15092:17:0;;;::::1;::::0;;;::::1;::::0;;14873:244::o;54410:162::-;14149:12;:10;:12::i;:::-;14139:6;;-1:-1:-1;;;;;14139:6:0;;;:22;;;14131:67;;;;;-1:-1:-1;;;14131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14131:67:0;;;;;;;;;;;;;;;54541:11:::1;:23:::0;54410:162::o;7498:106::-;7586:10;7498:106;:::o;41767:337::-;-1:-1:-1;;;;;41860:19:0;;41852:68;;;;-1:-1:-1;;;41852:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41939:21:0;;41931:68;;;;-1:-1:-1;;;41931:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42012:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;42064:32;;;;;;;;;;;;;;;;;41767:337;;;:::o;42112:2778::-;-1:-1:-1;;;;;42234:18:0;;42226:68;;;;-1:-1:-1;;;42226:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42313:16:0;;42305:64;;;;-1:-1:-1;;;42305:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42397:1;42388:6;:10;42380:64;;;;-1:-1:-1;;;42380:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42468:7;:5;:7::i;:::-;-1:-1:-1;;;;;42460:15:0;:4;-1:-1:-1;;;;;42460:15:0;;;:32;;;;;42485:7;:5;:7::i;:::-;-1:-1:-1;;;;;42479:13:0;:2;-1:-1:-1;;;;;42479:13:0;;;42460:32;42457:139;;;42527:12;;42517:6;:22;;42509:75;;;;-1:-1:-1;;;42509:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42892:28;42923:24;42941:4;42923:9;:24::i;:::-;42892:55;;42987:12;;42963:20;:36;42960:112;;-1:-1:-1;43048:12:0;;42960:112;43135:29;;43111:53;;;;;;;43193;;-1:-1:-1;43230:16:0;;-1:-1:-1;;;43230:16:0;;;;43229:17;43193:53;:91;;;;-1:-1:-1;43271:13:0;;-1:-1:-1;;;;;43263:21:0;;;43271:13;;43263:21;;43193:91;:129;;;;-1:-1:-1;43301:21:0;;-1:-1:-1;;;43301:21:0;;;;43193:129;43175:318;;;43372:29;;43349:52;;43445:36;43460:20;43445:14;:36::i;:::-;-1:-1:-1;;;;;43685:24:0;;43566:12;43685:24;;;:18;:24;;;;;;43581:4;;43685:24;;;:50;;-1:-1:-1;;;;;;43713:22:0;;;;;;:18;:22;;;;;;;;43685:50;43682:96;;;-1:-1:-1;43761:5:0;43682:96;43811:7;;43864;:30;;;;-1:-1:-1;43881:13:0;;-1:-1:-1;;;;;43875:19:0;;;43881:13;;43875:19;43864:30;43861:864;;;43922:16;43936:1;43922:13;:16::i;:::-;43912:6;:26;43909:805;;-1:-1:-1;43976:7:0;;43909:805;;;44030:16;44044:1;44030:13;:16::i;:::-;44021:6;:25;:55;;;;;44060:16;44074:1;44060:13;:16::i;:::-;44050:6;:26;;44021:55;44018:696;;;-1:-1:-1;44111:1:0;44018:696;;;44164:16;44178:1;44164:13;:16::i;:::-;44155:6;:25;:55;;;;;44194:16;44208:1;44194:13;:16::i;:::-;44184:6;:26;;44155:55;44152:562;;;-1:-1:-1;44245:1:0;44152:562;;;44298:16;44312:1;44298:13;:16::i;:::-;44289:6;:25;:55;;;;;44328:16;44342:1;44328:13;:16::i;:::-;44318:6;:26;;44289:55;44286:428;;;-1:-1:-1;44379:1:0;44286:428;;;44432:16;44446:1;44432:13;:16::i;:::-;44423:6;:25;:55;;;;;44462:16;44476:1;44462:13;:16::i;:::-;44452:6;:26;;44423:55;44420:294;;;-1:-1:-1;44513:1:0;44420:294;;;44566:16;44580:1;44566:13;:16::i;:::-;44557:6;:25;44554:160;;;-1:-1:-1;44617:1:0;44554:160;;;-1:-1:-1;44691:7:0;;44554:160;44819:51;44834:4;44839:2;44842:6;44849:7;44857:12;44819:14;:51::i;:::-;42112:2778;;;;;;;:::o;3908:192::-;3994:7;4030:12;4022:6;;;;4014:29;;;;-1:-1:-1;;;4014:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4066:5:0;;;3908:192::o;36771:163::-;36812:7;36833:15;36850;36869:19;:17;:19::i;:::-;36832:56;;-1:-1:-1;36832:56:0;-1:-1:-1;36906:20:0;36832:56;;36906:11;:20::i;:::-;36899:27;;;;36771:163;:::o;5306:132::-;5364:7;5391:39;5395:1;5398;5391:39;;;;;;;;;;;;;;;;;:3;:39::i;3005:181::-;3063:7;3095:5;;;3119:6;;;;3111:46;;;;;-1:-1:-1;;;3111:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4359:471;4417:7;4662:6;4658:47;;-1:-1:-1;4692:1:0;4685:8;;4658:47;4729:5;;;4733:1;4729;:5;:1;4753:5;;;;;:10;4745:56;;;;-1:-1:-1;;;4745:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47550:1011;47678:7;47677:8;:34;;;-1:-1:-1;47690:21:0;;-1:-1:-1;;;47690:21:0;;;;47689:22;47677:34;47674:105;;;47727:14;:12;:14::i;:::-;-1:-1:-1;47766:1:0;47674:105;-1:-1:-1;;;;;47809:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;47833:22:0;;;;;;:11;:22;;;;;;;;47832:23;47809:46;47805:643;;;47872:57;47894:6;47902:9;47913:6;47921:7;47872:21;:57::i;:::-;47805:643;;;-1:-1:-1;;;;;47952:19:0;;;;;;:11;:19;;;;;;;;47951:20;:46;;;;-1:-1:-1;;;;;;47975:22:0;;;;;;:11;:22;;;;;;;;47951:46;47947:501;;;48014:56;48034:6;48042:9;48053:6;48062:7;48014:19;:56::i;47947:501::-;-1:-1:-1;;;;;48093:19:0;;;;;;:11;:19;;;;;;;;48092:20;:47;;;;-1:-1:-1;;;;;;48117:22:0;;;;;;:11;:22;;;;;;;;48116:23;48092:47;48088:360;;;48156:53;48174:6;48182:9;48193:6;48201:7;48156:17;:53::i;48088:360::-;-1:-1:-1;;;;;48231:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;48254:22:0;;;;;;:11;:22;;;;;;;;48231:45;48227:221;;;48293:57;48315:6;48323:9;48334:6;48342:7;48293:21;:57::i;48227:221::-;48383:53;48401:6;48409:9;48420:6;48428:7;48383:17;:53::i;:::-;48464:7;48463:8;:34;;;-1:-1:-1;48476:21:0;;-1:-1:-1;;;48476:21:0;;;;48475:22;48463:34;48460:80;;;48513:15;:13;:15::i;:::-;47550:1011;;;;;:::o;3469:136::-;3527:7;3554:43;3558:1;3561;3554:43;;;;;;;;;;;;;;;;;:3;:43::i;34305:371::-;34381:17;;:::i;:::-;34400;;:::i;:::-;34430:25;;:::i;:::-;34458:29;34470:7;34479;34458:11;:29::i;:::-;34430:57;;34498:25;;:::i;:::-;34547:10;;;;34559;;;;34571;;;;34583;;;;34595;;;;34607;;;;34526:104;;34538:7;;34547:10;;34559;;34571;;34583;;34619;:8;:10::i;:::-;34526:11;:104::i;:::-;34498:132;34660:7;;-1:-1:-1;34305:371:0;;-1:-1:-1;;;;34305:371:0:o;45366:981::-;25461:16;:23;;-1:-1:-1;;;;25461:23:0;-1:-1:-1;;;25461:23:0;;;;45517:27:::1;:20:::0;45542:1:::1;45517:24;:27::i;:::-;45502:42:::0;-1:-1:-1;45555:17:0::1;45575:30;:20:::0;45502:42;45575:24:::1;:30::i;:::-;45555:50:::0;-1:-1:-1;45908:21:0::1;45974:22;45991:4:::0;45974:16:::1;:22::i;:::-;46127:18;46148:41;:21;46174:14:::0;46148:25:::1;:41::i;:::-;46127:62;;46243:35;46256:9;46267:10;46243:12;:35::i;:::-;46296:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;25507:16:0;:24;;-1:-1:-1;;;;25507:24:0;;;-1:-1:-1;;;45366:981:0:o;36942:555::-;37039:7;;37075;;36992;;;;;37093:289;37117:9;:16;37113:20;;37093:289;;;37183:7;37159;:21;37167:9;37177:1;37167:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37167:12:0;37159:21;;;;;;;;;;;;;:31;;:66;;;37218:7;37194;:21;37202:9;37212:1;37202:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37202:12:0;37194:21;;;;;;;;;;;;;:31;37159:66;37155:97;;;37235:7;;37244;;37227:25;;;;;;;;;37155:97;37277:34;37289:7;:21;37297:9;37307:1;37297:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37297:12:0;37289:21;;;;;;;;;;;;;37277:7;;:11;:34::i;:::-;37267:44;;37336:34;37348:7;:21;37356:9;37366:1;37356:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37356:12:0;37348:21;;;;;;;;;;;;;37336:7;;:11;:34::i;:::-;37326:44;-1:-1:-1;37135:3:0;;37093:289;;;-1:-1:-1;37418:7:0;;37406;;:20;;:11;:20::i;:::-;37396:7;:30;37392:61;;;37436:7;;37445;;37428:25;;;;;;;;37392:61;37472:7;;-1:-1:-1;37481:7:0;-1:-1:-1;36942:555:0;;;:::o;5934:278::-;6020:7;6055:12;6048:5;6040:28;;;;-1:-1:-1;;;6040:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6079:9;6095:1;6091;:5;;;;;;;5934:278;-1:-1:-1;;;;;5934:278:0:o;40578:582::-;40624:7;;:12;:34;;;;-1:-1:-1;40640:13:0;;:18;40624:34;:56;;;;-1:-1:-1;40662:13:0;;:18;40624:56;:73;;;;-1:-1:-1;40684:8:0;;:13;40624:73;:93;;;;-1:-1:-1;40701:11:0;;:16;40624:93;:111;;;;-1:-1:-1;40721:9:0;;:14;40624:111;40621:123;;;40737:7;;40621:123;40774:7;;;40756:15;:25;40816:13;;;40792:21;:37;40864:13;;;40840:21;:37;40910:11;;;40888:19;:33;40951:8;;;40932:16;:27;40990:9;;;40970:17;:29;-1:-1:-1;41012:11:0;;;;41034:17;;;;41062;;;;41090:15;;;41116:12;;;41139:13;40578:582;:::o;50922:982::-;51042:25;;:::i;:::-;51069;;:::i;:::-;51099:28;51110:7;51119;51099:10;:28::i;:::-;51156:10;;;51203;;;;51239;;;;;51286;;51322;;;;51364;;;;51406;;;;51443;;;;51483;;;;51041:86;;-1:-1:-1;51041:86:0;;-1:-1:-1;51156:10:0;;51203;;51239;;51322;;51364;;51406;51443;51509:31;51524:6;51532:7;51509:14;:31::i;:::-;51551;51566:6;51574:7;51551:14;:31::i;:::-;51593:42;51608:9;51619:15;51593:14;:42::i;:::-;51646:26;51661:10;51646:14;:26::i;:::-;51683;51698:10;51683:14;:26::i;:::-;51720:16;51730:5;51720:9;:16::i;:::-;51747:22;51760:8;51747:12;:22::i;:::-;51791:10;;;;51780:22;;:10;:22::i;:::-;51813:23;51825:4;51831;51813:11;:23::i;:::-;51869:9;-1:-1:-1;;;;;51852:44:0;51861:6;-1:-1:-1;;;;;51852:44:0;;51880:15;51852:44;;;;;;;;;;;;;;;;;;50922:982;;;;;;;;;;;;;;;:::o;49512:1402::-;49630:25;;:::i;:::-;49657;;:::i;:::-;49687:28;49698:7;49707;49687:10;:28::i;:::-;49744:10;;;49791;;;;49827;;;;;49874;;49910;;;;49952;;;;49994;;;;50031;;;;50071;;;;49629:86;;-1:-1:-1;49629:86:0;;-1:-1:-1;49744:10:0;;49791;;49827;;49910;;49952;;49994;50031;50358:31;50373:6;49744:10;50358:14;:31::i;:::-;50400:42;50415:9;50426:15;50400:14;:42::i;48569:935::-;48685:25;;:::i;:::-;48712;;:::i;:::-;48742:28;48753:7;48762;48742:10;:28::i;:::-;48799:10;;;48846;;;;48882;;;;;48929;;48965;;;;49007;;;;49049;;;;49086;;;;49126;;;;48684:86;;-1:-1:-1;48684:86:0;;-1:-1:-1;48799:10:0;;48846;;48882;;48965;;49007;;49049;49086;49151:31;49166:6;48799:10;49151:14;:31::i;32065:1035::-;32184:25;;:::i;:::-;32211;;:::i;:::-;32241:28;32252:7;32261;32241:10;:28::i;:::-;32298:10;;;32345;;;;32381;;;;;32428;;32464;;;;32506;;;;32548;;;;32585;;;;32625;;;;32183:86;;-1:-1:-1;32183:86:0;;-1:-1:-1;32298:10:0;;32345;;32381;;32464;;32506;;32548;32585;32650:31;32665:6;32298:10;32650:14;:31::i;:::-;32692;32707:6;32715:7;32692:14;:31::i;41168:295::-;41222:15;;41212:7;:25;41264:21;;41248:13;:37;41312:21;;41296:13;:37;41358:19;;41344:11;:33;41399:16;;41388:8;:27;41438:17;;41426:9;:29;41168:295::o;34684:418::-;34761:17;;:::i;:::-;34791:25;;:::i;:::-;:215;;;;;;;;34820:1;34791:215;;;;34823:33;34839:7;34848;34823:15;:33::i;:::-;34791:215;;;;34858:30;34880:7;34858:21;:30::i;:::-;34791:215;;;;34890:30;34912:7;34890:21;:30::i;:::-;34791:215;;;;34922:25;34939:7;34922:16;:25::i;:::-;34791:215;;;;34949:28;34969:7;34949:19;:28::i;:::-;34791:215;;;;34979:26;34997:7;34979:17;:26::i;:::-;34791:215;;;-1:-1:-1;35030:37:0;35050:7;34791:215;35030:19;:37::i;:::-;35017:50;;:7;35087;-1:-1:-1;;;34684:418:0:o;35110:1092::-;35294:17;;:::i;:::-;35324:15;35342:24;:7;35354:11;35342;:24::i;:::-;35324:42;-1:-1:-1;35377:12:0;35392:21;:4;35401:11;35392:8;:21::i;:::-;35377:36;-1:-1:-1;35424:18:0;35445:27;:10;35460:11;35445:14;:27::i;:::-;35424:48;-1:-1:-1;35483:18:0;35504:27;:10;35519:11;35504:14;:27::i;:::-;35483:48;-1:-1:-1;35542:13:0;35558:22;:5;35568:11;35558:9;:22::i;:::-;35542:38;-1:-1:-1;35591:15:0;35609:25;:8;35622:11;35609:12;:25::i;:::-;35591:43;-1:-1:-1;35645:16:0;35664:23;:6;35675:11;35664:10;:23::i;:::-;35645:42;;35700:29;;:::i;:::-;:97;;;;;;;;35733:7;35700:97;;;;35742:10;35700:97;;;;35754:4;35700:97;;;;35760:10;35700:97;;;;35772:5;35700:97;;;;35779:7;35700:97;;;;35788:8;35700:97;;;;;36037:25;;:::i;:::-;:77;;;;;;;;36066:7;36037:77;;;;36075:32;36095:11;36075:19;:32::i;:::-;36037:77;;;;;;;;-1:-1:-1;36037:77:0;;-1:-1:-1;;;;;;;;35110:1092:0;;;;;;;;;;:::o;46355:593::-;46509:16;;;46523:1;46509:16;;;46485:21;46509:16;;;;;46485:21;46509:16;;;;;;;;;;-1:-1:-1;46509:16:0;46485:40;;46554:4;46536;46541:1;46536:7;;;;;;;;-1:-1:-1;;;;;46536:23:0;;;:7;;;;;;;;;;:23;;;;46580:15;;:22;;;-1:-1:-1;;;46580:22:0;;;;:15;;;;;:20;;:22;;;;;46536:7;;46580:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46580:22:0;46570:7;;:4;;46575:1;;46570:7;;;;;;-1:-1:-1;;;;;46570:32:0;;;:7;;;;;;;;;:32;46647:15;;46615:62;;46632:4;;46647:15;46665:11;46615:8;:62::i;:::-;46716:15;;:224;;-1:-1:-1;;;46716:224:0;;;;;;;;:15;:224;;;;;;46894:4;46716:224;;;;;;46914:15;46716:224;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46716:15:0;;;;:66;;46797:11;;46867:4;;46894;46914:15;46716:224;;;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46355:593;;:::o;46956:513::-;47136:15;;47104:62;;47121:4;;-1:-1:-1;;;;;47136:15:0;47154:11;47104:8;:62::i;:::-;47209:15;;-1:-1:-1;;;;;47209:15:0;:31;47248:9;47281:4;47301:11;47209:15;;47413:7;:5;:7::i;:::-;47435:15;47209:252;;;;;;;;;;;;;-1:-1:-1;;;;;47209:252:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47209:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;46956:513:0:o;51912:130::-;-1:-1:-1;;;;;52006:15:0;;;;;;:7;:15;;;;;;:28;;52026:7;52006:19;:28::i;:::-;-1:-1:-1;;;;;51988:15:0;;;;;;;:7;:15;;;;;:46;;;;-1:-1:-1;51912:130:0:o;52050:::-;-1:-1:-1;;;;;52144:15:0;;;;;;:7;:15;;;;;;:28;;52164:7;52144:19;:28::i;:::-;-1:-1:-1;;;;;52126:15:0;;;;;;;:7;:15;;;;;:46;;;;-1:-1:-1;52050:130:0:o;52188:155::-;-1:-1:-1;;;;;52296:18:0;;;;;;:7;:18;;;;;;:39;;52319:15;52296:22;:39::i;37623:355::-;37686:19;37709:10;:8;:10::i;:::-;37686:33;-1:-1:-1;37730:18:0;37751:27;:10;37686:33;37751:14;:27::i;:::-;37830:4;37814:22;;;;:7;:22;;;;;;37730:48;;-1:-1:-1;37814:38:0;;37730:48;37814:26;:38::i;:::-;37805:4;37789:22;;;;:7;:22;;;;;;;;:63;;;;37866:11;:26;;;;;;37863:107;;;37948:4;37932:22;;;;:7;:22;;;;;;:38;;37959:10;37932:26;:38::i;:::-;37923:4;37907:22;;;;:7;:22;;;;;:63;37863:107;37623:355;;;:::o;37986:405::-;38049:19;38072:10;:8;:10::i;:::-;38049:33;-1:-1:-1;38093:18:0;38114:27;:10;38049:33;38114:14;:27::i;:::-;38195:23;;-1:-1:-1;;;;;38195:23:0;38187:32;;;;:7;:32;;;;;;38093:48;;-1:-1:-1;38187:48:0;;38093;38187:36;:48::i;:::-;38160:23;;;-1:-1:-1;;;;;38160:23:0;;;38152:32;;;;:7;:32;;;;;;;;:83;;;;38261:23;;;;;38249:36;;:11;:36;;;;;;;38246:137;;;38343:23;;-1:-1:-1;;;;;38343:23:0;38335:32;;;;:7;:32;;;;;;:48;;38372:10;38335:36;:48::i;:::-;38308:23;;-1:-1:-1;;;;;38308:23:0;38300:32;;;;:7;:32;;;;;:83;37986:405;;;:::o;38399:363::-;38452:19;38475:10;:8;:10::i;:::-;38452:33;-1:-1:-1;38496:13:0;38512:22;:5;38452:33;38512:9;:22::i;:::-;38583:18;;-1:-1:-1;;;;;38583:18:0;38575:27;;;;:7;:27;;;;;;38496:38;;-1:-1:-1;38575:38:0;;38496;38575:31;:38::i;:::-;38553:18;;;-1:-1:-1;;;;;38553:18:0;;;38545:27;;;;:7;:27;;;;;;;;:68;;;;38639:18;;;;;38627:31;;:11;:31;;;;;;;38624:131;;;38713:18;;-1:-1:-1;;;;;38713:18:0;38705:27;;;;:7;:27;;;;;;:38;;38737:5;38705:31;:38::i;:::-;38683:18;;-1:-1:-1;;;;;38683:18:0;38675:27;;;;:7;:27;;;;;:68;38399:363;;;:::o;38770:381::-;38829:19;38852:10;:8;:10::i;:::-;38829:33;-1:-1:-1;38873:15:0;38891:25;:8;38829:33;38891:12;:25::i;:::-;38968:21;;-1:-1:-1;;;;;38968:21:0;38960:30;;;;:7;:30;;;;;;38873:43;;-1:-1:-1;38960:43:0;;38873;38960:34;:43::i;:::-;38935:21;;;-1:-1:-1;;;;;38935:21:0;;;38927:30;;;;:7;:30;;;;;;;;:76;;;;39029:21;;;;;39017:34;;:11;:34;;;;;;;39014:129;;;39107:21;;-1:-1:-1;;;;;39107:21:0;39099:30;;;;:7;:30;;;;;;:44;;39134:8;39099:34;:44::i;:::-;39074:21;;-1:-1:-1;;;;;39074:21:0;39066:30;;;;:7;:30;;;;;:77;38770:381;;;:::o;39159:380::-;39214:19;39237:10;:8;:10::i;:::-;39214:33;-1:-1:-1;39258:16:0;39277:23;:6;39214:33;39277:10;:23::i;:::-;39354:21;;-1:-1:-1;;;;;39354:21:0;39345:31;;;;:7;:31;;;;;;39258:42;;-1:-1:-1;39345:45:0;;39258:42;39345:35;:45::i;:::-;39320:21;;;-1:-1:-1;;;;;39320:21:0;;;39311:31;;;;:7;:31;;;;;;;;:79;;;;39417:21;;;;;39404:35;;:11;:35;;;;;;;39401:130;;;39497:21;;-1:-1:-1;;;;;39497:21:0;39488:31;;;;:7;:31;;;;;;:43;;39524:6;39488:35;:43::i;:::-;39463:21;;-1:-1:-1;;;;;39463:21:0;39454:31;;;;:7;:31;;;;;:77;39159:380;;;:::o;34077:220::-;34214:7;;:17;;34226:4;34214:11;:17::i;:::-;34204:7;:27;34259:10;;:20;;34274:4;34259:14;:20::i;:::-;34246:10;:33;-1:-1:-1;;34077:220:0:o;52351:155::-;-1:-1:-1;;;;;52459:18:0;;;;;;:7;:18;;;;;;:39;;52482:15;52459:22;:39::i;39547:171::-;39628:7;39655:55;39694:5;39655:20;:7;39667;39655:11;:20::i;39726:166::-;39796:7;39823:61;39868:5;39823:26;39835:13;;39823:7;:11;;:26;;;;:::i;39900:166::-;39970:7;39997:61;40042:5;39997:26;40009:13;;39997:7;:11;;:26;;;;:::i;40074:156::-;40139:7;40166:56;40206:5;40166:21;40178:8;;40166:7;:11;;:21;;;;:::i;40238:162::-;40306:7;40333:59;40376:5;40333:24;40345:11;;40333:7;:11;;:24;;;;:::i;40408:158::-;40474:7;40501:57;40542:5;40501:22;40513:9;;40501:7;:11;;:22;;;;:::i;36210:327::-;36304:7;36426:103;36518:7;36526:1;36518:10;;;;36426:87;36502:7;36510:1;36502:10;;;;36426:71;36486:7;36494:1;36486:10;;;;36426:55;36470:7;36478:1;36470:10;;;;36426:39;36454:7;36462:1;36454:10;;;;36426:23;36438:7;36446:1;36438:10;;;;36426:7;;:11;:23::i;:::-;:27;;:39::i;36545:218::-;36744:10;;;;36728;;;;36712;;;;36696;;;;36744;36680;;;36664;;;;36649;;36622:7;;36649:106;;36744:10;;36649:90;;36728:10;;36649:90;;36712:10;;36649:90;;36696:10;36649:90;;36680:10;36649:90;;:14;:26::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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