Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 11 from a total of 11 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 14643647 | 1420 days ago | IN | 0 ETH | 0.00133734 | ||||
| Approve | 14632512 | 1422 days ago | IN | 0 ETH | 0.00215434 | ||||
| Set Sell Fee | 14632503 | 1422 days ago | IN | 0 ETH | 0.00141596 | ||||
| Set Sell Fee | 14632500 | 1422 days ago | IN | 0 ETH | 0.00128928 | ||||
| Approve | 14632499 | 1422 days ago | IN | 0 ETH | 0.00198029 | ||||
| Approve | 14632489 | 1422 days ago | IN | 0 ETH | 0.00165016 | ||||
| Exclude From Rew... | 14631700 | 1422 days ago | IN | 0 ETH | 0.02196345 | ||||
| Exclude From Lim... | 14631697 | 1422 days ago | IN | 0 ETH | 0.00763708 | ||||
| Exclude From Fee | 14631690 | 1422 days ago | IN | 0 ETH | 0.00713728 | ||||
| Transfer Ownersh... | 14631688 | 1422 days ago | IN | 0 ETH | 0.00490995 | ||||
| Transfer | 14631676 | 1422 days ago | IN | 0 ETH | 0.01074593 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DOGEBORG
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-04-22
*/
/**
*Submitted for verification at Etherscan.io on 2022-04-19
*/
pragma solidity ^0.8.10;
// 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 Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return payable(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;
}
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly {
codehash := extcodehash(account)
}
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{value: amount}("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data)
internal
returns (bytes memory)
{
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
value,
"Address: low-level call with value failed"
);
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(
address(this).balance >= value,
"Address: insufficient balance for call"
);
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(
address target,
bytes memory data,
uint256 weiValue,
string memory errorMessage
) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{value: weiValue}(
data
);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract Ownable is Context {
address private _owner;
address private _previousOwner;
uint256 private _lockTime;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
function geUnlockTime() public view returns (uint256) {
return _lockTime;
}
//Locks the contract for owner for the amount of time provided
function lock(uint256 time) public virtual onlyOwner {
_previousOwner = _owner;
_owner = address(0);
_lockTime = block.timestamp + time;
emit OwnershipTransferred(_owner, address(0));
}
//Unlocks the contract for owner when _lockTime is exceeds
function unlock() public virtual {
require(
_previousOwner == msg.sender,
"You don't have permission to unlock"
);
require(block.timestamp > _lockTime, "Contract is locked until a later date");
emit OwnershipTransferred(_owner, _previousOwner);
_owner = _previousOwner;
_previousOwner = address(0);
}
}
/**
* @title TokenRecover
* @author Vittorio Minacori (https://github.com/vittominacori)
* @dev Allows owner to recover any ERC20 sent into the contract
*/
contract TokenRecover is Ownable {
using Address for address payable;
/**
* @dev Remember that only owner can call so be careful when use on contracts generated from other contracts.
* @param tokenAddress The token contract address
* @param tokenAmount Number of tokens to be sent
*/
function recoverERC20(address tokenAddress, uint256 tokenAmount) public virtual onlyOwner {
IERC20(tokenAddress).transfer(owner(), tokenAmount);
}
function recoverETH(address account, uint256 amount) public virtual onlyOwner {
payable(account).sendValue(amount);
}
}
// pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
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(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
// pragma solidity >=0.5.0;
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 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 (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
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 (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 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 IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external
view
returns (uint256[] memory amounts);
}
// pragma solidity >=0.6.2;
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
contract DOGEBORG is Context, IERC20, Ownable, TokenRecover {
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;
mapping(address => bool) private _isBlackListedBot;
mapping(address => bool) private _isExcludedFromLimit;
address[] private _blackListedBots;
uint256 private constant MAX = ~uint256(0);
uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
uint256 private _rTotal = (MAX - (MAX % _tTotal));
uint256 private _tFeeTotal;
string private _name = "DOGEBORG";
string private _symbol = "DOGEBORG";
uint8 private _decimals = 9;
uint8 private buyFeetax;
uint8 private buyFeeliquidity;
uint8 private sellFeetax;
uint8 private sellFeeliquidity;
uint8 private _taxFee;
uint8 private _liquidityFee;
IUniswapV2Router02 public uniswapV2Router;
address public uniswapV2Pair;
bool inSwapAndLiquify;
bool public swapAndLiquifyEnabled = true;
uint256 public _maxTxAmount = 1000000000 * 10**6 * 10**9;
uint256 private numTokensSellToAddToLiquidity = 500000 * 10**6 * 10**9;
uint256 public _maxWalletSize = 1 * 10**13 * 10**9;
event botAddedToBlacklist(address account);
event botRemovedFromBlacklist(address account);
event SwapAndLiquifyEnabledUpdated(bool enabled);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
modifier lockTheSwap() {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
constructor() {
_rOwned[_msgSender()] = _rTotal;
buyFeetax = 2;
buyFeeliquidity = 8;
sellFeetax = 2;
sellFeeliquidity = 8;
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
// Create a uniswap pair for this new token
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
// set the rest of the contract variables
uniswapV2Router = _uniswapV2Router;
// exclude owner, dev wallet, and this contract from fee
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
_isExcludedFromLimit[owner()] = true;
_isExcludedFromLimit[address(this)] = true;
emit Transfer(address(0), _msgSender(), _tTotal);
}
function setRouterAddress(address payable newRouter) external onlyOwner {
require(newRouter != address(uniswapV2Router), "The router already has that address");
IUniswapV2Router02 _newUniswapRouter = IUniswapV2Router02(newRouter);
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), _newUniswapRouter.WETH());
uniswapV2Router = _newUniswapRouter;
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
if (_isExcluded[account]) return _tOwned[account];
return tokenFromReflection(_rOwned[account]);
}
function transfer(address recipient, uint256 amount)
public
override
returns (bool)
{
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender)
public
view
override
returns (uint256)
{
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount)
public
override
returns (bool)
{
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(
sender,
_msgSender(),
_allowances[sender][_msgSender()].sub(
amount,
"ERC20: transfer amount exceeds allowance"
)
);
return true;
}
function increaseAllowance(address spender, uint256 addedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender].add(addedValue)
);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender].sub(
subtractedValue,
"ERC20: decreased allowance below zero"
)
);
return true;
}
function isExcludedFromReward(address account) public view returns (bool) {
return _isExcluded[account];
}
function totalFees() public view returns (uint256) {
return _tFeeTotal;
}
function deliver(uint256 tAmount) public {
address sender = _msgSender();
require(
!_isExcluded[sender],
"Excluded addresses cannot call this function"
);
(
,
uint256 tFee,
uint256 tLiquidity
) = _getTValues(tAmount);
(uint256 rAmount, , ) = _getRValues(
tAmount,
tFee,
tLiquidity,
_getRate()
);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rTotal = _rTotal.sub(rAmount);
_tFeeTotal = _tFeeTotal.add(tAmount);
}
function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
public
view
returns (uint256)
{
require(tAmount <= _tTotal, "Amount must be less than supply");
(
,
uint256 tFee,
uint256 tLiquidity
) = _getTValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, ) = _getRValues(
tAmount,
tFee,
tLiquidity,
_getRate()
);
if (!deductTransferFee) {
return rAmount;
} else {
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 addBotToBlacklist(address account) external onlyOwner {
require(
account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,
"We cannot blacklist UniSwap router"
);
require(!_isBlackListedBot[account], "Account is already blacklisted");
_isBlackListedBot[account] = true;
_blackListedBots.push(account);
emit botAddedToBlacklist(account);
}
function isBotBlacklisted(address account) public view returns(bool) {
return _isBlackListedBot[account];
}
function removeBotFromBlacklist(address account) external onlyOwner {
require(_isBlackListedBot[account], "Account is not blacklisted");
for (uint256 i = 0; i < _blackListedBots.length; i++) {
if (_blackListedBots[i] == account) {
_blackListedBots[i] = _blackListedBots[
_blackListedBots.length - 1
];
_isBlackListedBot[account] = false;
_blackListedBots.pop();
break;
}
}
emit botRemovedFromBlacklist(account);
}
function excludeFromReward(address account) public onlyOwner {
require(!_isExcluded[account], "Account is already excluded");
if (_rOwned[account] > 0) {
_tOwned[account] = tokenFromReflection(_rOwned[account]);
}
_isExcluded[account] = true;
_excluded.push(account);
}
function 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 excludeFromFee(address account) public onlyOwner {
_isExcludedFromFee[account] = true;
}
function includeInFee(address account) public onlyOwner {
_isExcludedFromFee[account] = false;
}
function excludeFromLimit(address account) public onlyOwner {
_isExcludedFromLimit[account] = true;
}
function includeInLimit(address account) public onlyOwner {
_isExcludedFromLimit[account] = false;
}
function setSellFee(
uint8 tax,
uint8 liquidity
) external onlyOwner {
sellFeetax = tax;
sellFeeliquidity = liquidity;
}
function setBuyFee(
uint8 tax,
uint8 liquidity
) external onlyOwner {
buyFeetax = tax;
buyFeeliquidity = liquidity;
}
function setBothFees(
uint8 buy_tax,
uint8 buy_liquidity,
uint8 sell_tax,
uint8 sell_liquidity
) external onlyOwner {
buyFeetax = buy_tax;
buyFeeliquidity = buy_liquidity;
sellFeetax = sell_tax;
sellFeeliquidity = sell_liquidity;
}
function setNumTokensSellToAddToLiquidity(uint256 numTokens) external onlyOwner {
numTokensSellToAddToLiquidity = numTokens;
}
function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner {
_maxTxAmount = _tTotal.mul(maxTxPercent).div(10**2);
}
function _setMaxWalletSizePercent(uint256 maxWalletSize)
external
onlyOwner
{
_maxWalletSize = _tTotal.mul(maxWalletSize).div(10**2);
}
function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
swapAndLiquifyEnabled = _enabled;
emit SwapAndLiquifyEnabledUpdated(_enabled);
}
//to receive ETH from uniswapV2Router when swapping
receive() external payable {}
function _reflectFee(uint256 rFee, uint256 tFee) private {
_rTotal = _rTotal.sub(rFee);
_tFeeTotal = _tFeeTotal.add(tFee);
}
function _getTValues(uint256 tAmount)
private
view
returns (
uint256,
uint256,
uint256
)
{
uint256 tFee = calculateTaxFee(tAmount);
uint256 tLiquidity = calculateLiquidityFee(tAmount);
uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
return (tTransferAmount, tFee, tLiquidity);
}
function _getRValues(
uint256 tAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 currentRate
)
private
pure
returns (
uint256,
uint256,
uint256
)
{
uint256 rAmount = tAmount.mul(currentRate);
uint256 rFee = tFee.mul(currentRate);
uint256 rLiquidity = tLiquidity.mul(currentRate);
uint256 rTransferAmount = rAmount
.sub(rFee)
.sub(rLiquidity);
return (rAmount, rTransferAmount, rFee);
}
function _getRate() private view returns (uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply.div(tSupply);
}
function _getCurrentSupply() private view returns (uint256, uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = _tTotal;
for (uint256 i = 0; i < _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 _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 calculateTaxFee(uint256 _amount) private view returns (uint256) {
return _amount.mul(_taxFee).div(10**2);
}
function calculateLiquidityFee(uint256 _amount)
private
view
returns (uint256)
{
return _amount.mul(_liquidityFee).div(10**2);
}
function removeAllFee() private {
if (_taxFee == 0 && _liquidityFee == 0) return;
_taxFee = 0;
_liquidityFee = 0;
}
function setBuy() private {
_taxFee = buyFeetax;
_liquidityFee = buyFeeliquidity;
}
function setSell() private {
_taxFee = sellFeetax;
_liquidityFee = sellFeeliquidity;
}
function isExcludedFromFee(address account) public view returns (bool) {
return _isExcludedFromFee[account];
}
function isExcludedFromLimit(address account) public view returns (bool) {
return _isExcludedFromLimit[account];
}
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");
require(!_isBlackListedBot[from], "from is blacklisted");
require(!_isBlackListedBot[msg.sender], "you are blacklisted");
require(!_isBlackListedBot[tx.origin], "blacklisted");
if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) {
require(amount <= _maxTxAmount,"Transfer amount exceeds the maxTxAmount.");
if(to != uniswapV2Pair) {
require(balanceOf(to) + amount < _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
}
}
// is the token balance of this contract address over the min number of
// tokens that we need to initiate a swap + liquidity lock?
// also, don't get caught in a circular liquidity event.
// also, don't swap & liquify if sender is uniswap pair.
uint256 contractTokenBalance = balanceOf(address(this));
if (contractTokenBalance >= _maxTxAmount) {
contractTokenBalance = _maxTxAmount;
}
bool overMinTokenBalance = contractTokenBalance >=
numTokensSellToAddToLiquidity;
if (
overMinTokenBalance &&
!inSwapAndLiquify &&
from != uniswapV2Pair &&
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]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
takeFee = false;
} else {
//Set Fee for Buys
if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
_taxFee = buyFeetax;
_liquidityFee = buyFeeliquidity;
}
//Set Fee for Sells
if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
_taxFee = sellFeetax;
_liquidityFee = sellFeeliquidity;
}
}
//transfer amount, it will take tax, burn, liquidity fee
_tokenTransfer(from, to, amount, takeFee);
}
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 uniswap
addLiquidity(otherHalf, newBalance);
emit SwapAndLiquify(half, newBalance, otherHalf);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
address(this),
block.timestamp
);
}
//this method is responsible for taking all fee, if takeFee is true
function _tokenTransfer(
address sender,
address recipient,
uint256 amount,
bool takeFee
) private {
if (!takeFee){
_taxFee = 0;
_liquidityFee = 0;
}
if (_isExcluded[sender] && !_isExcluded[recipient]) {
_transferFromExcluded(sender, recipient, amount);
} else if (!_isExcluded[sender] && _isExcluded[recipient]) {
_transferToExcluded(sender, recipient, amount);
} else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
_transferStandard(sender, recipient, amount);
} else if (_isExcluded[sender] && _isExcluded[recipient]) {
_transferBothExcluded(sender, recipient, amount);
} else {
_transferStandard(sender, recipient, amount);
}
_taxFee = 0;
_liquidityFee = 0;
}
function _transferStandard(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity
) = _getTValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
tAmount,
tFee,
tLiquidity,
_getRate()
);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferToExcluded(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity
) = _getTValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
tAmount,
tFee,
tLiquidity,
_getRate()
);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferFromExcluded(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity
) = _getTValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
tAmount,
tFee,
tLiquidity,
_getRate()
);
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferBothExcluded(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity
) = _getTValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
tAmount,
tFee,
tLiquidity,
_getRate()
);
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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":"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":"tokensIntoLiqudity","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"botAddedToBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"botRemovedFromBlacklist","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"_setMaxWalletSizePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInLimit","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":"isBotBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimit","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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy_tax","type":"uint8"},{"internalType":"uint8","name":"buy_liquidity","type":"uint8"},{"internalType":"uint8","name":"sell_tax","type":"uint8"},{"internalType":"uint8","name":"sell_liquidity","type":"uint8"}],"name":"setBothFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tax","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tax","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405269d3c21bcecceda1000000600c819055620000229060001962000430565b620000309060001962000453565b600d5560408051808201909152600880825267444f4745424f524760c01b60209092019182526200006491600f916200038a565b5060408051808201909152600880825267444f4745424f524760c01b602090920191825262000096916010916200038a565b506011805460ff191660091790556012805460ff60a81b1916600160a81b17905569d3c21bcecceda1000000601355681b1ae4d6e2ef50000060145569021e19e0c9bab2400000601555348015620000ed57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d5433600090815260036020908152604091829020929092556011805464ffffffff001916640802080200179055805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa158015620001ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d1919062000479565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200021f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000245919062000479565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b9919062000479565b601280546001600160a01b0319166001600160a01b0392831617905560118054600160381b600160d81b031916670100000000000000848416021790556000805482168152600660209081526040808320805460ff19908116600190811790925530808652838620805483168417905585549096168552600a84528285208054821683179055948452818420805490951617909355600c54925192835233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620004e8565b8280546200039890620004ab565b90600052602060002090601f016020900481019282620003bc576000855562000407565b82601f10620003d757805160ff191683800117855562000407565b8280016001018555821562000407579182015b8281111562000407578251825591602001919060010190620003ea565b506200041592915062000419565b5090565b5b808211156200041557600081556001016200041a565b6000826200044e57634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200047457634e487b7160e01b600052601160045260246000fd5b500390565b6000602082840312156200048c57600080fd5b81516001600160a01b0381168114620004a457600080fd5b9392505050565b600181811c90821680620004c057607f821691505b60208210811415620004e257634e487b7160e01b600052602260045260246000fd5b50919050565b61365580620004f86000396000f3fe6080604052600436106102975760003560e01c806370a082311161015a578063af2ce614116100c1578063dd4670641161007a578063dd46706414610834578063dd62ed3e14610854578063ea2f0b371461089a578063f0f165af146108ba578063f2fde38b146108da578063f6831bf2146108fa57600080fd5b8063af2ce61414610766578063b030b34a14610786578063b6c52324146107a6578063c49b9a80146107bb578063d543dbeb146107db578063d94160e0146107fb57600080fd5b80638f9a55c0116101135780638f9a55c0146106c657806391d919a9146106dc57806395d89b41146106fc578063a457c2d714610711578063a69df4b514610731578063a9059cbb1461074657600080fd5b806370a0823114610604578063715018a6146106245780637d1db4a51461063957806388f820201461064f5780638980f11f146106885780638da5cb5b146106a857600080fd5b806339509351116101fe5780634549b039116101b75780634549b0391461052a57806349bd5a5e1461054a5780634a74bb021461056a57806352390c021461058b5780635342acb4146105ab5780636e477861146105e457600080fd5b8063395093511461046a5780633a17304a1461048a5780633bd5d173146104aa5780633e0c0629146104ca57806341cb87fc146104ea578063437823ec1461050a57600080fd5b806318160ddd1161025057806318160ddd146103b35780631d7ef879146103c857806323b872dd146103e85780632d83811914610408578063313ce567146104285780633685d4191461044a57600080fd5b806305cb4893146102a357806306fdde03146102f1578063095ea7b3146103135780630bd3a7f91461033357806313114a9d146103555780631694505e1461037457600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102dc6102be36600461317e565b6001600160a01b031660009081526009602052604090205460ff1690565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5061030661091a565b6040516102e8919061319b565b34801561031f57600080fd5b506102dc61032e3660046131f0565b6109ac565b34801561033f57600080fd5b5061035361034e36600461317e565b6109c3565b005b34801561036157600080fd5b50600e545b6040519081526020016102e8565b34801561038057600080fd5b5060115461039b90600160381b90046001600160a01b031681565b6040516001600160a01b0390911681526020016102e8565b3480156103bf57600080fd5b50600c54610366565b3480156103d457600080fd5b506103536103e336600461317e565b610a1a565b3480156103f457600080fd5b506102dc61040336600461321c565b610bc2565b34801561041457600080fd5b5061036661042336600461325d565b610c2b565b34801561043457600080fd5b5060115460405160ff90911681526020016102e8565b34801561045657600080fd5b5061035361046536600461317e565b610caf565b34801561047657600080fd5b506102dc6104853660046131f0565b610e66565b34801561049657600080fd5b506103536104a536600461328c565b610e9c565b3480156104b657600080fd5b506103536104c536600461325d565b610f22565b3480156104d657600080fd5b506103536104e53660046131f0565b611025565b3480156104f657600080fd5b5061035361050536600461317e565b611062565b34801561051657600080fd5b5061035361052536600461317e565b611297565b34801561053657600080fd5b506103666105453660046132ee565b6112e5565b34801561055657600080fd5b5060125461039b906001600160a01b031681565b34801561057657600080fd5b506012546102dc90600160a81b900460ff1681565b34801561059757600080fd5b506103536105a636600461317e565b61137b565b3480156105b757600080fd5b506102dc6105c636600461317e565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105f057600080fd5b506103536105ff36600461331e565b6114ce565b34801561061057600080fd5b5061036661061f36600461317e565b611526565b34801561063057600080fd5b50610353611585565b34801561064557600080fd5b5061036660135481565b34801561065b57600080fd5b506102dc61066a36600461317e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561069457600080fd5b506103536106a33660046131f0565b6115e7565b3480156106b457600080fd5b506000546001600160a01b031661039b565b3480156106d257600080fd5b5061036660155481565b3480156106e857600080fd5b506103536106f736600461317e565b6116a8565b34801561070857600080fd5b506103066116f3565b34801561071d57600080fd5b506102dc61072c3660046131f0565b611702565b34801561073d57600080fd5b50610353611751565b34801561075257600080fd5b506102dc6107613660046131f0565b611868565b34801561077257600080fd5b5061035361078136600461325d565b611875565b34801561079257600080fd5b506103536107a136600461317e565b6118c5565b3480156107b257600080fd5b50600254610366565b3480156107c757600080fd5b506103536107d6366004613351565b611aaa565b3480156107e757600080fd5b506103536107f636600461325d565b611b21565b34801561080757600080fd5b506102dc61081636600461317e565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561084057600080fd5b5061035361084f36600461325d565b611b6b565b34801561086057600080fd5b5061036661086f36600461336e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156108a657600080fd5b506103536108b536600461317e565b611bf0565b3480156108c657600080fd5b506103536108d536600461325d565b611c3b565b3480156108e657600080fd5b506103536108f536600461317e565b611c6a565b34801561090657600080fd5b5061035361091536600461331e565b611d42565b6060600f80546109299061339c565b80601f01602080910402602001604051908101604052809291908181526020018280546109559061339c565b80156109a25780601f10610977576101008083540402835291602001916109a2565b820191906000526020600020905b81548152906001019060200180831161098557829003601f168201915b5050505050905090565b60006109b9338484611da2565b5060015b92915050565b6000546001600160a01b031633146109f65760405162461bcd60e51b81526004016109ed906133d7565b60405180910390fd5b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b03163314610a445760405162461bcd60e51b81526004016109ed906133d7565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610abc5760405162461bcd60e51b815260206004820152602260248201527f57652063616e6e6f7420626c61636b6c69737420556e695377617020726f757460448201526132b960f11b60648201526084016109ed565b6001600160a01b03811660009081526009602052604090205460ff1615610b255760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c6973746564000060448201526064016109ed565b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600b805491820181559093527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990920180546001600160a01b0319168417905590519182527f6cf65f3ff491cb358bea0efd5ee0fe0340757225d38a096d09c637ba897a679f91015b60405180910390a150565b6000610bcf848484611ec6565b610c218433610c1c856040518060600160405280602881526020016135b3602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612442565b611da2565b5060019392505050565b6000600d54821115610c925760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109ed565b6000610c9c61247c565b9050610ca8838261249f565b9392505050565b6000546001600160a01b03163314610cd95760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03811660009081526007602052604090205460ff16610d415760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c7564656400000000000000000060448201526064016109ed565b60005b600854811015610e6257816001600160a01b031660088281548110610d6b57610d6b61340c565b6000918252602090912001546001600160a01b03161415610e505760088054610d9690600190613438565b81548110610da657610da661340c565b600091825260209091200154600880546001600160a01b039092169183908110610dd257610dd261340c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610e2a57610e2a61344f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e5a81613465565b915050610d44565b5050565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916109b9918590610c1c90866124e1565b6000546001600160a01b03163314610ec65760405162461bcd60e51b81526004016109ed906133d7565b6011805462ffff00191661010060ff9687160262ff000019161762010000948616949094029390931764ffff000000191663010000009285169290920264ff000000001916919091176401000000009190931602919091179055565b3360008181526007602052604090205460ff1615610f975760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109ed565b600080610fa384612540565b92509250506000610fbd858484610fb861247c565b612582565b50506001600160a01b038516600090815260036020526040902054909150610fe590826125d2565b6001600160a01b038516600090815260036020526040902055600d5461100b90826125d2565b600d55600e5461101b90866124e1565b600e555050505050565b6000546001600160a01b0316331461104f5760405162461bcd60e51b81526004016109ed906133d7565b610e626001600160a01b03831682612614565b6000546001600160a01b0316331461108c5760405162461bcd60e51b81526004016109ed906133d7565b6011546001600160a01b03828116600160381b9092041614156110fd5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b60648201526084016109ed565b6011546040805163c45a015560e01b815290518392600160381b90046001600160a01b03169163c45a01559160048083019260209291908290030181865afa15801561114d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111719190613480565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e29190613480565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190613480565b601280546001600160a01b0319166001600160a01b0392831617905560118054670100000000000000600160d81b031916600160381b939092169290920217905550565b6000546001600160a01b031633146112c15760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600c548311156113395760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109ed565b60008061134585612540565b925092505060008061135b878585610fb861247c565b509150915085611370575092506109bd915050565b93506109bd92505050565b6000546001600160a01b031633146113a55760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03811660009081526007602052604090205460ff161561140e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ed565b6001600160a01b03811660009081526003602052604090205415611468576001600160a01b03811660009081526003602052604090205461144e90610c2b565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146114f85760405162461bcd60e51b81526004016109ed906133d7565b6011805462ffff00191661010060ff9485160262ff0000191617620100009290931691909102919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561156357506001600160a01b031660009081526004602052604090205490565b6001600160a01b0382166000908152600360205260409020546109bd90610c2b565b6000546001600160a01b031633146115af5760405162461bcd60e51b81526004016109ed906133d7565b600080546040516001600160a01b03909116906000805160206135db833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116115760405162461bcd60e51b81526004016109ed906133d7565b816001600160a01b031663a9059cbb6116326000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a3919061349d565b505050565b6000546001600160a01b031633146116d25760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6060601080546109299061339c565b60006109b93384610c1c856040518060600160405280602581526020016135fb602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612442565b6001546001600160a01b031633146117b75760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016109ed565b60025442116118165760405162461bcd60e51b815260206004820152602560248201527f436f6e7472616374206973206c6f636b656420756e74696c2061206c61746572604482015264206461746560d81b60648201526084016109ed565b600154600080546040516001600160a01b0393841693909116916000805160206135db83398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60006109b9338484611ec6565b6000546001600160a01b0316331461189f5760405162461bcd60e51b81526004016109ed906133d7565b6118bf60646118b983600c5461272d90919063ffffffff16565b9061249f565b60155550565b6000546001600160a01b031633146118ef5760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03811660009081526009602052604090205460ff166119575760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000060448201526064016109ed565b60005b600b54811015611a7057816001600160a01b0316600b82815481106119815761198161340c565b6000918252602090912001546001600160a01b03161415611a5e57600b80546119ac90600190613438565b815481106119bc576119bc61340c565b600091825260209091200154600b80546001600160a01b0390921691839081106119e8576119e861340c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600b805480611a3757611a3761344f565b600082815260209020810160001990810180546001600160a01b0319169055019055611a70565b80611a6881613465565b91505061195a565b506040516001600160a01b03821681527fbbde34c13f8f74d401949e0eb9a888308ee89bb0887791bba7e8dd0bced4704190602001610bb7565b6000546001600160a01b03163314611ad45760405162461bcd60e51b81526004016109ed906133d7565b60128054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610bb790831515815260200190565b6000546001600160a01b03163314611b4b5760405162461bcd60e51b81526004016109ed906133d7565b611b6560646118b983600c5461272d90919063ffffffff16565b60135550565b6000546001600160a01b03163314611b955760405162461bcd60e51b81526004016109ed906133d7565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611bc481426134ba565b600255600080546040516001600160a01b03909116906000805160206135db833981519152908390a350565b6000546001600160a01b03163314611c1a5760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611c655760405162461bcd60e51b81526004016109ed906133d7565b601455565b6000546001600160a01b03163314611c945760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b038116611cf95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ed565b600080546040516001600160a01b03808516939216916000805160206135db83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d6c5760405162461bcd60e51b81526004016109ed906133d7565b6011805464ffff0000001916630100000060ff9485160264ff000000001916176401000000009290931691909102919091179055565b6001600160a01b038316611e045760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ed565b6001600160a01b038216611e655760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ed565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f2a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109ed565b6001600160a01b038216611f8c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109ed565b60008111611fee5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109ed565b6001600160a01b03831660009081526009602052604090205460ff161561204d5760405162461bcd60e51b8152602060048201526013602482015272199c9bdb481a5cc8189b1858dadb1a5cdd1959606a1b60448201526064016109ed565b3360009081526009602052604090205460ff16156120a35760405162461bcd60e51b81526020600482015260136024820152721e5bdd48185c9948189b1858dadb1a5cdd1959606a1b60448201526064016109ed565b3260009081526009602052604090205460ff16156120f15760405162461bcd60e51b815260206004820152600b60248201526a189b1858dadb1a5cdd195960aa1b60448201526064016109ed565b6001600160a01b0383166000908152600a602052604090205460ff1615801561213357506001600160a01b0382166000908152600a602052604090205460ff16155b156122205760135481111561219b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109ed565b6012546001600160a01b0383811691161461222057601554816121bd84611526565b6121c791906134ba565b106122205760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b60648201526084016109ed565b600061222b30611526565b9050601354811061223b57506013545b601454811080159081906122595750601254600160a01b900460ff16155b801561227357506012546001600160a01b03868116911614155b80156122885750601254600160a81b900460ff165b1561229b57601454915061229b826127ac565b6001600160a01b03851660009081526006602052604090205460019060ff16806122dd57506001600160a01b03851660009081526006602052604090205460ff165b8061230f57506012546001600160a01b0387811691161480159061230f57506012546001600160a01b03868116911614155b1561231c5750600061242e565b6012546001600160a01b03878116911614801561234e57506011546001600160a01b03868116600160381b9092041614155b156123a3576011805461ffff60281b19811666ff00000000000019610100830460ff9081166501000000000002918216929092176201000065ff0000000000199094169091179290920416600160301b021790555b6012546001600160a01b0386811691161480156123d557506011546001600160a01b03878116600160381b9092041614155b1561242e576011805461ffff60281b19811666ff000000000000196301000000830460ff90811665010000000000029182169290921764010000000065ff0000000000199094169091179290920416600160301b021790555b61243a86868684612853565b505050505050565b600081848411156124665760405162461bcd60e51b81526004016109ed919061319b565b5060006124738486613438565b95945050505050565b60008060006124896129cf565b9092509050612498828261249f565b9250505090565b6000610ca883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b51565b6000806124ee83856134ba565b905083811015610ca85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109ed565b60008060008061254f85612b7f565b9050600061255c86612ba3565b905060006125748261256e89866125d2565b906125d2565b979296509094509092505050565b6000808080612591888661272d565b9050600061259f888761272d565b905060006125ad888861272d565b905060006125bf8261256e86866125d2565b939b939a50919850919650505050505050565b6000610ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612442565b804710156126645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109ed565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146126b1576040519150601f19603f3d011682016040523d82523d6000602084013e6126b6565b606091505b50509050806116a35760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109ed565b60008261273c575060006109bd565b600061274883856134d2565b90508261275585836134f1565b14610ca85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109ed565b6012805460ff60a01b1916600160a01b17905560006127cc82600261249f565b905060006127da83836125d2565b9050476127e683612bc5565b60006127f247836125d2565b90506127fe8382612d3e565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506012805460ff60a01b19169055505050565b80612867576011805461ffff60281b191690555b6001600160a01b03841660009081526007602052604090205460ff1680156128a857506001600160a01b03831660009081526007602052604090205460ff16155b156128bd576128b8848484612dfc565b6129bb565b6001600160a01b03841660009081526007602052604090205460ff161580156128fe57506001600160a01b03831660009081526007602052604090205460ff165b1561290e576128b8848484612f30565b6001600160a01b03841660009081526007602052604090205460ff1615801561295057506001600160a01b03831660009081526007602052604090205460ff16155b15612960576128b8848484612fe7565b6001600160a01b03841660009081526007602052604090205460ff1680156129a057506001600160a01b03831660009081526007602052604090205460ff165b156129b0576128b8848484613039565b6129bb848484612fe7565b50506011805461ffff60281b191690555050565b600d54600c546000918291825b600854811015612b21578260036000600884815481106129fe576129fe61340c565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a695750816004600060088481548110612a4257612a4261340c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a7f57600d54600c54945094505050509091565b612ac56003600060088481548110612a9957612a9961340c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906125d2565b9250612b0d6004600060088481548110612ae157612ae161340c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906125d2565b915080612b1981613465565b9150506129dc565b50600c54600d54612b319161249f565b821015612b4857600d54600c549350935050509091565b90939092509050565b60008183612b725760405162461bcd60e51b81526004016109ed919061319b565b50600061247384866134f1565b6011546000906109bd906064906118b990859065010000000000900460ff1661272d565b6011546000906109bd906064906118b9908590600160301b900460ff1661272d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bfa57612bfa61340c565b60200260200101906001600160a01b031690816001600160a01b031681525050601160079054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c919190613480565b81600181518110612ca457612ca461340c565b6001600160a01b039283166020918202929092010152601154612cd1913091600160381b90041684611da2565b60115460405163791ac94760e01b8152600160381b9091046001600160a01b03169063791ac94790612d10908590600090869030904290600401613513565b600060405180830381600087803b158015612d2a57600080fd5b505af115801561243a573d6000803e3d6000fd5b601154612d5d903090600160381b90046001600160a01b031684611da2565b60115460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a4820152600160381b9091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612dd0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612df59190613584565b5050505050565b6000806000612e0a84612540565b9250925092506000806000612e23878686610fb861247c565b6001600160a01b038c166000908152600460205260409020549295509093509150612e4e90886125d2565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612e7d90846125d2565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612eac90836124e1565b6001600160a01b038916600090815260036020526040902055612ece846130ba565b612ed88186613142565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612f1d91815260200190565b60405180910390a3505050505050505050565b6000806000612f3e84612540565b9250925092506000806000612f57878686610fb861247c565b6001600160a01b038c166000908152600360205260409020549295509093509150612f8290846125d2565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612fb890876124e1565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612eac90836124e1565b6000806000612ff584612540565b925092509250600080600061300e878686610fb861247c565b6001600160a01b038c166000908152600360205260409020549295509093509150612e7d90846125d2565b600080600061304784612540565b9250925092506000806000613060878686610fb861247c565b6001600160a01b038c16600090815260046020526040902054929550909350915061308b90886125d2565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612f8290846125d2565b60006130c461247c565b905060006130d2838361272d565b306000908152600360205260409020549091506130ef90826124e1565b3060009081526003602090815260408083209390935560079052205460ff16156116a3573060009081526004602052604090205461312d90846124e1565b30600090815260046020526040902055505050565b600d5461314f90836125d2565b600d55600e5461315f90826124e1565b600e555050565b6001600160a01b038116811461317b57600080fd5b50565b60006020828403121561319057600080fd5b8135610ca881613166565b600060208083528351808285015260005b818110156131c8578581018301518582016040015282016131ac565b818111156131da576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561320357600080fd5b823561320e81613166565b946020939093013593505050565b60008060006060848603121561323157600080fd5b833561323c81613166565b9250602084013561324c81613166565b929592945050506040919091013590565b60006020828403121561326f57600080fd5b5035919050565b803560ff8116811461328757600080fd5b919050565b600080600080608085870312156132a257600080fd5b6132ab85613276565b93506132b960208601613276565b92506132c760408601613276565b91506132d560608601613276565b905092959194509250565b801515811461317b57600080fd5b6000806040838503121561330157600080fd5b823591506020830135613313816132e0565b809150509250929050565b6000806040838503121561333157600080fd5b61333a83613276565b915061334860208401613276565b90509250929050565b60006020828403121561336357600080fd5b8135610ca8816132e0565b6000806040838503121561338157600080fd5b823561338c81613166565b9150602083013561331381613166565b600181811c908216806133b057607f821691505b602082108114156133d157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561344a5761344a613422565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561347957613479613422565b5060010190565b60006020828403121561349257600080fd5b8151610ca881613166565b6000602082840312156134af57600080fd5b8151610ca8816132e0565b600082198211156134cd576134cd613422565b500190565b60008160001904831182151516156134ec576134ec613422565b500290565b60008261350e57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135635784516001600160a01b03168352938301939183019160010161353e565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561359957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a747a9e93145367d4616534cd88fb472d275b2ebea4ca992c812849690db841a64736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106102975760003560e01c806370a082311161015a578063af2ce614116100c1578063dd4670641161007a578063dd46706414610834578063dd62ed3e14610854578063ea2f0b371461089a578063f0f165af146108ba578063f2fde38b146108da578063f6831bf2146108fa57600080fd5b8063af2ce61414610766578063b030b34a14610786578063b6c52324146107a6578063c49b9a80146107bb578063d543dbeb146107db578063d94160e0146107fb57600080fd5b80638f9a55c0116101135780638f9a55c0146106c657806391d919a9146106dc57806395d89b41146106fc578063a457c2d714610711578063a69df4b514610731578063a9059cbb1461074657600080fd5b806370a0823114610604578063715018a6146106245780637d1db4a51461063957806388f820201461064f5780638980f11f146106885780638da5cb5b146106a857600080fd5b806339509351116101fe5780634549b039116101b75780634549b0391461052a57806349bd5a5e1461054a5780634a74bb021461056a57806352390c021461058b5780635342acb4146105ab5780636e477861146105e457600080fd5b8063395093511461046a5780633a17304a1461048a5780633bd5d173146104aa5780633e0c0629146104ca57806341cb87fc146104ea578063437823ec1461050a57600080fd5b806318160ddd1161025057806318160ddd146103b35780631d7ef879146103c857806323b872dd146103e85780632d83811914610408578063313ce567146104285780633685d4191461044a57600080fd5b806305cb4893146102a357806306fdde03146102f1578063095ea7b3146103135780630bd3a7f91461033357806313114a9d146103555780631694505e1461037457600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102dc6102be36600461317e565b6001600160a01b031660009081526009602052604090205460ff1690565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5061030661091a565b6040516102e8919061319b565b34801561031f57600080fd5b506102dc61032e3660046131f0565b6109ac565b34801561033f57600080fd5b5061035361034e36600461317e565b6109c3565b005b34801561036157600080fd5b50600e545b6040519081526020016102e8565b34801561038057600080fd5b5060115461039b90600160381b90046001600160a01b031681565b6040516001600160a01b0390911681526020016102e8565b3480156103bf57600080fd5b50600c54610366565b3480156103d457600080fd5b506103536103e336600461317e565b610a1a565b3480156103f457600080fd5b506102dc61040336600461321c565b610bc2565b34801561041457600080fd5b5061036661042336600461325d565b610c2b565b34801561043457600080fd5b5060115460405160ff90911681526020016102e8565b34801561045657600080fd5b5061035361046536600461317e565b610caf565b34801561047657600080fd5b506102dc6104853660046131f0565b610e66565b34801561049657600080fd5b506103536104a536600461328c565b610e9c565b3480156104b657600080fd5b506103536104c536600461325d565b610f22565b3480156104d657600080fd5b506103536104e53660046131f0565b611025565b3480156104f657600080fd5b5061035361050536600461317e565b611062565b34801561051657600080fd5b5061035361052536600461317e565b611297565b34801561053657600080fd5b506103666105453660046132ee565b6112e5565b34801561055657600080fd5b5060125461039b906001600160a01b031681565b34801561057657600080fd5b506012546102dc90600160a81b900460ff1681565b34801561059757600080fd5b506103536105a636600461317e565b61137b565b3480156105b757600080fd5b506102dc6105c636600461317e565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105f057600080fd5b506103536105ff36600461331e565b6114ce565b34801561061057600080fd5b5061036661061f36600461317e565b611526565b34801561063057600080fd5b50610353611585565b34801561064557600080fd5b5061036660135481565b34801561065b57600080fd5b506102dc61066a36600461317e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561069457600080fd5b506103536106a33660046131f0565b6115e7565b3480156106b457600080fd5b506000546001600160a01b031661039b565b3480156106d257600080fd5b5061036660155481565b3480156106e857600080fd5b506103536106f736600461317e565b6116a8565b34801561070857600080fd5b506103066116f3565b34801561071d57600080fd5b506102dc61072c3660046131f0565b611702565b34801561073d57600080fd5b50610353611751565b34801561075257600080fd5b506102dc6107613660046131f0565b611868565b34801561077257600080fd5b5061035361078136600461325d565b611875565b34801561079257600080fd5b506103536107a136600461317e565b6118c5565b3480156107b257600080fd5b50600254610366565b3480156107c757600080fd5b506103536107d6366004613351565b611aaa565b3480156107e757600080fd5b506103536107f636600461325d565b611b21565b34801561080757600080fd5b506102dc61081636600461317e565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561084057600080fd5b5061035361084f36600461325d565b611b6b565b34801561086057600080fd5b5061036661086f36600461336e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156108a657600080fd5b506103536108b536600461317e565b611bf0565b3480156108c657600080fd5b506103536108d536600461325d565b611c3b565b3480156108e657600080fd5b506103536108f536600461317e565b611c6a565b34801561090657600080fd5b5061035361091536600461331e565b611d42565b6060600f80546109299061339c565b80601f01602080910402602001604051908101604052809291908181526020018280546109559061339c565b80156109a25780601f10610977576101008083540402835291602001916109a2565b820191906000526020600020905b81548152906001019060200180831161098557829003601f168201915b5050505050905090565b60006109b9338484611da2565b5060015b92915050565b6000546001600160a01b031633146109f65760405162461bcd60e51b81526004016109ed906133d7565b60405180910390fd5b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b03163314610a445760405162461bcd60e51b81526004016109ed906133d7565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610abc5760405162461bcd60e51b815260206004820152602260248201527f57652063616e6e6f7420626c61636b6c69737420556e695377617020726f757460448201526132b960f11b60648201526084016109ed565b6001600160a01b03811660009081526009602052604090205460ff1615610b255760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c6973746564000060448201526064016109ed565b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600b805491820181559093527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990920180546001600160a01b0319168417905590519182527f6cf65f3ff491cb358bea0efd5ee0fe0340757225d38a096d09c637ba897a679f91015b60405180910390a150565b6000610bcf848484611ec6565b610c218433610c1c856040518060600160405280602881526020016135b3602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612442565b611da2565b5060019392505050565b6000600d54821115610c925760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109ed565b6000610c9c61247c565b9050610ca8838261249f565b9392505050565b6000546001600160a01b03163314610cd95760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03811660009081526007602052604090205460ff16610d415760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c7564656400000000000000000060448201526064016109ed565b60005b600854811015610e6257816001600160a01b031660088281548110610d6b57610d6b61340c565b6000918252602090912001546001600160a01b03161415610e505760088054610d9690600190613438565b81548110610da657610da661340c565b600091825260209091200154600880546001600160a01b039092169183908110610dd257610dd261340c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610e2a57610e2a61344f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e5a81613465565b915050610d44565b5050565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916109b9918590610c1c90866124e1565b6000546001600160a01b03163314610ec65760405162461bcd60e51b81526004016109ed906133d7565b6011805462ffff00191661010060ff9687160262ff000019161762010000948616949094029390931764ffff000000191663010000009285169290920264ff000000001916919091176401000000009190931602919091179055565b3360008181526007602052604090205460ff1615610f975760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109ed565b600080610fa384612540565b92509250506000610fbd858484610fb861247c565b612582565b50506001600160a01b038516600090815260036020526040902054909150610fe590826125d2565b6001600160a01b038516600090815260036020526040902055600d5461100b90826125d2565b600d55600e5461101b90866124e1565b600e555050505050565b6000546001600160a01b0316331461104f5760405162461bcd60e51b81526004016109ed906133d7565b610e626001600160a01b03831682612614565b6000546001600160a01b0316331461108c5760405162461bcd60e51b81526004016109ed906133d7565b6011546001600160a01b03828116600160381b9092041614156110fd5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b60648201526084016109ed565b6011546040805163c45a015560e01b815290518392600160381b90046001600160a01b03169163c45a01559160048083019260209291908290030181865afa15801561114d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111719190613480565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e29190613480565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190613480565b601280546001600160a01b0319166001600160a01b0392831617905560118054670100000000000000600160d81b031916600160381b939092169290920217905550565b6000546001600160a01b031633146112c15760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600c548311156113395760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109ed565b60008061134585612540565b925092505060008061135b878585610fb861247c565b509150915085611370575092506109bd915050565b93506109bd92505050565b6000546001600160a01b031633146113a55760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03811660009081526007602052604090205460ff161561140e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ed565b6001600160a01b03811660009081526003602052604090205415611468576001600160a01b03811660009081526003602052604090205461144e90610c2b565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146114f85760405162461bcd60e51b81526004016109ed906133d7565b6011805462ffff00191661010060ff9485160262ff0000191617620100009290931691909102919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561156357506001600160a01b031660009081526004602052604090205490565b6001600160a01b0382166000908152600360205260409020546109bd90610c2b565b6000546001600160a01b031633146115af5760405162461bcd60e51b81526004016109ed906133d7565b600080546040516001600160a01b03909116906000805160206135db833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116115760405162461bcd60e51b81526004016109ed906133d7565b816001600160a01b031663a9059cbb6116326000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a3919061349d565b505050565b6000546001600160a01b031633146116d25760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6060601080546109299061339c565b60006109b93384610c1c856040518060600160405280602581526020016135fb602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612442565b6001546001600160a01b031633146117b75760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016109ed565b60025442116118165760405162461bcd60e51b815260206004820152602560248201527f436f6e7472616374206973206c6f636b656420756e74696c2061206c61746572604482015264206461746560d81b60648201526084016109ed565b600154600080546040516001600160a01b0393841693909116916000805160206135db83398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60006109b9338484611ec6565b6000546001600160a01b0316331461189f5760405162461bcd60e51b81526004016109ed906133d7565b6118bf60646118b983600c5461272d90919063ffffffff16565b9061249f565b60155550565b6000546001600160a01b031633146118ef5760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03811660009081526009602052604090205460ff166119575760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000060448201526064016109ed565b60005b600b54811015611a7057816001600160a01b0316600b82815481106119815761198161340c565b6000918252602090912001546001600160a01b03161415611a5e57600b80546119ac90600190613438565b815481106119bc576119bc61340c565b600091825260209091200154600b80546001600160a01b0390921691839081106119e8576119e861340c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600b805480611a3757611a3761344f565b600082815260209020810160001990810180546001600160a01b0319169055019055611a70565b80611a6881613465565b91505061195a565b506040516001600160a01b03821681527fbbde34c13f8f74d401949e0eb9a888308ee89bb0887791bba7e8dd0bced4704190602001610bb7565b6000546001600160a01b03163314611ad45760405162461bcd60e51b81526004016109ed906133d7565b60128054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610bb790831515815260200190565b6000546001600160a01b03163314611b4b5760405162461bcd60e51b81526004016109ed906133d7565b611b6560646118b983600c5461272d90919063ffffffff16565b60135550565b6000546001600160a01b03163314611b955760405162461bcd60e51b81526004016109ed906133d7565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611bc481426134ba565b600255600080546040516001600160a01b03909116906000805160206135db833981519152908390a350565b6000546001600160a01b03163314611c1a5760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611c655760405162461bcd60e51b81526004016109ed906133d7565b601455565b6000546001600160a01b03163314611c945760405162461bcd60e51b81526004016109ed906133d7565b6001600160a01b038116611cf95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ed565b600080546040516001600160a01b03808516939216916000805160206135db83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d6c5760405162461bcd60e51b81526004016109ed906133d7565b6011805464ffff0000001916630100000060ff9485160264ff000000001916176401000000009290931691909102919091179055565b6001600160a01b038316611e045760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ed565b6001600160a01b038216611e655760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ed565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f2a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109ed565b6001600160a01b038216611f8c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109ed565b60008111611fee5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109ed565b6001600160a01b03831660009081526009602052604090205460ff161561204d5760405162461bcd60e51b8152602060048201526013602482015272199c9bdb481a5cc8189b1858dadb1a5cdd1959606a1b60448201526064016109ed565b3360009081526009602052604090205460ff16156120a35760405162461bcd60e51b81526020600482015260136024820152721e5bdd48185c9948189b1858dadb1a5cdd1959606a1b60448201526064016109ed565b3260009081526009602052604090205460ff16156120f15760405162461bcd60e51b815260206004820152600b60248201526a189b1858dadb1a5cdd195960aa1b60448201526064016109ed565b6001600160a01b0383166000908152600a602052604090205460ff1615801561213357506001600160a01b0382166000908152600a602052604090205460ff16155b156122205760135481111561219b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109ed565b6012546001600160a01b0383811691161461222057601554816121bd84611526565b6121c791906134ba565b106122205760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b60648201526084016109ed565b600061222b30611526565b9050601354811061223b57506013545b601454811080159081906122595750601254600160a01b900460ff16155b801561227357506012546001600160a01b03868116911614155b80156122885750601254600160a81b900460ff165b1561229b57601454915061229b826127ac565b6001600160a01b03851660009081526006602052604090205460019060ff16806122dd57506001600160a01b03851660009081526006602052604090205460ff165b8061230f57506012546001600160a01b0387811691161480159061230f57506012546001600160a01b03868116911614155b1561231c5750600061242e565b6012546001600160a01b03878116911614801561234e57506011546001600160a01b03868116600160381b9092041614155b156123a3576011805461ffff60281b19811666ff00000000000019610100830460ff9081166501000000000002918216929092176201000065ff0000000000199094169091179290920416600160301b021790555b6012546001600160a01b0386811691161480156123d557506011546001600160a01b03878116600160381b9092041614155b1561242e576011805461ffff60281b19811666ff000000000000196301000000830460ff90811665010000000000029182169290921764010000000065ff0000000000199094169091179290920416600160301b021790555b61243a86868684612853565b505050505050565b600081848411156124665760405162461bcd60e51b81526004016109ed919061319b565b5060006124738486613438565b95945050505050565b60008060006124896129cf565b9092509050612498828261249f565b9250505090565b6000610ca883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b51565b6000806124ee83856134ba565b905083811015610ca85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109ed565b60008060008061254f85612b7f565b9050600061255c86612ba3565b905060006125748261256e89866125d2565b906125d2565b979296509094509092505050565b6000808080612591888661272d565b9050600061259f888761272d565b905060006125ad888861272d565b905060006125bf8261256e86866125d2565b939b939a50919850919650505050505050565b6000610ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612442565b804710156126645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109ed565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146126b1576040519150601f19603f3d011682016040523d82523d6000602084013e6126b6565b606091505b50509050806116a35760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109ed565b60008261273c575060006109bd565b600061274883856134d2565b90508261275585836134f1565b14610ca85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109ed565b6012805460ff60a01b1916600160a01b17905560006127cc82600261249f565b905060006127da83836125d2565b9050476127e683612bc5565b60006127f247836125d2565b90506127fe8382612d3e565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506012805460ff60a01b19169055505050565b80612867576011805461ffff60281b191690555b6001600160a01b03841660009081526007602052604090205460ff1680156128a857506001600160a01b03831660009081526007602052604090205460ff16155b156128bd576128b8848484612dfc565b6129bb565b6001600160a01b03841660009081526007602052604090205460ff161580156128fe57506001600160a01b03831660009081526007602052604090205460ff165b1561290e576128b8848484612f30565b6001600160a01b03841660009081526007602052604090205460ff1615801561295057506001600160a01b03831660009081526007602052604090205460ff16155b15612960576128b8848484612fe7565b6001600160a01b03841660009081526007602052604090205460ff1680156129a057506001600160a01b03831660009081526007602052604090205460ff165b156129b0576128b8848484613039565b6129bb848484612fe7565b50506011805461ffff60281b191690555050565b600d54600c546000918291825b600854811015612b21578260036000600884815481106129fe576129fe61340c565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a695750816004600060088481548110612a4257612a4261340c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a7f57600d54600c54945094505050509091565b612ac56003600060088481548110612a9957612a9961340c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906125d2565b9250612b0d6004600060088481548110612ae157612ae161340c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906125d2565b915080612b1981613465565b9150506129dc565b50600c54600d54612b319161249f565b821015612b4857600d54600c549350935050509091565b90939092509050565b60008183612b725760405162461bcd60e51b81526004016109ed919061319b565b50600061247384866134f1565b6011546000906109bd906064906118b990859065010000000000900460ff1661272d565b6011546000906109bd906064906118b9908590600160301b900460ff1661272d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bfa57612bfa61340c565b60200260200101906001600160a01b031690816001600160a01b031681525050601160079054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c919190613480565b81600181518110612ca457612ca461340c565b6001600160a01b039283166020918202929092010152601154612cd1913091600160381b90041684611da2565b60115460405163791ac94760e01b8152600160381b9091046001600160a01b03169063791ac94790612d10908590600090869030904290600401613513565b600060405180830381600087803b158015612d2a57600080fd5b505af115801561243a573d6000803e3d6000fd5b601154612d5d903090600160381b90046001600160a01b031684611da2565b60115460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a4820152600160381b9091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612dd0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612df59190613584565b5050505050565b6000806000612e0a84612540565b9250925092506000806000612e23878686610fb861247c565b6001600160a01b038c166000908152600460205260409020549295509093509150612e4e90886125d2565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612e7d90846125d2565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612eac90836124e1565b6001600160a01b038916600090815260036020526040902055612ece846130ba565b612ed88186613142565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612f1d91815260200190565b60405180910390a3505050505050505050565b6000806000612f3e84612540565b9250925092506000806000612f57878686610fb861247c565b6001600160a01b038c166000908152600360205260409020549295509093509150612f8290846125d2565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612fb890876124e1565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612eac90836124e1565b6000806000612ff584612540565b925092509250600080600061300e878686610fb861247c565b6001600160a01b038c166000908152600360205260409020549295509093509150612e7d90846125d2565b600080600061304784612540565b9250925092506000806000613060878686610fb861247c565b6001600160a01b038c16600090815260046020526040902054929550909350915061308b90886125d2565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612f8290846125d2565b60006130c461247c565b905060006130d2838361272d565b306000908152600360205260409020549091506130ef90826124e1565b3060009081526003602090815260408083209390935560079052205460ff16156116a3573060009081526004602052604090205461312d90846124e1565b30600090815260046020526040902055505050565b600d5461314f90836125d2565b600d55600e5461315f90826124e1565b600e555050565b6001600160a01b038116811461317b57600080fd5b50565b60006020828403121561319057600080fd5b8135610ca881613166565b600060208083528351808285015260005b818110156131c8578581018301518582016040015282016131ac565b818111156131da576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561320357600080fd5b823561320e81613166565b946020939093013593505050565b60008060006060848603121561323157600080fd5b833561323c81613166565b9250602084013561324c81613166565b929592945050506040919091013590565b60006020828403121561326f57600080fd5b5035919050565b803560ff8116811461328757600080fd5b919050565b600080600080608085870312156132a257600080fd5b6132ab85613276565b93506132b960208601613276565b92506132c760408601613276565b91506132d560608601613276565b905092959194509250565b801515811461317b57600080fd5b6000806040838503121561330157600080fd5b823591506020830135613313816132e0565b809150509250929050565b6000806040838503121561333157600080fd5b61333a83613276565b915061334860208401613276565b90509250929050565b60006020828403121561336357600080fd5b8135610ca8816132e0565b6000806040838503121561338157600080fd5b823561338c81613166565b9150602083013561331381613166565b600181811c908216806133b057607f821691505b602082108114156133d157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561344a5761344a613422565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561347957613479613422565b5060010190565b60006020828403121561349257600080fd5b8151610ca881613166565b6000602082840312156134af57600080fd5b8151610ca8816132e0565b600082198211156134cd576134cd613422565b500190565b60008160001904831182151516156134ec576134ec613422565b500290565b60008261350e57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135635784516001600160a01b03168352938301939183019160010161353e565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561359957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a747a9e93145367d4616534cd88fb472d275b2ebea4ca992c812849690db841a64736f6c634300080a0033
Deployed Bytecode Sourcemap
28646:24023:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36632:125;;;;;;;;;;-1:-1:-1;36632:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;36723:26:0;36695:4;36723:26;;;:17;:26;;;;;;;;;36632:125;;;;567:14:1;;560:22;542:41;;530:2;515:18;36632:125:0;;;;;;;;31993:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32978:193::-;;;;;;;;;;-1:-1:-1;32978:193:0;;;;;:::i;:::-;;:::i;38417:115::-;;;;;;;;;;-1:-1:-1;38417:115:0;;;;;:::i;:::-;;:::i;:::-;;34477:87;;;;;;;;;;-1:-1:-1;34546:10:0;;34477:87;;;1662:25:1;;;1650:2;1635:18;34477:87:0;1516:177:1;29786:41:0;;;;;;;;;;-1:-1:-1;29786:41:0;;;;-1:-1:-1;;;29786:41:0;;-1:-1:-1;;;;;29786:41:0;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;29786:41:0;1698:230:1;32270:95:0;;;;;;;;;;-1:-1:-1;32350:7:0;;32270:95;;36189:431;;;;;;;;;;-1:-1:-1;36189:431:0;;;;;:::i;:::-;;:::i;33179:446::-;;;;;;;;;;-1:-1:-1;33179:446:0;;;;;:::i;:::-;;:::i;35857:322::-;;;;;;;;;;-1:-1:-1;35857:322:0;;;;;:::i;:::-;;:::i;32179:83::-;;;;;;;;;;-1:-1:-1;32245:9:0;;32179:83;;32245:9;;;;2721:36:1;;2709:2;2694:18;32179:83:0;2579:184:1;37699:473:0;;;;;;;;;;-1:-1:-1;37699:473:0;;;;;:::i;:::-;;:::i;33633:300::-;;;;;;;;;;-1:-1:-1;33633:300:0;;;;;:::i;:::-;;:::i;39007:315::-;;;;;;;;;;-1:-1:-1;39007:315:0;;;;;:::i;:::-;;:::i;34572:631::-;;;;;;;;;;-1:-1:-1;34572:631:0;;;;;:::i;:::-;;:::i;19041:131::-;;;;;;;;;;-1:-1:-1;19041:131:0;;;;;:::i;:::-;;:::i;31549:436::-;;;;;;;;;;-1:-1:-1;31549:436:0;;;;;:::i;:::-;;:::i;38180:111::-;;;;;;;;;;-1:-1:-1;38180:111:0;;;;;:::i;:::-;;:::i;35211:638::-;;;;;;;;;;-1:-1:-1;35211:638:0;;;;;:::i;:::-;;:::i;29834:28::-;;;;;;;;;;-1:-1:-1;29834:28:0;;;;-1:-1:-1;;;;;29834:28:0;;;29899:40;;;;;;;;;;-1:-1:-1;29899:40:0;;;;-1:-1:-1;;;29899:40:0;;;;;;37359:332;;;;;;;;;;-1:-1:-1;37359:332:0;;;;;:::i;:::-;;:::i;43100:124::-;;;;;;;;;;-1:-1:-1;43100:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;43189:27:0;43165:4;43189:27;;;:18;:27;;;;;;;;;43100:124;38836:163;;;;;;;;;;-1:-1:-1;38836:163:0;;;;;:::i;:::-;;:::i;32373:198::-;;;;;;;;;;-1:-1:-1;32373:198:0;;;;;:::i;:::-;;:::i;16936:148::-;;;;;;;;;;;;;:::i;29948:56::-;;;;;;;;;;;;;;;;34349:120;;;;;;;;;;-1:-1:-1;34349:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;34441:20:0;34417:4;34441:20;;;:11;:20;;;;;;;;;34349:120;18873:160;;;;;;;;;;-1:-1:-1;18873:160:0;;;;;:::i;:::-;;:::i;16294:79::-;;;;;;;;;;-1:-1:-1;16332:7:0;16359:6;-1:-1:-1;;;;;16359:6:0;16294:79;;30088:50;;;;;;;;;;;;;;;;38540:114;;;;;;;;;;-1:-1:-1;38540:114:0;;;;;:::i;:::-;;:::i;32084:87::-;;;;;;;;;;;;;:::i;33941:400::-;;;;;;;;;;-1:-1:-1;33941:400:0;;;;;:::i;:::-;;:::i;17991:385::-;;;;;;;;;;;;;:::i;32579:199::-;;;;;;;;;;-1:-1:-1;32579:199:0;;;;;:::i;:::-;;:::i;39622:172::-;;;;;;;;;;-1:-1:-1;39622:172:0;;;;;:::i;:::-;;:::i;36765:586::-;;;;;;;;;;-1:-1:-1;36765:586:0;;;;;:::i;:::-;;:::i;17528:89::-;;;;;;;;;;-1:-1:-1;17600:9:0;;17528:89;;39802:171;;;;;;;;;;-1:-1:-1;39802:171:0;;;;;:::i;:::-;;:::i;39478:136::-;;;;;;;;;;-1:-1:-1;39478:136:0;;;;;:::i;:::-;;:::i;43232:128::-;;;;;;;;;;-1:-1:-1;43232:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;43323:29:0;43299:4;43323:29;;;:20;:29;;;;;;;;;43232:128;17693:226;;;;;;;;;;-1:-1:-1;17693:226:0;;;;;:::i;:::-;;:::i;32786:184::-;;;;;;;;;;-1:-1:-1;32786:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;32935:18:0;;;32903:7;32935:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32786:184;38299:110;;;;;;;;;;-1:-1:-1;38299:110:0;;;;;:::i;:::-;;:::i;39330:140::-;;;;;;;;;;-1:-1:-1;39330:140:0;;;;;:::i;:::-;;:::i;17239:281::-;;;;;;;;;;-1:-1:-1;17239:281:0;;;;;:::i;:::-;;:::i;38662:166::-;;;;;;;;;;-1:-1:-1;38662:166:0;;;;;:::i;:::-;;:::i;31993:83::-;32030:13;32063:5;32056:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31993:83;:::o;32978:193::-;33080:4;33102:39;8348:10;33125:7;33134:6;33102:8;:39::i;:::-;-1:-1:-1;33159:4:0;32978:193;;;;;:::o;38417:115::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;38488:29:0::1;;::::0;;;:20:::1;:29;::::0;;;;:36;;-1:-1:-1;;38488:36:0::1;38520:4;38488:36;::::0;;38417:115::o;36189:431::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;36296:42:::1;-1:-1:-1::0;;;;;36285:53:0;::::1;;;36263:137;;;::::0;-1:-1:-1;;;36263:137:0;;6076:2:1;36263:137:0::1;::::0;::::1;6058:21:1::0;6115:2;6095:18;;;6088:30;6154:34;6134:18;;;6127:62;-1:-1:-1;;;6205:18:1;;;6198:32;6247:19;;36263:137:0::1;5874:398:1::0;36263:137:0::1;-1:-1:-1::0;;;;;36420:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;36419:27;36411:70;;;::::0;-1:-1:-1;;;36411:70:0;;6479:2:1;36411:70:0::1;::::0;::::1;6461:21:1::0;6518:2;6498:18;;;6491:30;6557:32;6537:18;;;6530:60;6607:18;;36411:70:0::1;6277:354:1::0;36411:70:0::1;-1:-1:-1::0;;;;;36492:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;-1:-1:-1;;36492:33:0::1;36521:4;36492:33:::0;;::::1;::::0;;;36536:16:::1;:30:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;36536:30:0::1;::::0;::::1;::::0;;36584:28;;1871:51:1;;;36584:28:0::1;::::0;1844:18:1;36584:28:0::1;;;;;;;;36189:431:::0;:::o;33179:446::-;33311:4;33328:36;33338:6;33346:9;33357:6;33328:9;:36::i;:::-;33375:220;33398:6;8348:10;33446:138;33502:6;33446:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33446:19:0;;;;;;:11;:19;;;;;;;;8348:10;33446:33;;;;;;;;;;:37;:138::i;:::-;33375:8;:220::i;:::-;-1:-1:-1;33613:4:0;33179:446;;;;;:::o;35857:322::-;35951:7;36009;;35998;:18;;35976:110;;;;-1:-1:-1;;;35976:110:0;;6838:2:1;35976:110:0;;;6820:21:1;6877:2;6857:18;;;6850:30;6916:34;6896:18;;;6889:62;-1:-1:-1;;;6967:18:1;;;6960:40;7017:19;;35976:110:0;6636:406:1;35976:110:0;36097:19;36119:10;:8;:10::i;:::-;36097:32;-1:-1:-1;36147:24:0;:7;36097:32;36147:11;:24::i;:::-;36140:31;35857:322;-1:-1:-1;;;35857:322:0:o;37699:473::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37779:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37771:56;;;::::0;-1:-1:-1;;;37771:56:0;;7249:2:1;37771:56:0::1;::::0;::::1;7231:21:1::0;7288:2;7268:18;;;7261:30;7327:25;7307:18;;;7300:53;7370:18;;37771:56:0::1;7047:347:1::0;37771:56:0::1;37843:9;37838:327;37862:9;:16:::0;37858:20;::::1;37838:327;;;37920:7;-1:-1:-1::0;;;;;37904:23:0::1;:9;37914:1;37904:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37904:12:0::1;:23;37900:254;;;37963:9;37973:16:::0;;:20:::1;::::0;37992:1:::1;::::0;37973:20:::1;:::i;:::-;37963:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;37948:9:::1;:12:::0;;-1:-1:-1;;;;;37963:31:0;;::::1;::::0;37958:1;;37948:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;37948:46:0::1;-1:-1:-1::0;;;;;37948:46:0;;::::1;;::::0;;38013:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;38052:11:::1;:20:::0;;;;:28;;-1:-1:-1;;38052:28:0::1;::::0;;38099:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;38099:15:0;;;;;-1:-1:-1;;;;;;38099:15:0::1;::::0;;;;;37838:327:::1;37699:473:::0;:::o;37900:254::-:1;37880:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37838:327;;;;37699:473:::0;:::o;33633:300::-;8348:10;33748:4;33842:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;33842:34:0;;;;;;;;;;33748:4;;33770:133;;33820:7;;33842:50;;33881:10;33842:38;:50::i;39007:315::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;39175:9:::1;:19:::0;;-1:-1:-1;;39205:31:0;39175:19:::1;;::::0;;::::1;;-1:-1:-1::0;;39205:31:0;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;39281:33:0;39249:21;;;::::1;::::0;;;::::1;-1:-1:-1::0;;39281:33:0;;;;;;;;;::::1;;::::0;;;::::1;::::0;;39007:315::o;34572:631::-;8348:10;34624:14;34687:19;;;:11;:19;;;;;;;;34686:20;34664:114;;;;-1:-1:-1;;;34664:114:0;;8267:2:1;34664:114:0;;;8249:21:1;8306:2;8286:18;;;8279:30;8345:34;8325:18;;;8318:62;-1:-1:-1;;;8396:18:1;;;8389:42;8448:19;;34664:114:0;8065:408:1;34664:114:0;34821:12;34848:18;34880:20;34892:7;34880:11;:20::i;:::-;34791:109;;;;;34912:15;34935:113;34961:7;34983:4;35002:10;35027;:8;:10::i;:::-;34935:11;:113::i;:::-;-1:-1:-1;;;;;;;35079:15:0;;;;;;:7;:15;;;;;;34911:137;;-1:-1:-1;35079:28:0;;34911:137;35079:19;:28::i;:::-;-1:-1:-1;;;;;35061:15:0;;;;;;:7;:15;;;;;:46;35128:7;;:20;;35140:7;35128:11;:20::i;:::-;35118:7;:30;35172:10;;:23;;35187:7;35172:14;:23::i;:::-;35159:10;:36;-1:-1:-1;;;;;34572:631:0:o;19041:131::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;19130:34:::1;-1:-1:-1::0;;;;;19130:26:0;::::1;19157:6:::0;19130:26:::1;:34::i;31549:436::-:0;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;31661:15:::1;::::0;-1:-1:-1;;;;;31640:37:0;;::::1;-1:-1:-1::0;;;31661:15:0;;::::1;;31640:37;;31632:85;;;::::0;-1:-1:-1;;;31632:85:0;;8680:2:1;31632:85:0::1;::::0;::::1;8662:21:1::0;8719:2;8699:18;;;8692:30;8758:34;8738:18;;;8731:62;-1:-1:-1;;;8809:18:1;;;8802:33;8852:19;;31632:85:0::1;8478:399:1::0;31632:85:0::1;31849:15;::::0;:25:::1;::::0;;-1:-1:-1;;;31849:25:0;;;;31790:9;;-1:-1:-1;;;31849:15:0;::::1;-1:-1:-1::0;;;;;31849:15:0::1;::::0;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31831:55:0::1;;31895:4;31902:17;-1:-1:-1::0;;;;;31902:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31831:96;::::0;-1:-1:-1;;;;;;31831:96:0::1;::::0;;;;;;-1:-1:-1;;;;;9368:15:1;;;31831:96:0::1;::::0;::::1;9350:34:1::0;9420:15;;9400:18;;;9393:43;9285:18;;31831:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31815:13;:112:::0;;-1:-1:-1;;;;;;31815:112:0::1;-1:-1:-1::0;;;;;31815:112:0;;::::1;;::::0;;31942:15:::1;:35:::0;;-1:-1:-1;;;;;;31942:35:0::1;-1:-1:-1::0;;;31942:35:0;;;::::1;::::0;;;::::1;;::::0;;-1:-1:-1;31549:436:0:o;38180:111::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38249:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;38249:34:0::1;38279:4;38249:34;::::0;;38180:111::o;35211:638::-;35329:7;35373;;35362;:18;;35354:62;;;;-1:-1:-1;;;35354:62:0;;9649:2:1;35354:62:0;;;9631:21:1;9688:2;9668:18;;;9661:30;9727:33;9707:18;;;9700:61;9778:18;;35354:62:0;9447:355:1;35354:62:0;35459:12;35486:18;35518:20;35530:7;35518:11;:20::i;:::-;35429:109;;;;;35550:15;35567:23;35596:113;35622:7;35644:4;35663:10;35688;:8;:10::i;35596:113::-;35549:160;;;;;35727:17;35722:120;;-1:-1:-1;35768:7:0;-1:-1:-1;35761:14:0;;-1:-1:-1;;35761:14:0;35722:120;35815:15;-1:-1:-1;35808:22:0;;-1:-1:-1;;;35808:22:0;37359:332;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37440:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37439:21;37431:61;;;::::0;-1:-1:-1;;;37431:61:0;;10009:2:1;37431:61:0::1;::::0;::::1;9991:21:1::0;10048:2;10028:18;;;10021:30;10087:29;10067:18;;;10060:57;10134:18;;37431:61:0::1;9807:351:1::0;37431:61:0::1;-1:-1:-1::0;;;;;37507:16:0;::::1;37526:1;37507:16:::0;;;:7:::1;:16;::::0;;;;;:20;37503:109:::1;;-1:-1:-1::0;;;;;37583:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37563:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;37544:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;37503:109:::1;-1:-1:-1::0;;;;;37622:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;37622:27:0::1;37645:4;37622:27:::0;;::::1;::::0;;;37660:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;37660:23:0::1;::::0;;::::1;::::0;;37359:332::o;38836:163::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;38938:9:::1;:15:::0;;-1:-1:-1;;38964:27:0;38938:15:::1;;::::0;;::::1;;-1:-1:-1::0;;38964:27:0;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;38836:163::o;32373:198::-;-1:-1:-1;;;;;32463:20:0;;32439:7;32463:20;;;:11;:20;;;;;;;;32459:49;;;-1:-1:-1;;;;;;32492:16:0;;;;;:7;:16;;;;;;;32373:198::o;32459:49::-;-1:-1:-1;;;;;32546:16:0;;;;;;:7;:16;;;;;;32526:37;;:19;:37::i;16936:148::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;17043:1:::1;17027:6:::0;;17006:40:::1;::::0;-1:-1:-1;;;;;17027:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17006:40:0;17043:1;;17006:40:::1;17074:1;17057:19:::0;;-1:-1:-1;;;;;;17057:19:0::1;::::0;;16936:148::o;18873:160::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;18981:12:::1;-1:-1:-1::0;;;;;18974:29:0::1;;19004:7;16332::::0;16359:6;-1:-1:-1;;;;;16359:6:0;;16294:79;19004:7:::1;18974:51;::::0;-1:-1:-1;;;;;;18974:51:0::1;::::0;;;;;;-1:-1:-1;;;;;10355:32:1;;;18974:51:0::1;::::0;::::1;10337::1::0;10404:18;;;10397:34;;;10310:18;;18974:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18873:160:::0;;:::o;38540:114::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38609:29:0::1;38641:5;38609:29:::0;;;:20:::1;:29;::::0;;;;:37;;-1:-1:-1;;38609:37:0::1;::::0;;38540:114::o;32084:87::-;32123:13;32156:7;32149:14;;;;;:::i;33941:400::-;34061:4;34083:228;8348:10;34133:7;34155:145;34212:15;34155:145;;;;;;;;;;;;;;;;;8348:10;34155:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;34155:34:0;;;;;;;;;;;;:38;:145::i;17991:385::-;18057:14;;-1:-1:-1;;;;;18057:14:0;18075:10;18057:28;18035:113;;;;-1:-1:-1;;;18035:113:0;;10894:2:1;18035:113:0;;;10876:21:1;10933:2;10913:18;;;10906:30;10972:34;10952:18;;;10945:62;-1:-1:-1;;;11023:18:1;;;11016:33;11066:19;;18035:113:0;10692:399:1;18035:113:0;18185:9;;18167:15;:27;18159:77;;;;-1:-1:-1;;;18159:77:0;;11298:2:1;18159:77:0;;;11280:21:1;11337:2;11317:18;;;11310:30;11376:34;11356:18;;;11349:62;-1:-1:-1;;;11427:18:1;;;11420:35;11472:19;;18159:77:0;11096:401:1;18159:77:0;18281:14;;;18273:6;;18252:44;;-1:-1:-1;;;;;18281:14:0;;;;18273:6;;;;-1:-1:-1;;;;;;;;;;;18252:44:0;;18316:14;;;;18307:23;;-1:-1:-1;;;;;;18307:23:0;;;-1:-1:-1;;;;;18316:14:0;;18307:23;;;;18341:27;;;17991:385::o;32579:199::-;32684:4;32706:42;8348:10;32730:9;32741:6;32706:9;:42::i;39622:172::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;39749:37:::1;39780:5;39749:26;39761:13;39749:7;;:11;;:26;;;;:::i;:::-;:30:::0;::::1;:37::i;:::-;39732:14;:54:::0;-1:-1:-1;39622:172:0:o;36765:586::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36852:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;36844:65;;;::::0;-1:-1:-1;;;36844:65:0;;11704:2:1;36844:65:0::1;::::0;::::1;11686:21:1::0;11743:2;11723:18;;;11716:30;11782:28;11762:18;;;11755:56;11828:18;;36844:65:0::1;11502:350:1::0;36844:65:0::1;36925:9;36920:376;36944:16;:23:::0;36940:27;::::1;36920:376;;;37016:7;-1:-1:-1::0;;;;;36993:30:0::1;:16;37010:1;36993:19;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;36993:19:0::1;:30;36989:296;;;37066:16;37105:23:::0;;:27:::1;::::0;37131:1:::1;::::0;37105:27:::1;:::i;:::-;37066:85;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;37044:16:::1;:19:::0;;-1:-1:-1;;;;;37066:85:0;;::::1;::::0;37061:1;;37044:19;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:107:::0;;-1:-1:-1;;;;;;37044:107:0::1;-1:-1:-1::0;;;;;37044:107:0;;::::1;;::::0;;37170:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;37170:34:0::1;::::0;;37223:16:::1;:22:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;37223:22:0;;;;;-1:-1:-1;;;;;;37223:22:0::1;::::0;;;;;37264:5:::1;;36989:296;36969:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36920:376;;;-1:-1:-1::0;37311:32:0::1;::::0;-1:-1:-1;;;;;1889:32:1;;1871:51;;37311:32:0::1;::::0;1859:2:1;1844:18;37311:32:0::1;1698:230:1::0;39802:171:0;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;39879:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;39879:32:0::1;-1:-1:-1::0;;;;39879:32:0;;::::1;;::::0;;39927:38:::1;::::0;::::1;::::0;::::1;::::0;39903:8;567:14:1;560:22;542:41;;530:2;515:18;;402:187;39478:136:0;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;39570:36:::1;39600:5;39570:25;39582:12;39570:7;;:11;;:25;;;;:::i;:36::-;39555:12;:51:::0;-1:-1:-1;39478:136:0:o;17693:226::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;17774:6:::1;::::0;;;17757:23;;-1:-1:-1;;;;;;17757:23:0;;::::1;-1:-1:-1::0;;;;;17774:6:0;::::1;17757:23;::::0;;;17791:19:::1;::::0;;17833:22:::1;17851:4:::0;17833:15:::1;:22;:::i;:::-;17821:9;:34:::0;17908:1:::1;17892:6:::0;;17871:40:::1;::::0;-1:-1:-1;;;;;17892:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17871:40:0;17908:1;;17871:40:::1;17693:226:::0;:::o;38299:110::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38366:27:0::1;38396:5;38366:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;38366:35:0::1;::::0;;38299:110::o;39330:140::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;39421:29:::1;:41:::0;39330:140::o;17239:281::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17342:22:0;::::1;17320:110;;;::::0;-1:-1:-1;;;17320:110:0;;12192:2:1;17320:110:0::1;::::0;::::1;12174:21:1::0;12231:2;12211:18;;;12204:30;12270:34;12250:18;;;12243:62;-1:-1:-1;;;12321:18:1;;;12314:36;12367:19;;17320:110:0::1;11990:402:1::0;17320:110:0::1;17467:6;::::0;;17446:38:::1;::::0;-1:-1:-1;;;;;17446:38:0;;::::1;::::0;17467:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;17446:38:0;::::1;17495:6;:17:::0;;-1:-1:-1;;;;;;17495:17:0::1;-1:-1:-1::0;;;;;17495:17:0;;;::::1;::::0;;;::::1;::::0;;17239:281::o;38662:166::-;16506:6;;-1:-1:-1;;;;;16506:6:0;8348:10;16506:22;16498:67;;;;-1:-1:-1;;;16498:67:0;;;;;;;:::i;:::-;38765:10:::1;:16:::0;;-1:-1:-1;;38792:28:0;38765:16;::::1;::::0;;::::1;;-1:-1:-1::0;;38792:28:0;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;38662:166::o;43368:371::-;-1:-1:-1;;;;;43495:19:0;;43487:68;;;;-1:-1:-1;;;43487:68:0;;12599:2:1;43487:68:0;;;12581:21:1;12638:2;12618:18;;;12611:30;12677:34;12657:18;;;12650:62;-1:-1:-1;;;12728:18:1;;;12721:34;12772:19;;43487:68:0;12397:400:1;43487:68:0;-1:-1:-1;;;;;43574:21:0;;43566:68;;;;-1:-1:-1;;;43566:68:0;;13004:2:1;43566:68:0;;;12986:21:1;13043:2;13023:18;;;13016:30;13082:34;13062:18;;;13055:62;-1:-1:-1;;;13133:18:1;;;13126:32;13175:19;;43566:68:0;12802:398:1;43566:68:0;-1:-1:-1;;;;;43647:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;43699:32;;1662:25:1;;;43699:32:0;;1635:18:1;43699:32:0;;;;;;;43368:371;;;:::o;43747:2670::-;-1:-1:-1;;;;;43869:18:0;;43861:68;;;;-1:-1:-1;;;43861:68:0;;13407:2:1;43861:68:0;;;13389:21:1;13446:2;13426:18;;;13419:30;13485:34;13465:18;;;13458:62;-1:-1:-1;;;13536:18:1;;;13529:35;13581:19;;43861:68:0;13205:401:1;43861:68:0;-1:-1:-1;;;;;43948:16:0;;43940:64;;;;-1:-1:-1;;;43940:64:0;;13813:2:1;43940:64:0;;;13795:21:1;13852:2;13832:18;;;13825:30;13891:34;13871:18;;;13864:62;-1:-1:-1;;;13942:18:1;;;13935:33;13985:19;;43940:64:0;13611:399:1;43940:64:0;44032:1;44023:6;:10;44015:64;;;;-1:-1:-1;;;44015:64:0;;14217:2:1;44015:64:0;;;14199:21:1;14256:2;14236:18;;;14229:30;14295:34;14275:18;;;14268:62;-1:-1:-1;;;14346:18:1;;;14339:39;14395:19;;44015:64:0;14015:405:1;44015:64:0;-1:-1:-1;;;;;44099:23:0;;;;;;:17;:23;;;;;;;;44098:24;44090:56;;;;-1:-1:-1;;;44090:56:0;;14627:2:1;44090:56:0;;;14609:21:1;14666:2;14646:18;;;14639:30;-1:-1:-1;;;14685:18:1;;;14678:49;14744:18;;44090:56:0;14425:343:1;44090:56:0;44184:10;44166:29;;;;:17;:29;;;;;;;;44165:30;44157:62;;;;-1:-1:-1;;;44157:62:0;;14975:2:1;44157:62:0;;;14957:21:1;15014:2;14994:18;;;14987:30;-1:-1:-1;;;15033:18:1;;;15026:49;15092:18;;44157:62:0;14773:343:1;44157:62:0;44257:9;44239:28;;;;:17;:28;;;;;;;;44238:29;44230:53;;;;-1:-1:-1;;;44230:53:0;;15323:2:1;44230:53:0;;;15305:21:1;15362:2;15342:18;;;15335:30;-1:-1:-1;;;15381:18:1;;;15374:41;15432:18;;44230:53:0;15121:335:1;44230:53:0;-1:-1:-1;;;;;44301:26:0;;;;;;:20;:26;;;;;;;;44300:27;:56;;;;-1:-1:-1;;;;;;44332:24:0;;;;;;:20;:24;;;;;;;;44331:25;44300:56;44296:339;;;44392:12;;44382:6;:22;;44374:74;;;;-1:-1:-1;;;44374:74:0;;15663:2:1;44374:74:0;;;15645:21:1;15702:2;15682:18;;;15675:30;15741:34;15721:18;;;15714:62;-1:-1:-1;;;15792:18:1;;;15785:38;15840:19;;44374:74:0;15461:404:1;44374:74:0;44486:13;;-1:-1:-1;;;;;44480:19:0;;;44486:13;;44480:19;44477:147;;44554:14;;44545:6;44529:13;44539:2;44529:9;:13::i;:::-;:22;;;;:::i;:::-;:39;44521:87;;;;-1:-1:-1;;;44521:87:0;;16072:2:1;44521:87:0;;;16054:21:1;16111:2;16091:18;;;16084:30;16150:34;16130:18;;;16123:62;-1:-1:-1;;;16201:18:1;;;16194:33;16244:19;;44521:87:0;15870:399:1;44521:87:0;44929:28;44960:24;44978:4;44960:9;:24::i;:::-;44929:55;;45025:12;;45001:20;:36;44997:104;;-1:-1:-1;45077:12:0;;44997:104;45177:29;;45140:66;;;;;;;45235:53;;-1:-1:-1;45272:16:0;;-1:-1:-1;;;45272:16:0;;;;45271:17;45235:53;:91;;;;-1:-1:-1;45313:13:0;;-1:-1:-1;;;;;45305:21:0;;;45313:13;;45305:21;;45235:91;:129;;;;-1:-1:-1;45343:21:0;;-1:-1:-1;;;45343:21:0;;;;45235:129;45217:318;;;45414:29;;45391:52;;45487:36;45502:20;45487:14;:36::i;:::-;-1:-1:-1;;;;;45729:24:0;;45608:12;45729:24;;;:18;:24;;;;;;45623:4;;45729:24;;;:50;;-1:-1:-1;;;;;;45757:22:0;;;;;;:18;:22;;;;;;;;45729:50;45728:102;;;-1:-1:-1;45793:13:0;;-1:-1:-1;;;;;45785:21:0;;;45793:13;;45785:21;;;;:44;;-1:-1:-1;45816:13:0;;-1:-1:-1;;;;;45810:19:0;;;45816:13;;45810:19;;45785:44;45724:566;;;-1:-1:-1;45857:5:0;45724:566;;;45938:13;;-1:-1:-1;;;;;45930:21:0;;;45938:13;;45930:21;:55;;;;-1:-1:-1;45969:15:0;;-1:-1:-1;;;;;45955:30:0;;;-1:-1:-1;;;45969:15:0;;;;45955:30;;45930:55;45927:144;;;46006:9;;;-1:-1:-1;;;;46024:31:0;;-1:-1:-1;;46006:9:0;;;;;;;45996:19;;46024:31;;;;;;;46040:15;-1:-1:-1;;45996:19:0;;;;;;46040:15;;;;;-1:-1:-1;;;46024:31:0;;;;45927:144;46128:13;;-1:-1:-1;;;;;46122:19:0;;;46128:13;;46122:19;:55;;;;-1:-1:-1;46161:15:0;;-1:-1:-1;;;;;46145:32:0;;;-1:-1:-1;;;46161:15:0;;;;46145:32;;46122:55;46118:161;;;46205:10;;;-1:-1:-1;;;;46231:32:0;;-1:-1:-1;;46205:10:0;;;;;;;46195:20;;46231:32;;;;;;;46247:16;-1:-1:-1;;46195:20:0;;;;;;46247:16;;;;;-1:-1:-1;;;46231:32:0;;;;46118:161;46368:41;46383:4;46389:2;46393:6;46401:7;46368:14;:41::i;:::-;43850:2567;;;43747:2670;;;:::o;4560:226::-;4680:7;4716:12;4708:6;;;;4700:29;;;;-1:-1:-1;;;4700:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4740:9:0;4752:5;4756:1;4752;:5;:::i;:::-;4740:17;4560:226;-1:-1:-1;;;;;4560:226:0:o;41242:164::-;41284:7;41305:15;41322;41341:19;:17;:19::i;:::-;41304:56;;-1:-1:-1;41304:56:0;-1:-1:-1;41378:20:0;41304:56;;41378:11;:20::i;:::-;41371:27;;;;41242:164;:::o;5992:132::-;6050:7;6077:39;6081:1;6084;6077:39;;;;;;;;;;;;;;;;;:3;:39::i;3657:181::-;3715:7;;3747:5;3751:1;3747;:5;:::i;:::-;3735:17;;3776:1;3771;:6;;3763:46;;;;-1:-1:-1;;;3763:46:0;;16476:2:1;3763:46:0;;;16458:21:1;16515:2;16495:18;;;16488:30;16554:29;16534:18;;;16527:57;16601:18;;3763:46:0;16274:351:1;40230:414:0;40331:7;40353;40375;40410:12;40425:24;40441:7;40425:15;:24::i;:::-;40410:39;;40460:18;40481:30;40503:7;40481:21;:30::i;:::-;40460:51;-1:-1:-1;40522:23:0;40548:33;40460:51;40548:17;:7;40560:4;40548:11;:17::i;:::-;:21;;:33::i;:::-;40522:59;40619:4;;-1:-1:-1;40625:10:0;;-1:-1:-1;40230:414:0;;-1:-1:-1;;;40230:414:0:o;40652:582::-;40851:7;;;;40948:24;:7;40960:11;40948;:24::i;:::-;40930:42;-1:-1:-1;40983:12:0;40998:21;:4;41007:11;40998:8;:21::i;:::-;40983:36;-1:-1:-1;41030:18:0;41051:27;:10;41066:11;41051:14;:27::i;:::-;41030:48;-1:-1:-1;41089:23:0;41115:61;41030:48;41115:31;:7;41141:4;41115:25;:31::i;:61::-;41195:7;;;;-1:-1:-1;41221:4:0;;-1:-1:-1;40652:582:0;;-1:-1:-1;;;;;;;40652:582:0:o;4121:136::-;4179:7;4206:43;4210:1;4213;4206:43;;;;;;;;;;;;;;;;;:3;:43::i;10872:469::-;11001:6;10976:21;:31;;10954:110;;;;-1:-1:-1;;;10954:110:0;;16832:2:1;10954:110:0;;;16814:21:1;16871:2;16851:18;;;16844:30;16910:31;16890:18;;;16883:59;16959:18;;10954:110:0;16630:353:1;10954:110:0;11156:12;11174:9;-1:-1:-1;;;;;11174:14:0;11196:6;11174:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11155:52;;;11240:7;11218:115;;;;-1:-1:-1;;;11218:115:0;;17400:2:1;11218:115:0;;;17382:21:1;17439:2;17419:18;;;17412:30;17478:34;17458:18;;;17451:62;17549:28;17529:18;;;17522:56;17595:19;;11218:115:0;17198:422:1;5045:471:0;5103:7;5348:6;5344:47;;-1:-1:-1;5378:1:0;5371:8;;5344:47;5403:9;5415:5;5419:1;5415;:5;:::i;:::-;5403:17;-1:-1:-1;5448:1:0;5439:5;5443:1;5403:17;5439:5;:::i;:::-;:10;5431:56;;;;-1:-1:-1;;;5431:56:0;;18222:2:1;5431:56:0;;;18204:21:1;18261:2;18241:18;;;18234:30;18300:34;18280:18;;;18273:62;-1:-1:-1;;;18351:18:1;;;18344:31;18392:19;;5431:56:0;18020:397:1;46427:977:0;30565:16;:23;;-1:-1:-1;;;;30565:23:0;-1:-1:-1;;;30565:23:0;;;;46578:27:::1;:20:::0;46603:1:::1;46578:24;:27::i;:::-;46563:42:::0;-1:-1:-1;46616:17:0::1;46636:30;:20:::0;46563:42;46636:24:::1;:30::i;:::-;46616:50:::0;-1:-1:-1;46969:21:0::1;47035:22;47052:4:::0;47035:16:::1;:22::i;:::-;47188:18;47209:41;:21;47235:14:::0;47209:25:::1;:41::i;:::-;47188:62;;47300:35;47313:9;47324:10;47300:12;:35::i;:::-;47353:43;::::0;;18624:25:1;;;18680:2;18665:18;;18658:34;;;18708:18;;;18701:34;;;47353:43:0::1;::::0;18612:2:1;18597:18;47353:43:0::1;;;;;;;-1:-1:-1::0;;30611:16:0;:24;;-1:-1:-1;;;;30611:24:0;;;-1:-1:-1;;;46427:977:0:o;48609:893::-;48765:7;48760:71;;48785:7;:11;;-1:-1:-1;;;;48808:17:0;;;48760:71;-1:-1:-1;;;;;48847:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;48871:22:0;;;;;;:11;:22;;;;;;;;48870:23;48847:46;48843:597;;;48910:48;48932:6;48940:9;48951:6;48910:21;:48::i;:::-;48843:597;;;-1:-1:-1;;;;;48981:19:0;;;;;;:11;:19;;;;;;;;48980:20;:46;;;;-1:-1:-1;;;;;;49004:22:0;;;;;;:11;:22;;;;;;;;48980:46;48976:464;;;49043:46;49063:6;49071:9;49082:6;49043:19;:46::i;48976:464::-;-1:-1:-1;;;;;49112:19:0;;;;;;:11;:19;;;;;;;;49111:20;:47;;;;-1:-1:-1;;;;;;49136:22:0;;;;;;:11;:22;;;;;;;;49135:23;49111:47;49107:333;;;49175:44;49193:6;49201:9;49212:6;49175:17;:44::i;49107:333::-;-1:-1:-1;;;;;49241:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;49264:22:0;;;;;;:11;:22;;;;;;;;49241:45;49237:203;;;49303:48;49325:6;49333:9;49344:6;49303:21;:48::i;49237:203::-;49384:44;49402:6;49410:9;49421:6;49384:17;:44::i;:::-;-1:-1:-1;;49454:7:0;:11;;-1:-1:-1;;;;49477:17:0;;;-1:-1:-1;;48609:893:0:o;41414:605::-;41512:7;;41548;;41465;;;;;41566:338;41590:9;:16;41586:20;;41566:338;;;41674:7;41650;:21;41658:9;41668:1;41658:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41658:12:0;41650:21;;;;;;;;;;;;;:31;;:83;;;41726:7;41702;:21;41710:9;41720:1;41710:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41710:12:0;41702:21;;;;;;;;;;;;;:31;41650:83;41628:146;;;41757:7;;41766;;41749:25;;;;;;;41414:605;;:::o;41628:146::-;41799:34;41811:7;:21;41819:9;41829:1;41819:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41819:12:0;41811:21;;;;;;;;;;;;;41799:7;;:11;:34::i;:::-;41789:44;;41858:34;41870:7;:21;41878:9;41888:1;41878:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41878:12:0;41870:21;;;;;;;;;;;;;41858:7;;:11;:34::i;:::-;41848:44;-1:-1:-1;41608:3:0;;;;:::i;:::-;;;;41566:338;;;-1:-1:-1;41940:7:0;;41928;;:20;;:11;:20::i;:::-;41918:7;:30;41914:61;;;41958:7;;41967;;41950:25;;;;;;41414:605;;:::o;41914:61::-;41994:7;;42003;;-1:-1:-1;41414:605:0;-1:-1:-1;41414:605:0:o;6620:312::-;6740:7;6775:12;6768:5;6760:28;;;;-1:-1:-1;;;6760:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6799:9:0;6811:5;6815:1;6811;:5;:::i;42390:130::-;42493:7;;42454;;42481:31;;42506:5;;42481:20;;:7;;42493;;;;;42481:11;:20::i;42528:174::-;42669:13;;42625:7;;42657:37;;42688:5;;42657:26;;:7;;-1:-1:-1;;;42669:13:0;;;;42657:11;:26::i;47412:589::-;47562:16;;;47576:1;47562:16;;;;;;;;47538:21;;47562:16;;;;;;;;;;-1:-1:-1;47562:16:0;47538:40;;47607:4;47589;47594:1;47589:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;47589:23:0;;;-1:-1:-1;;;;;47589:23:0;;;;;47633:15;;;;;;;;;-1:-1:-1;;;;;47633:15:0;-1:-1:-1;;;;;47633:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47623:4;47628:1;47623:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47623:32:0;;;:7;;;;;;;;;:32;47700:15;;47668:62;;47685:4;;-1:-1:-1;;;47700:15:0;;;47718:11;47668:8;:62::i;:::-;47769:15;;:224;;-1:-1:-1;;;47769:224:0;;-1:-1:-1;;;47769:15:0;;;-1:-1:-1;;;;;47769:15:0;;:66;;:224;;47850:11;;47876:1;;47920:4;;47947;;47967:15;;47769:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48009:519;48189:15;;48157:62;;48174:4;;-1:-1:-1;;;48189:15:0;;-1:-1:-1;;;;;48189:15:0;48207:11;48157:8;:62::i;:::-;48262:15;;:258;;-1:-1:-1;;;48262:258:0;;48334:4;48262:258;;;20204:34:1;;;20254:18;;;20247:34;;;48380:1:0;20297:18:1;;;20290:34;;;20340:18;;;20333:34;20383:19;;;20376:44;48494:15:0;20436:19:1;;;20429:35;-1:-1:-1;;;48262:15:0;;;-1:-1:-1;;;;;48262:15:0;;:31;;48301:9;;20138:19:1;;48262:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48009:519;;:::o;51033:777::-;51184:23;51222:12;51249:18;51281:20;51293:7;51281:11;:20::i;:::-;51169:132;;;;;;51313:15;51330:23;51355:12;51371:113;51397:7;51419:4;51438:10;51463;:8;:10::i;51371:113::-;-1:-1:-1;;;;;51515:15:0;;;;;;:7;:15;;;;;;51312:172;;-1:-1:-1;51312:172:0;;-1:-1:-1;51312:172:0;-1:-1:-1;51515:28:0;;51535:7;51515:19;:28::i;:::-;-1:-1:-1;;;;;51497:15:0;;;;;;:7;:15;;;;;;;;:46;;;;51572:7;:15;;;;:28;;51592:7;51572:19;:28::i;:::-;-1:-1:-1;;;;;51554:15:0;;;;;;;:7;:15;;;;;;:46;;;;51632:18;;;;;;;:39;;51655:15;51632:22;:39::i;:::-;-1:-1:-1;;;;;51611:18:0;;;;;;:7;:18;;;;;:60;51682:26;51697:10;51682:14;:26::i;:::-;51719:23;51731:4;51737;51719:11;:23::i;:::-;51775:9;-1:-1:-1;;;;;51758:44:0;51767:6;-1:-1:-1;;;;;51758:44:0;;51786:15;51758:44;;;;1662:25:1;;1650:2;1635:18;;1516:177;51758:44:0;;;;;;;;51158:652;;;;;;51033:777;;;:::o;50236:789::-;50385:23;50423:12;50450:18;50482:20;50494:7;50482:11;:20::i;:::-;50370:132;;;;;;50514:15;50531:23;50556:12;50572:113;50598:7;50620:4;50639:10;50664;:8;:10::i;50572:113::-;-1:-1:-1;;;;;50716:15:0;;;;;;:7;:15;;;;;;50513:172;;-1:-1:-1;50513:172:0;;-1:-1:-1;50513:172:0;-1:-1:-1;50716:28:0;;50513:172;50716:19;:28::i;:::-;-1:-1:-1;;;;;50698:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;50776:18;;;;;:7;:18;;;;;:39;;50799:15;50776:22;:39::i;:::-;-1:-1:-1;;;;;50755:18:0;;;;;;:7;:18;;;;;;;;:60;;;;50847:7;:18;;;;:39;;50870:15;50847:22;:39::i;49510:716::-;49657:23;49695:12;49722:18;49754:20;49766:7;49754:11;:20::i;:::-;49642:132;;;;;;49786:15;49803:23;49828:12;49844:113;49870:7;49892:4;49911:10;49936;:8;:10::i;49844:113::-;-1:-1:-1;;;;;49988:15:0;;;;;;:7;:15;;;;;;49785:172;;-1:-1:-1;49785:172:0;;-1:-1:-1;49785:172:0;-1:-1:-1;49988:28:0;;49785:172;49988:19;:28::i;51818:848::-;51969:23;52007:12;52034:18;52066:20;52078:7;52066:11;:20::i;:::-;51954:132;;;;;;52098:15;52115:23;52140:12;52156:113;52182:7;52204:4;52223:10;52248;:8;:10::i;52156:113::-;-1:-1:-1;;;;;52300:15:0;;;;;;:7;:15;;;;;;52097:172;;-1:-1:-1;52097:172:0;;-1:-1:-1;52097:172:0;-1:-1:-1;52300:28:0;;52320:7;52300:19;:28::i;:::-;-1:-1:-1;;;;;52282:15:0;;;;;;:7;:15;;;;;;;;:46;;;;52357:7;:15;;;;:28;;52377:7;52357:19;:28::i;42027:355::-;42090:19;42112:10;:8;:10::i;:::-;42090:32;-1:-1:-1;42133:18:0;42154:27;:10;42090:32;42154:14;:27::i;:::-;42233:4;42217:22;;;;:7;:22;;;;;;42133:48;;-1:-1:-1;42217:38:0;;42133:48;42217:26;:38::i;:::-;42208:4;42192:22;;;;:7;:22;;;;;;;;:63;;;;42270:11;:26;;;;;;42266:108;;;42352:4;42336:22;;;;:7;:22;;;;;;:38;;42363:10;42336:26;:38::i;:::-;42327:4;42311:22;;;;:7;:22;;;;;:63;42079:303;;42027:355;:::o;40075:147::-;40153:7;;:17;;40165:4;40153:11;:17::i;:::-;40143:7;:27;40194:10;;:20;;40209:4;40194:14;:20::i;:::-;40181:10;:33;-1:-1:-1;;40075:147:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:597::-;706:4;735:2;764;753:9;746:21;796:6;790:13;839:6;834:2;823:9;819:18;812:34;864:1;874:140;888:6;885:1;882:13;874:140;;;983:14;;;979:23;;973:30;949:17;;;968:2;945:26;938:66;903:10;;874:140;;;1032:6;1029:1;1026:13;1023:91;;;1102:1;1097:2;1088:6;1077:9;1073:22;1069:31;1062:42;1023:91;-1:-1:-1;1175:2:1;1154:15;-1:-1:-1;;1150:29:1;1135:45;;;;1182:2;1131:54;;594:597;-1:-1:-1;;;594:597:1:o;1196:315::-;1264:6;1272;1325:2;1313:9;1304:7;1300:23;1296:32;1293:52;;;1341:1;1338;1331:12;1293:52;1380:9;1367:23;1399:31;1424:5;1399:31;:::i;:::-;1449:5;1501:2;1486:18;;;;1473:32;;-1:-1:-1;;;1196:315:1:o;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2394:180::-;2453:6;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;-1:-1:-1;2545:23:1;;2394:180;-1:-1:-1;2394:180:1:o;2768:156::-;2834:20;;2894:4;2883:16;;2873:27;;2863:55;;2914:1;2911;2904:12;2863:55;2768:156;;;:::o;2929:393::-;3007:6;3015;3023;3031;3084:3;3072:9;3063:7;3059:23;3055:33;3052:53;;;3101:1;3098;3091:12;3052:53;3124:27;3141:9;3124:27;:::i;:::-;3114:37;;3170:36;3202:2;3191:9;3187:18;3170:36;:::i;:::-;3160:46;;3225:36;3257:2;3246:9;3242:18;3225:36;:::i;:::-;3215:46;;3280:36;3312:2;3301:9;3297:18;3280:36;:::i;:::-;3270:46;;2929:393;;;;;;;:::o;3587:118::-;3673:5;3666:13;3659:21;3652:5;3649:32;3639:60;;3695:1;3692;3685:12;3710:309;3775:6;3783;3836:2;3824:9;3815:7;3811:23;3807:32;3804:52;;;3852:1;3849;3842:12;3804:52;3888:9;3875:23;3865:33;;3948:2;3937:9;3933:18;3920:32;3961:28;3983:5;3961:28;:::i;:::-;4008:5;3998:15;;;3710:309;;;;;:::o;4232:252::-;4296:6;4304;4357:2;4345:9;4336:7;4332:23;4328:32;4325:52;;;4373:1;4370;4363:12;4325:52;4396:27;4413:9;4396:27;:::i;:::-;4386:37;;4442:36;4474:2;4463:9;4459:18;4442:36;:::i;:::-;4432:46;;4232:252;;;;;:::o;4489:241::-;4545:6;4598:2;4586:9;4577:7;4573:23;4569:32;4566:52;;;4614:1;4611;4604:12;4566:52;4653:9;4640:23;4672:28;4694:5;4672:28;:::i;4735:388::-;4803:6;4811;4864:2;4852:9;4843:7;4839:23;4835:32;4832:52;;;4880:1;4877;4870:12;4832:52;4919:9;4906:23;4938:31;4963:5;4938:31;:::i;:::-;4988:5;-1:-1:-1;5045:2:1;5030:18;;5017:32;5058:33;5017:32;5058:33;:::i;5128:380::-;5207:1;5203:12;;;;5250;;;5271:61;;5325:4;5317:6;5313:17;5303:27;;5271:61;5378:2;5370:6;5367:14;5347:18;5344:38;5341:161;;;5424:10;5419:3;5415:20;5412:1;5405:31;5459:4;5456:1;5449:15;5487:4;5484:1;5477:15;5341:161;;5128:380;;;:::o;5513:356::-;5715:2;5697:21;;;5734:18;;;5727:30;5793:34;5788:2;5773:18;;5766:62;5860:2;5845:18;;5513:356::o;7399:127::-;7460:10;7455:3;7451:20;7448:1;7441:31;7491:4;7488:1;7481:15;7515:4;7512:1;7505:15;7531:127;7592:10;7587:3;7583:20;7580:1;7573:31;7623:4;7620:1;7613:15;7647:4;7644:1;7637:15;7663:125;7703:4;7731:1;7728;7725:8;7722:34;;;7736:18;;:::i;:::-;-1:-1:-1;7773:9:1;;7663:125::o;7793:127::-;7854:10;7849:3;7845:20;7842:1;7835:31;7885:4;7882:1;7875:15;7909:4;7906:1;7899:15;7925:135;7964:3;-1:-1:-1;;7985:17:1;;7982:43;;;8005:18;;:::i;:::-;-1:-1:-1;8052:1:1;8041:13;;7925:135::o;8882:251::-;8952:6;9005:2;8993:9;8984:7;8980:23;8976:32;8973:52;;;9021:1;9018;9011:12;8973:52;9053:9;9047:16;9072:31;9097:5;9072:31;:::i;10442:245::-;10509:6;10562:2;10550:9;10541:7;10537:23;10533:32;10530:52;;;10578:1;10575;10568:12;10530:52;10610:9;10604:16;10629:28;10651:5;10629:28;:::i;11857:128::-;11897:3;11928:1;11924:6;11921:1;11918:13;11915:39;;;11934:18;;:::i;:::-;-1:-1:-1;11970:9:1;;11857:128::o;17625:168::-;17665:7;17731:1;17727;17723:6;17719:14;17716:1;17713:21;17708:1;17701:9;17694:17;17690:45;17687:71;;;17738:18;;:::i;:::-;-1:-1:-1;17778:9:1;;17625:168::o;17798:217::-;17838:1;17864;17854:132;;17908:10;17903:3;17899:20;17896:1;17889:31;17943:4;17940:1;17933:15;17971:4;17968:1;17961:15;17854:132;-1:-1:-1;18000:9:1;;17798:217::o;18878:980::-;19140:4;19188:3;19177:9;19173:19;19219:6;19208:9;19201:25;19245:2;19283:6;19278:2;19267:9;19263:18;19256:34;19326:3;19321:2;19310:9;19306:18;19299:31;19350:6;19385;19379:13;19416:6;19408;19401:22;19454:3;19443:9;19439:19;19432:26;;19493:2;19485:6;19481:15;19467:29;;19514:1;19524:195;19538:6;19535:1;19532:13;19524:195;;;19603:13;;-1:-1:-1;;;;;19599:39:1;19587:52;;19694:15;;;;19659:12;;;;19635:1;19553:9;19524:195;;;-1:-1:-1;;;;;;;19775:32:1;;;;19770:2;19755:18;;19748:60;-1:-1:-1;;;19839:3:1;19824:19;19817:35;19736:3;18878:980;-1:-1:-1;;;18878:980:1:o;20475:306::-;20563:6;20571;20579;20632:2;20620:9;20611:7;20607:23;20603:32;20600:52;;;20648:1;20645;20638:12;20600:52;20677:9;20671:16;20661:26;;20727:2;20716:9;20712:18;20706:25;20696:35;;20771:2;20760:9;20756:18;20750:25;20740:35;;20475:306;;;;;:::o
Swarm Source
ipfs://a747a9e93145367d4616534cd88fb472d275b2ebea4ca992c812849690db841a
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.