Overview
Max Total Supply
100,000,000 DSQ
Holders
869 (0.00%)
Transfers
-
0
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
-
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
DollarSqueeze
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-10-20
*/
/**
TG: https://t.me/DollarSqueeze
Website: https://dollarsqueeze.io
Author: @bLock_doctor
*/
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.12;
library Address {
function isContract(address account) internal view returns (bool) {
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) private pure returns (bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
interface IUniRouterV1
{
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniRouterV2 is IUniRouterV1
{
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IDEXFactory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
library SafeMath {
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
interface IDividendDistributor {
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
function setShare(address shareholder, uint256 amount) external;
function deposit() external payable;
function process(uint256 gas) external;
}
contract DividendDistributor is IDividendDistributor {
using SafeMath for uint256;
address _token;
struct Share {
uint256 amount;
uint256 totalExcluded;
uint256 totalRealised;
}
IUniRouterV2 router;
address[] shareholders;
mapping (address => uint256) shareholderIndexes;
mapping (address => uint256) shareholderClaims;
mapping (address => Share) public shares;
uint256 public totalShares;
uint256 public totalDividends;
uint256 public totalDistributed;
uint256 public dividendsPerShare;
uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
uint256 public minPeriod = 1 hours;
uint256 public minDistribution = 1;
uint256 currentIndex;
bool initialized;
modifier initialization() {
require(!initialized);
_;
initialized = true;
}
modifier onlyToken() {
require(msg.sender == _token); _;
}
constructor (IUniRouterV2 _router) {
router = _router;
_token = msg.sender;
}
function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
minPeriod = newMinPeriod;
minDistribution = newMinDistribution;
}
function setShare(address shareholder, uint256 amount) external override onlyToken {
if(shares[shareholder].amount > 0){
distributeDividend(shareholder);
}
if(amount > 0 && shares[shareholder].amount == 0){
addShareholder(shareholder);
}else if(amount == 0 && shares[shareholder].amount > 0){
removeShareholder(shareholder);
}
totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
shares[shareholder].amount = amount;
shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
}
function deposit() external payable override onlyToken
{
totalDividends = totalDividends.add(msg.value);
dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(msg.value).div(totalShares));
}
function process(uint256 gas) external override onlyToken {
uint256 shareholderCount = shareholders.length;
if(shareholderCount == 0) { return; }
uint256 iterations = 0;
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
while(gasUsed < gas && iterations < shareholderCount) {
if(currentIndex >= shareholderCount){ currentIndex = 0; }
if(shouldDistribute(shareholders[currentIndex])){
distributeDividend(shareholders[currentIndex]);
}
gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
gasLeft = gasleft();
currentIndex++;
iterations++;
}
}
function shouldDistribute(address shareholder) internal view returns (bool) {
return shareholderClaims[shareholder] + minPeriod < block.timestamp
&& getUnpaidEarnings(shareholder) > minDistribution;
}
function distributeDividend(address shareholder) internal {
if(shares[shareholder].amount == 0){ return; }
uint256 amount = getUnpaidEarnings(shareholder);
if(amount > 0){
totalDistributed = totalDistributed.add(amount);
(bool success, ) = payable(shareholder).call{value: amount, gas: 30000}("");
success = false;
shareholderClaims[shareholder] = block.timestamp;
shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
}
}
function claimDividend() external {
require(shouldDistribute(msg.sender), "Too soon. Need to wait!");
distributeDividend(msg.sender);
}
function getUnpaidEarnings(address shareholder) public view returns (uint256) {
if(shares[shareholder].amount == 0){ return 0; }
uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
return shareholderTotalDividends.sub(shareholderTotalExcluded);
}
function getCumulativeDividends(uint256 share) internal view returns (uint256) {
return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
}
function addShareholder(address shareholder) internal {
shareholderIndexes[shareholder] = shareholders.length;
shareholders.push(shareholder);
}
function removeShareholder(address shareholder) internal {
shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
shareholders.pop();
}
}
contract Ownable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor () {
_owner = msg.sender;
emit OwnershipTransferred(address(0), _owner);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(msg.sender==owner(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_owner = address(0);
emit OwnershipTransferred(_owner, address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_owner = newOwner;
emit OwnershipTransferred(_owner, newOwner);
}
}
contract DollarSqueeze is IERC20, Ownable {
string private _tokenName="DollarSqueeze";
string private _tokenSymbol="DSQ";
uint8 private _decimals=18;
uint256 private _totalSupply=100000000*10**_decimals; // 100m
// Transaction Tax
uint8 private _buyTax=6;
uint8 private _sellTax=20;
uint8 private _burnTax=1;
uint8 private _transferTax=0;
// Trading
bool private _airdropDone=false;
bool private _tradingEnabled=false;
uint256 private _maxTx=1000000*10**_decimals; // 1m
// Wallets
address public backupOwner=0xAe7c6C4D33667185db125842d31e3D79d614986d;
address public marketingWallet=0xa62909d663e79Eaa49c86F429EE1538be50862aD;
address public burnWallet=address(0xdead);
address public zeroAddress=address(0);
IUniRouterV2 private _router;
address public _pair;
// Reward Distributor
DividendDistributor public dividendDistributor;
address public dividendDistributorAddress;
uint256 distributorGas=500000;
// Mappings
mapping(address=>uint256) private _balances;
mapping(address=>mapping (address => uint256)) private _allowances;
mapping(address=>bool) private _excludedFromFee;
mapping(address=>bool) private _excludedFromRewards;
mapping(address=>bool) private _automatedMarketMakers;
//
// Swap & Liquify Taxes
SwapTaxes private _swapTaxes;
struct SwapTaxes {
uint8 marketingTax;
uint8 liquidityTax;
uint8 rewardsTax;
}
//Swap & Liquify
bool private _inSwap;
bool private _swapEnabled;
uint256 private _swapThreshold=100000*10**_decimals;
modifier lockTheSwap {_inSwap = true;_;_inSwap = false;}
event SwapAndLiquify(
uint256 amountTokens,
uint256 amountETH
);
constructor() {
_router = IUniRouterV2(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
_pair = IDEXFactory(_router.factory()).createPair(_router.WETH(), address(this));
_allowances[address(this)][address(_router)]=type(uint256).max;
_automatedMarketMakers[_pair] = true;
_excludedFromFee[msg.sender]=true;
_excludedFromFee[address(this)]=true;
_excludedFromFee[burnWallet]=true;
_excludedFromFee[zeroAddress]=true;
_excludedFromRewards[_pair]=true;
_excludedFromRewards[msg.sender]=true;
_excludedFromRewards[address(this)]=true;
_excludedFromRewards[burnWallet]=true;
_excludedFromRewards[zeroAddress]=true;
_swapTaxes=SwapTaxes(50,20,30);
dividendDistributor = new DividendDistributor(_router);
dividendDistributorAddress=address(dividendDistributor);
_balances[msg.sender]+=_totalSupply;
emit Transfer(address(0),msg.sender,_totalSupply);
}
function _transfer(
address from,
address to,
uint256 amount
) private {
bool isExcluded=_excludedFromFee[from]||_excludedFromFee[to]||_inSwap;
bool isBuy=_automatedMarketMakers[from];
bool isSell=_automatedMarketMakers[to];
if(isExcluded)_tokenTransfer(from,to,amount,0);
else {
require(_tradingEnabled);
if(isBuy)_buyTokens(from,to,amount);
else if(isSell) {
if(!_inSwap&&_swapEnabled)_swapAndLiquify(false);
_sellTokens(from,to,amount);
} else {
_tokenTransfer(from,to,amount,_transferTax*amount/100);
}
}
}
function _swapAndLiquify(
bool ignoreLimits
) private lockTheSwap {
uint256 contractTokenBalance=_balances[address(this)];
uint256 toSwap=_swapThreshold;
if(contractTokenBalance<toSwap) {
if(ignoreLimits&&contractTokenBalance>0) {
toSwap=contractTokenBalance;
} else return;
}
uint256 totalLiquidityTokens=toSwap*_swapTaxes.liquidityTax/100;
uint256 tokensRemaining=toSwap-totalLiquidityTokens;
uint256 liquidityTokens=totalLiquidityTokens/2;
uint256 liquidityETHTokens=totalLiquidityTokens-liquidityTokens;
toSwap=tokensRemaining+liquidityETHTokens;
uint256 oldETH=address(this).balance;
_swapTokensForETH(toSwap);
uint256 newETH=address(this).balance-oldETH;
uint256 liquidityETH=(newETH*liquidityETHTokens)/toSwap;
uint256 remainingETH=newETH-liquidityETH;
uint256 marketingETH=remainingETH*_swapTaxes.marketingTax/100;
uint256 rewardsETH=remainingETH-marketingETH;
if (rewardsETH > 0)
try dividendDistributor.deposit{value: rewardsETH}() {} catch {}
(bool transferMarketing,) = payable(marketingWallet).call{value: marketingETH, gas: 30000}("");
transferMarketing=false;
_addLiquidity(liquidityTokens,liquidityETH);
emit SwapAndLiquify(liquidityTokens,liquidityETH);
}
function _buyTokens(
address from,
address to,
uint256 amount
) private {
require(amount<=_maxTx,"Amount exceeds maxTx.");
_tokenTransfer(from,to,amount,amount*_buyTax/100);
}
function _sellTokens(
address from,
address to,
uint256 amount
) private {
require(amount<=_maxTx,"Amount exceeds maxTx.");
_tokenTransfer(from,to,amount,amount*_sellTax/100);
}
function _tokenTransfer(
address from,
address to,
uint256 amount,
uint256 tax
) private {
uint256 tokensToBurn=_burnTax*tax/100;
_balances[from]-=amount;
_balances[burnWallet]+=tokensToBurn;
_balances[address(this)]+=(tax-tokensToBurn);
_balances[to]+=(amount-tax);
if(!_excludedFromRewards[from]) try dividendDistributor.setShare(from,_balances[from]) {} catch {}
if(!_excludedFromRewards[to]) try dividendDistributor.setShare(to,_balances[to]) {} catch {}
try dividendDistributor.process(distributorGas) {} catch {}
emit Transfer(from,to,(amount-tax));
}
function _swapTokensForETH(
uint256 tokenAmount
) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = _router.WETH();
_approve(address(this), address(_router), tokenAmount);
_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
function _addLiquidity(
uint256 tokenAmount,
uint256 ETHAmount
) private {
_approve(address(this), address(_router), tokenAmount);
_router.addLiquidityETH{value: ETHAmount}(
address(this),
tokenAmount,
0,
0,
burnWallet,
block.timestamp
);
}
//
function enableTrading() public onlyOwner() {
require(!_tradingEnabled,"Trading is already enabled.");
_tradingEnabled=!_tradingEnabled;
}
function recoverOwnershipFromBackup() public {
require(msg.sender==backupOwner);
transferOwnership(backupOwner);
}
function updateBackupOwnerWallet(
address _backupOwner
) public onlyOwner {
backupOwner=_backupOwner;
}
function updateAutomatedMarketMakers(
address marketMaker,
bool enabled
) public onlyOwner {
_automatedMarketMakers[marketMaker]=enabled;
excludeFromReward(marketMaker,true);
}
function updateTax(
uint8 buyTax,
uint8 sellTax,
uint8 burnTax,
uint8 transferTax
) public onlyOwner {
require(_buyTax+sellTax<=30,"Taxes cannot exceed 30%.");
require(_transferTax<=20,"Transfer tax cannot exceed 20%.");
_buyTax=buyTax;
_sellTax=sellTax;
_burnTax=burnTax;
_transferTax=transferTax;
}
function updateSwapTaxes(
uint8 marketingTax,
uint8 rewardsTax,
uint8 liquidityTax
) public onlyOwner {
require((marketingTax+rewardsTax+liquidityTax)==100,"Swap tax cannot exceed 100.");
_swapTaxes.marketingTax=marketingTax;
_swapTaxes.rewardsTax=rewardsTax;
_swapTaxes.liquidityTax=liquidityTax;
}
function updateSwapThreshold(
uint256 swapThreshold
) public onlyOwner {
require(_swapThreshold>0&&swapThreshold<=(_totalSupply*1/100));
_swapThreshold=swapThreshold;
}
function switchSwapEnabled(
bool swapEnabled
) public onlyOwner {
_swapEnabled=swapEnabled;
}
function triggerSwapAndLiquify(
bool ignoreLimits
) public onlyOwner {
_swapAndLiquify(ignoreLimits);
}
function excludeFromFee(
address account,
bool excluded
) public onlyOwner {
_excludedFromFee[account]=excluded;
}
function excludeFromReward(
address account,
bool excluded
) public onlyOwner {
_excludedFromRewards[account]=excluded;
try dividendDistributor.setShare(account,excluded?0:_balances[account]) {} catch {}
}
function updateMaxTx(
uint256 maxTx
) public onlyOwner {
require(maxTx>=(_totalSupply*1/100) / 2);
_maxTx=maxTx*10**_decimals;
}
function updateMarketingWallet(
address _marketingWallet
) public onlyOwner {
require(_marketingWallet!=address(0),"Cannot be zero address!");
marketingWallet=_marketingWallet;
}
function withdrawStrandedToken(
address strandedToken
) public onlyOwner {
require(strandedToken!=address(this));
IERC20 token=IERC20(strandedToken);
token.transfer(owner(),token.balanceOf(address(this)));
}
function withdrawStuckETH() public onlyOwner {
(bool success,)=msg.sender.call{value:(address(this).balance)}("");
require(success);
}
function addRewardsManually() public payable onlyOwner {
require(msg.value>0);
try dividendDistributor.deposit{value: msg.value}() {} catch {}
}
function updateDistributorSettings(
uint256 _minPeriod,
uint256 _minDistribution,
uint256 gas
) public onlyOwner {
require(gas<=1200000);
dividendDistributor.setDistributionCriteria(_minPeriod, _minDistribution);
distributorGas = gas;
}
//
function showMaxTx() public view returns(uint256) {
return _maxTx;
}
function isSwapEnabled() public view returns(bool) {
return _swapEnabled;
}
function showTradeTaxes() public view returns(
uint8 buyTax,
uint8 sellTax,
uint8 burnTax,
uint8 transferTax
) {
buyTax=_buyTax;
sellTax=_sellTax;
burnTax=_burnTax;
transferTax=_transferTax;
}
function showSwapTaxes() public view returns(
uint8 marketingTax,
uint8 liquidityTax,
uint8 rewardsTax
) {
marketingTax=_swapTaxes.marketingTax;
liquidityTax=_swapTaxes.liquidityTax;
rewardsTax=_swapTaxes.rewardsTax;
}
function showDistributorDetails() public view returns(
address _distributorAddress,
uint256 _distributorGas
) {
_distributorAddress=dividendDistributorAddress;
_distributorGas=distributorGas;
}
function isTradingEnabled() public view returns(bool) {
return _tradingEnabled;
}
//
function transfer(
address recipient,
uint256 amount
) external override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) external override returns (bool) {
uint256 allowance_ = _allowances[sender][msg.sender];
_transfer(sender, recipient, amount);
require(allowance_ >= amount);
_approve(sender, msg.sender, allowance_ - amount);
emit Transfer(sender, recipient, amount);
return true;
}
function _approve(
address owner,
address spender,
uint256 amount
) private {
require((owner != address(0) && spender != address(0)), "Owner/Spender address cannot be 0.");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function approve(
address spender,
uint256 amount
) external override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function allowance(
address owner_,
address spender
) external view override returns (uint256) {
return _allowances[owner_][spender];
}
function balanceOf(
address account
) external view override returns (uint256) {
return _balances[account];
}
function name() external view returns (string memory) {
return _tokenName;
}
function symbol() external view returns (string memory) {
return _tokenSymbol;
}
function totalSupply() external view override returns (uint256) {
return _totalSupply;
}
function decimals() external view returns (uint8) {
return _decimals;
}
function getOwner() external view returns (address) {
return owner();
}
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addRewardsManually","outputs":[],"stateMutability":"payable","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":[],"name":"backupOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverOwnershipFromBackup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showDistributorDetails","outputs":[{"internalType":"address","name":"_distributorAddress","type":"address"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showMaxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showSwapTaxes","outputs":[{"internalType":"uint8","name":"marketingTax","type":"uint8"},{"internalType":"uint8","name":"liquidityTax","type":"uint8"},{"internalType":"uint8","name":"rewardsTax","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showTradeTaxes","outputs":[{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"burnTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"}],"name":"switchSwapEnabled","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"ignoreLimits","type":"bool"}],"name":"triggerSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketMaker","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateAutomatedMarketMakers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_backupOwner","type":"address"}],"name":"updateBackupOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"updateDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"updateMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"marketingTax","type":"uint8"},{"internalType":"uint8","name":"rewardsTax","type":"uint8"},{"internalType":"uint8","name":"liquidityTax","type":"uint8"}],"name":"updateSwapTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"burnTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"strandedToken","type":"address"}],"name":"withdrawStrandedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c0604052600d60808190526c446f6c6c617253717565657a6560981b60a09081526200003091600191906200051f565b506040805180820190915260038082526244535160e81b60209092019182526200005d916002916200051f565b506003805460ff191660129081179091556200007b90600a620006e8565b6200008b906305f5e10062000700565b6004556005805465ffffffffffff191662011406179055600354620000b59060ff16600a620006e8565b620000c490620f424062000700565b600655600780546001600160a01b031990811673ae7c6c4d33667185db125842d31e3d79d614986d1790915560088054821673a62909d663e79eaa49c86f429ee1538be50862ad17905560098054821661dead179055600a805490911681556207a120600f556003546200013e9160ff90911690620006e8565b6200014d90620186a062000700565b6017553480156200015d57600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000202573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000228919062000722565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b0919062000722565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062000722565b600c80546001600160a01b0319166001600160a01b03928316178155306000818152601160209081526040808320600b80548816855290835281842060001990558554871684526014808452828520805460ff199081166001908117909255338088526012875285882080548316841790558888528588208054831684179055600980548c1689528689208054841685179055600a80548d168a52878a2080548516861790559a548c16895260138852868920805484168517905590885285882080548316841790559787528487208054821683179055965489168652838620805488168217905596548816855293829020805490951690951790935582516060810184526032815290810191909152601e908201526015805462ffffff1916621e1432179055905490519116906200045c90620005ae565b6001600160a01b039091168152602001604051809103906000f08015801562000489573d6000803e3d6000fd5b50600d80546001600160a01b03929092166001600160a01b03199283168117909155600e80549092161790556004543360009081526010602052604081208054909190620004d99084906200074d565b909155505060045460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3620007a5565b8280546200052d9062000768565b90600052602060002090601f0160209004810192826200055157600085556200059c565b82601f106200056c57805160ff19168380011785556200059c565b828001600101855582156200059c579182015b828111156200059c5782518255916020019190600101906200057f565b50620005aa929150620005bc565b5090565b610b878062002bea83390190565b5b80821115620005aa5760008155600101620005bd565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200062a5781600019048211156200060e576200060e620005d3565b808516156200061c57918102915b93841c9390800290620005ee565b509250929050565b6000826200064357506001620006e2565b816200065257506000620006e2565b81600181146200066b5760028114620006765762000696565b6001915050620006e2565b60ff8411156200068a576200068a620005d3565b50506001821b620006e2565b5060208310610133831016604e8410600b8410161715620006bb575081810a620006e2565b620006c78383620005e9565b8060001904821115620006de57620006de620005d3565b0290505b92915050565b6000620006f960ff84168362000632565b9392505050565b60008160001904831182151516156200071d576200071d620005d3565b500290565b6000602082840312156200073557600080fd5b81516001600160a01b0381168114620006f957600080fd5b60008219821115620007635762000763620005d3565b500190565b600181811c908216806200077d57607f821691505b602082108114156200079f57634e487b7160e01b600052602260045260246000fd5b50919050565b61243580620007b56000396000f3fe6080604052600436106102605760003560e01c806375f0a87411610144578063bad3ea6a116100b6578063df8408fe1161007a578063df8408fe1461072f578063ea45eac61461074f578063f2fde38b1461079b578063f5648a4f146107bb578063fc964b62146107d0578063ff8561451461080d57600080fd5b8063bad3ea6a14610669578063c2d0ffca14610689578063c554d6c1146106a9578063cc274b29146106c9578063dd62ed3e146106e957600080fd5b80638df39ec2116101085780638df39ec2146105b457806395d89b41146105d4578063a26bd13c146105e9578063a9059cbb14610609578063aacebbe314610629578063b51449bb1461064957600080fd5b806375f0a8741461054c5780638552e75f1461056c578063893d20e8146105815780638a8c523c1461059f5780638da5cb5b1461058157600080fd5b80632e9701f7116101dd57806335ccb11b116101a157806335ccb11b146104995780633644b0a2146104b95780633af8e4ab146104d957806370a08231146104f9578063715018a61461052f57806373155de31461054457600080fd5b80632e9701f7146103fa578063313ce5671461041a5780633143a28a1461043c578063351a964d1461045c57806335c6f9bc1461047957600080fd5b806318160ddd1161022457806318160ddd1461033657806318fc62ac1461035557806323b872dd146103775780632a979b9f146103975780632c4adf30146103b757600080fd5b8063062287491461026c578063064a59d0146102a957806306fdde03146102d45780630930907b146102f6578063095ea7b31461031657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5060095461028c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b557600080fd5b50600554600160281b900460ff165b60405190151581526020016102a0565b3480156102e057600080fd5b506102e9610822565b6040516102a09190611e6a565b34801561030257600080fd5b50600a5461028c906001600160a01b031681565b34801561032257600080fd5b506102c4610331366004611ed4565b6108b4565b34801561034257600080fd5b506004545b6040519081526020016102a0565b34801561036157600080fd5b50610375610370366004611f16565b6108cb565b005b34801561038357600080fd5b506102c4610392366004611f59565b61099b565b3480156103a357600080fd5b506103756103b2366004611fa8565b610a43565b3480156103c357600080fd5b506103db600e54600f546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016102a0565b34801561040657600080fd5b50610375610415366004611fcc565b610a87565b34801561042657600080fd5b5060035460405160ff90911681526020016102a0565b34801561044857600080fd5b50610375610457366004611fe9565b610ad3565b34801561046857600080fd5b50601654610100900460ff166102c4565b34801561048557600080fd5b50610375610494366004611fe9565b610b30565b3480156104a557600080fd5b506103756104b4366004611fcc565b610c0e565b3480156104c557600080fd5b506103756104d4366004612022565b610d4c565b3480156104e557600080fd5b5060075461028c906001600160a01b031681565b34801561050557600080fd5b50610347610514366004611fcc565b6001600160a01b031660009081526010602052604090205490565b34801561053b57600080fd5b50610375610df5565b610375610e5b565b34801561055857600080fd5b5060085461028c906001600160a01b031681565b34801561057857600080fd5b50610375610ef8565b34801561058d57600080fd5b506000546001600160a01b031661028c565b3480156105ab57600080fd5b50610375610f24565b3480156105c057600080fd5b506103756105cf36600461204e565b610fcb565b3480156105e057600080fd5b506102e9611106565b3480156105f557600080fd5b50600e5461028c906001600160a01b031681565b34801561061557600080fd5b506102c4610624366004611ed4565b611115565b34801561063557600080fd5b50610375610644366004611fcc565b611122565b34801561065557600080fd5b50600c5461028c906001600160a01b031681565b34801561067557600080fd5b50600d5461028c906001600160a01b031681565b34801561069557600080fd5b506103756106a43660046120a2565b6111c4565b3480156106b557600080fd5b506103756106c4366004611fa8565b611242565b3480156106d557600080fd5b506103756106e43660046120a2565b611275565b3480156106f557600080fd5b506103476107043660046120bb565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561073b57600080fd5b5061037561074a366004611fe9565b6112d9565b34801561075b57600080fd5b506005546040805160ff808416825261010084048116602083015262010000840481169282019290925263010000009092041660608201526080016102a0565b3480156107a757600080fd5b506103756107b6366004611fcc565b61132e565b3480156107c757600080fd5b50610375611408565b3480156107dc57600080fd5b506015546040805160ff808416825261010084048116602083015262010000909304909216908201526060016102a0565b34801561081957600080fd5b50600654610347565b606060018054610831906120e9565b80601f016020809104026020016040519081016040528092919081815260200182805461085d906120e9565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b5050505050905090565b60006108c1338484611487565b5060015b92915050565b6000546001600160a01b031633146108fe5760405162461bcd60e51b81526004016108f590612124565b60405180910390fd5b80610909838561216f565b610913919061216f565b60ff166064146109655760405162461bcd60e51b815260206004820152601b60248201527f53776170207461782063616e6e6f7420657863656564203130302e000000000060448201526064016108f5565b6015805460ff94851662ff00ff199091161762010000938516939093029290921761ff0019166101009190931602919091179055565b6001600160a01b03831660009081526011602090815260408083203384529091528120546109ca85858561155f565b828110156109d757600080fd5b6109eb85336109e68685612194565b611487565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a3091815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b03163314610a6d5760405162461bcd60e51b81526004016108f590612124565b601680549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314610ab15760405162461bcd60e51b81526004016108f590612124565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610afd5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0382166000908152601460205260409020805460ff1916821515179055610b2c826001610b30565b5050565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038281166000908152601360205260409020805460ff1916831515179055600d54166314b6ca968383610bac576001600160a01b038516600090815260106020526040902054610baf565b60005b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610bf557600080fd5b505af1925050508015610c06575060015b610b2c575050565b6000546001600160a01b03163314610c385760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038116301415610c4e57600080fd5b806001600160a01b03811663a9059cbb610c706000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd891906121ab565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4791906121c4565b505050565b6000546001600160a01b03163314610d765760405162461bcd60e51b81526004016108f590612124565b62124f80811115610d8657600080fd5b600d546040516316a4744b60e11b815260048101859052602481018490526001600160a01b0390911690632d48e89690604401600060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b505050600f91909155505050565b6000546001600160a01b03163314610e1f5760405162461bcd60e51b81526004016108f590612124565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610e855760405162461bcd60e51b81526004016108f590612124565b60003411610e9257600080fd5b600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ee257600080fd5b505af193505050508015610ef4575060015b505b565b6007546001600160a01b03163314610f0f57600080fd5b600754610ef6906001600160a01b031661132e565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b81526004016108f590612124565b600554600160281b900460ff1615610fa85760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642e000000000060448201526064016108f5565b6005805465ff0000000000198116600160281b9182900460ff1615909102179055565b6000546001600160a01b03163314610ff55760405162461bcd60e51b81526004016108f590612124565b600554601e9061100990859060ff1661216f565b60ff16111561105a5760405162461bcd60e51b815260206004820152601860248201527f54617865732063616e6e6f7420657863656564203330252e000000000000000060448201526064016108f5565b6005546014630100000090910460ff1611156110b85760405162461bcd60e51b815260206004820152601f60248201527f5472616e73666572207461782063616e6e6f7420657863656564203230252e0060448201526064016108f5565b6005805460ff95861661ffff1990911617610100948616949094029390931763ffff00001916620100009285169290920263ff00000019169190911763010000009190931602919091179055565b606060028054610831906120e9565b60006108c133848461155f565b6000546001600160a01b0316331461114c5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166111a25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732100000000000000000060448201526064016108f5565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111ee5760405162461bcd60e51b81526004016108f590612124565b60026064600454600161120191906121e1565b61120b9190612200565b6112159190612200565b81101561122157600080fd5b6003546112329060ff16600a612306565b61123c90826121e1565b60065550565b6000546001600160a01b0316331461126c5760405162461bcd60e51b81526004016108f590612124565b610ef48161168e565b6000546001600160a01b0316331461129f5760405162461bcd60e51b81526004016108f590612124565b60006017541180156112cb5750606460045460016112bd91906121e1565b6112c79190612200565b8111155b6112d457600080fd5b601755565b6000546001600160a01b031633146113035760405162461bcd60e51b81526004016108f590612124565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113585760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166113bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f5565b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146114325760405162461bcd60e51b81526004016108f590612124565b604051600090339047908381818185875af1925050503d8060008114611474576040519150601f19603f3d011682016040523d82523d6000602084013e611479565b606091505b5050905080610ef457600080fd5b6001600160a01b038316158015906114a757506001600160a01b03821615155b6114fe5760405162461bcd60e51b815260206004820152602260248201527f4f776e65722f5370656e64657220616464726573732063616e6e6f7420626520604482015261181760f11b60648201526084016108f5565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526012602052604081205460ff168061159e57506001600160a01b03831660009081526012602052604090205460ff165b806115ab575060165460ff165b6001600160a01b0380861660009081526014602052604080822054928716825290205491925060ff908116911682156115f0576115eb86868660006118cb565b611686565b600554600160281b900460ff1661160657600080fd5b8115611617576115eb868686611b91565b80156116515760165460ff161580156116375750601654610100900460ff165b1561164657611646600061168e565b6115eb868686611bf8565b611686868686606488600560039054906101000a900460ff1660ff1661167791906121e1565b6116819190612200565b6118cb565b505050505050565b6016805460ff1916600117905530600090815260106020526040902054601754808210156116d6578280156116c35750600082115b156116cf5750806116d6565b50506118be565b6015546000906064906116f190610100900460ff16846121e1565b6116fb9190612200565b905060006117098284612194565b90506000611718600284612200565b905060006117268285612194565b90506117328184612315565b94504761173e86611c64565b600061174a8247612194565b905060008761175985846121e1565b6117639190612200565b905060006117718284612194565b60155490915060009060649061178a9060ff16846121e1565b6117949190612200565b905060006117a28284612194565b9050801561180e57600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156117fa57600080fd5b505af19350505050801561180c575060015b505b6008546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114611860576040519150601f19603f3d011682016040523d82523d6000602084013e611865565b606091505b50509050600090506118778986611db6565b604080518a8152602081018790527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1505050505050505050505050505b506016805460ff19169055565b6005546000906064906118e890849062010000900460ff166121e1565b6118f29190612200565b6001600160a01b03861660009081526010602052604081208054929350859290919061191f908490612194565b90915550506009546001600160a01b03166000908152601060205260408120805483929061194e908490612315565b9091555061195e90508183612194565b306000908152601060205260408120805490919061197d908490612315565b9091555061198d90508284612194565b6001600160a01b038516600090815260106020526040812080549091906119b5908490612315565b90915550506001600160a01b03851660009081526013602052604090205460ff16611a4b57600d546001600160a01b0386811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611a3857600080fd5b505af1925050508015611a49575060015b505b6001600160a01b03841660009081526013602052604090205460ff16611adc57600d546001600160a01b0385811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611ac957600080fd5b505af1925050508015611ada575060015b505b600d54600f546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611b149160040190815260200190565b600060405180830381600087803b158015611b2e57600080fd5b505af1925050508015611b3f575060015b506001600160a01b038085169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611b798587612194565b60405190815260200160405180910390a35050505050565b600654811115611bdb5760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d47908490849084906064906116779060ff16836121e1565b600654811115611c425760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d479084908490849060649061167790610100900460ff16836121e1565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c9957611c9961232d565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d169190612343565b81600181518110611d2957611d2961232d565b6001600160a01b039283166020918202929092010152600b54611d4f9130911684611487565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d88908590600090869030904290600401612360565b600060405180830381600087803b158015611da257600080fd5b505af1158015611686573d6000803e3d6000fd5b600b54611dce9030906001600160a01b031684611487565b600b5460095460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611e3e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e6391906123d1565b5050505050565b600060208083528351808285015260005b81811015611e9757858101830151858201604001528201611e7b565b81811115611ea9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ef457600080fd5b60008060408385031215611ee757600080fd5b8235611ef281611ebf565b946020939093013593505050565b803560ff81168114611f1157600080fd5b919050565b600080600060608486031215611f2b57600080fd5b611f3484611f00565b9250611f4260208501611f00565b9150611f5060408501611f00565b90509250925092565b600080600060608486031215611f6e57600080fd5b8335611f7981611ebf565b92506020840135611f8981611ebf565b929592945050506040919091013590565b8015158114610ef457600080fd5b600060208284031215611fba57600080fd5b8135611fc581611f9a565b9392505050565b600060208284031215611fde57600080fd5b8135611fc581611ebf565b60008060408385031215611ffc57600080fd5b823561200781611ebf565b9150602083013561201781611f9a565b809150509250929050565b60008060006060848603121561203757600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561206457600080fd5b61206d85611f00565b935061207b60208601611f00565b925061208960408601611f00565b915061209760608601611f00565b905092959194509250565b6000602082840312156120b457600080fd5b5035919050565b600080604083850312156120ce57600080fd5b82356120d981611ebf565b9150602083013561201781611ebf565b600181811c908216806120fd57607f821691505b6020821081141561211e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff0382111561218c5761218c612159565b019392505050565b6000828210156121a6576121a6612159565b500390565b6000602082840312156121bd57600080fd5b5051919050565b6000602082840312156121d657600080fd5b8151611fc581611f9a565b60008160001904831182151516156121fb576121fb612159565b500290565b60008261221d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561225d57816000190482111561224357612243612159565b8085161561225057918102915b93841c9390800290612227565b509250929050565b600082612274575060016108c5565b81612281575060006108c5565b816001811461229757600281146122a1576122bd565b60019150506108c5565b60ff8411156122b2576122b2612159565b50506001821b6108c5565b5060208310610133831016604e8410600b84101617156122e0575081810a6108c5565b6122ea8383612222565b80600019048211156122fe576122fe612159565b029392505050565b6000611fc560ff841683612265565b6000821982111561232857612328612159565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561235557600080fd5b8151611fc581611ebf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123b05784516001600160a01b03168352938301939183019160010161238b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156123e657600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122096db494a5da16c43beeed91b87617a5262c9acd7b1238b938226a43f4e1abf3364736f6c634300080c003360806040526ec097ce7bc90715b34b9f1000000000600a55610e10600b556001600c5534801561002e57600080fd5b50604051610b87380380610b8783398101604081905261004d9161007b565b600180546001600160a01b039092166001600160a01b031992831617905560008054909116331790556100ab565b60006020828403121561008d57600080fd5b81516001600160a01b03811681146100a457600080fd5b9392505050565b610acd806100ba6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600a5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b61012636600461094a565b610285565b005b34801561013957600080fd5b506100f8610148366004610974565b6103fd565b34801561015957600080fd5b5061012b61016836600461098f565b610486565b34801561017957600080fd5b506100f860065481565b34801561018f57600080fd5b506100f8600c5481565b3480156101a557600080fd5b506100f860075481565b3480156101bb57600080fd5b506101eb6101ca366004610974565b60056020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104a8565b34801561021a57600080fd5b506100f860095481565b34801561023057600080fd5b506100f860085481565b34801561024657600080fd5b5061012b6104fb565b34801561025b57600080fd5b5061012b61026a3660046109b1565b61055f565b34801561027b57600080fd5b506100f8600b5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260056020526040902054156102c3576102c38261065f565b6000811180156102e957506001600160a01b038216600090815260056020526040902054155b1561034f57600280546001600160a01b0384166000818152600360205260408120839055600183018455929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526005602052604090205415155b15610382576103828261077a565b6001600160a01b0382166000908152600560205260409020546006546103b39183916103ad9161088f565b906108a2565b6006556001600160a01b03821660009081526005602052604090208190556103da816108ae565b6001600160a01b0390921660009081526005602052604090206001019190915550565b6001600160a01b03811660009081526005602052604081205461042257506000919050565b6001600160a01b038216600090815260056020526040812054610444906108ae565b6001600160a01b038416600090815260056020526040902060010154909150808211610474575060009392505050565b61047e828261088f565b949350505050565b6000546001600160a01b0316331461049d57600080fd5b600b91909155600c55565b6000546001600160a01b031633146104bf57600080fd5b6007546104cc90346108a2565b600755600654600a546104f6916104ed916104e790346108d1565b906108dd565b600954906108a2565b600955565b610504336108e9565b6105545760405162461bcd60e51b815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000604482015260640160405180910390fd5b61055d3361065f565b565b6000546001600160a01b0316331461057657600080fd5b60025480610582575050565b60008060005a90505b848210801561059957508383105b156106585783600d54106105ad576000600d555b6105df6002600d54815481106105c5576105c56109ca565b6000918252602090912001546001600160a01b03166108e9565b15610616576106166002600d54815481106105fc576105fc6109ca565b6000918252602090912001546001600160a01b031661065f565b61062b6106245a839061088f565b83906108a2565b91505a600d80549192506000610640836109f6565b91905055508280610650906109f6565b93505061058b565b5050505050565b6001600160a01b03811660009081526005602052604090205461067f5750565b600061068a826103fd565b905080156107765760085461069f90826108a2565b6008556040516000906001600160a01b0384169061753090849084818181858888f193505050503d80600081146106f2576040519150601f19603f3d011682016040523d82523d6000602084013e6106f7565b606091505b505050506001600160a01b0382166000908152600460209081526040808320429055600590915281206002015461072e90836108a2565b6001600160a01b0384166000908152600560205260409020600281019190915554610758906108ae565b6001600160a01b038416600090815260056020526040902060010155505b5050565b6002805461078a90600190610a11565b8154811061079a5761079a6109ca565b60009182526020808320909101546001600160a01b03848116845260039092526040909220546002805492909316929181106107d8576107d86109ca565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526003918290526040812054600280549193929161082490600190610a11565b81548110610834576108346109ca565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600280548061086a5761086a610a28565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061089b8284610a11565b9392505050565b600061089b8284610a3e565b60006108cb600a546104e7600954856108d190919063ffffffff16565b92915050565b600061089b8284610a56565b600061089b8284610a75565b600b546001600160a01b038216600090815260046020526040812054909142916109139190610a3e565b1080156108cb5750600c54610927836103fd565b1192915050565b80356001600160a01b038116811461094557600080fd5b919050565b6000806040838503121561095d57600080fd5b6109668361092e565b946020939093013593505050565b60006020828403121561098657600080fd5b61089b8261092e565b600080604083850312156109a257600080fd5b50508035926020909101359150565b6000602082840312156109c357600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610a0a57610a0a6109e0565b5060010190565b600082821015610a2357610a236109e0565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610a5157610a516109e0565b500190565b6000816000190483118215151615610a7057610a706109e0565b500290565b600082610a9257634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220c999a8a079c99f06e84b8b0abb5ae947e4a89e4f841312a0932b141ef5cfa90064736f6c634300080c0033
Deployed Bytecode
0x6080604052600436106102605760003560e01c806375f0a87411610144578063bad3ea6a116100b6578063df8408fe1161007a578063df8408fe1461072f578063ea45eac61461074f578063f2fde38b1461079b578063f5648a4f146107bb578063fc964b62146107d0578063ff8561451461080d57600080fd5b8063bad3ea6a14610669578063c2d0ffca14610689578063c554d6c1146106a9578063cc274b29146106c9578063dd62ed3e146106e957600080fd5b80638df39ec2116101085780638df39ec2146105b457806395d89b41146105d4578063a26bd13c146105e9578063a9059cbb14610609578063aacebbe314610629578063b51449bb1461064957600080fd5b806375f0a8741461054c5780638552e75f1461056c578063893d20e8146105815780638a8c523c1461059f5780638da5cb5b1461058157600080fd5b80632e9701f7116101dd57806335ccb11b116101a157806335ccb11b146104995780633644b0a2146104b95780633af8e4ab146104d957806370a08231146104f9578063715018a61461052f57806373155de31461054457600080fd5b80632e9701f7146103fa578063313ce5671461041a5780633143a28a1461043c578063351a964d1461045c57806335c6f9bc1461047957600080fd5b806318160ddd1161022457806318160ddd1461033657806318fc62ac1461035557806323b872dd146103775780632a979b9f146103975780632c4adf30146103b757600080fd5b8063062287491461026c578063064a59d0146102a957806306fdde03146102d45780630930907b146102f6578063095ea7b31461031657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5060095461028c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b557600080fd5b50600554600160281b900460ff165b60405190151581526020016102a0565b3480156102e057600080fd5b506102e9610822565b6040516102a09190611e6a565b34801561030257600080fd5b50600a5461028c906001600160a01b031681565b34801561032257600080fd5b506102c4610331366004611ed4565b6108b4565b34801561034257600080fd5b506004545b6040519081526020016102a0565b34801561036157600080fd5b50610375610370366004611f16565b6108cb565b005b34801561038357600080fd5b506102c4610392366004611f59565b61099b565b3480156103a357600080fd5b506103756103b2366004611fa8565b610a43565b3480156103c357600080fd5b506103db600e54600f546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016102a0565b34801561040657600080fd5b50610375610415366004611fcc565b610a87565b34801561042657600080fd5b5060035460405160ff90911681526020016102a0565b34801561044857600080fd5b50610375610457366004611fe9565b610ad3565b34801561046857600080fd5b50601654610100900460ff166102c4565b34801561048557600080fd5b50610375610494366004611fe9565b610b30565b3480156104a557600080fd5b506103756104b4366004611fcc565b610c0e565b3480156104c557600080fd5b506103756104d4366004612022565b610d4c565b3480156104e557600080fd5b5060075461028c906001600160a01b031681565b34801561050557600080fd5b50610347610514366004611fcc565b6001600160a01b031660009081526010602052604090205490565b34801561053b57600080fd5b50610375610df5565b610375610e5b565b34801561055857600080fd5b5060085461028c906001600160a01b031681565b34801561057857600080fd5b50610375610ef8565b34801561058d57600080fd5b506000546001600160a01b031661028c565b3480156105ab57600080fd5b50610375610f24565b3480156105c057600080fd5b506103756105cf36600461204e565b610fcb565b3480156105e057600080fd5b506102e9611106565b3480156105f557600080fd5b50600e5461028c906001600160a01b031681565b34801561061557600080fd5b506102c4610624366004611ed4565b611115565b34801561063557600080fd5b50610375610644366004611fcc565b611122565b34801561065557600080fd5b50600c5461028c906001600160a01b031681565b34801561067557600080fd5b50600d5461028c906001600160a01b031681565b34801561069557600080fd5b506103756106a43660046120a2565b6111c4565b3480156106b557600080fd5b506103756106c4366004611fa8565b611242565b3480156106d557600080fd5b506103756106e43660046120a2565b611275565b3480156106f557600080fd5b506103476107043660046120bb565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561073b57600080fd5b5061037561074a366004611fe9565b6112d9565b34801561075b57600080fd5b506005546040805160ff808416825261010084048116602083015262010000840481169282019290925263010000009092041660608201526080016102a0565b3480156107a757600080fd5b506103756107b6366004611fcc565b61132e565b3480156107c757600080fd5b50610375611408565b3480156107dc57600080fd5b506015546040805160ff808416825261010084048116602083015262010000909304909216908201526060016102a0565b34801561081957600080fd5b50600654610347565b606060018054610831906120e9565b80601f016020809104026020016040519081016040528092919081815260200182805461085d906120e9565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b5050505050905090565b60006108c1338484611487565b5060015b92915050565b6000546001600160a01b031633146108fe5760405162461bcd60e51b81526004016108f590612124565b60405180910390fd5b80610909838561216f565b610913919061216f565b60ff166064146109655760405162461bcd60e51b815260206004820152601b60248201527f53776170207461782063616e6e6f7420657863656564203130302e000000000060448201526064016108f5565b6015805460ff94851662ff00ff199091161762010000938516939093029290921761ff0019166101009190931602919091179055565b6001600160a01b03831660009081526011602090815260408083203384529091528120546109ca85858561155f565b828110156109d757600080fd5b6109eb85336109e68685612194565b611487565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a3091815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b03163314610a6d5760405162461bcd60e51b81526004016108f590612124565b601680549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314610ab15760405162461bcd60e51b81526004016108f590612124565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610afd5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0382166000908152601460205260409020805460ff1916821515179055610b2c826001610b30565b5050565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038281166000908152601360205260409020805460ff1916831515179055600d54166314b6ca968383610bac576001600160a01b038516600090815260106020526040902054610baf565b60005b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610bf557600080fd5b505af1925050508015610c06575060015b610b2c575050565b6000546001600160a01b03163314610c385760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038116301415610c4e57600080fd5b806001600160a01b03811663a9059cbb610c706000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd891906121ab565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4791906121c4565b505050565b6000546001600160a01b03163314610d765760405162461bcd60e51b81526004016108f590612124565b62124f80811115610d8657600080fd5b600d546040516316a4744b60e11b815260048101859052602481018490526001600160a01b0390911690632d48e89690604401600060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b505050600f91909155505050565b6000546001600160a01b03163314610e1f5760405162461bcd60e51b81526004016108f590612124565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610e855760405162461bcd60e51b81526004016108f590612124565b60003411610e9257600080fd5b600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ee257600080fd5b505af193505050508015610ef4575060015b505b565b6007546001600160a01b03163314610f0f57600080fd5b600754610ef6906001600160a01b031661132e565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b81526004016108f590612124565b600554600160281b900460ff1615610fa85760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642e000000000060448201526064016108f5565b6005805465ff0000000000198116600160281b9182900460ff1615909102179055565b6000546001600160a01b03163314610ff55760405162461bcd60e51b81526004016108f590612124565b600554601e9061100990859060ff1661216f565b60ff16111561105a5760405162461bcd60e51b815260206004820152601860248201527f54617865732063616e6e6f7420657863656564203330252e000000000000000060448201526064016108f5565b6005546014630100000090910460ff1611156110b85760405162461bcd60e51b815260206004820152601f60248201527f5472616e73666572207461782063616e6e6f7420657863656564203230252e0060448201526064016108f5565b6005805460ff95861661ffff1990911617610100948616949094029390931763ffff00001916620100009285169290920263ff00000019169190911763010000009190931602919091179055565b606060028054610831906120e9565b60006108c133848461155f565b6000546001600160a01b0316331461114c5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166111a25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732100000000000000000060448201526064016108f5565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111ee5760405162461bcd60e51b81526004016108f590612124565b60026064600454600161120191906121e1565b61120b9190612200565b6112159190612200565b81101561122157600080fd5b6003546112329060ff16600a612306565b61123c90826121e1565b60065550565b6000546001600160a01b0316331461126c5760405162461bcd60e51b81526004016108f590612124565b610ef48161168e565b6000546001600160a01b0316331461129f5760405162461bcd60e51b81526004016108f590612124565b60006017541180156112cb5750606460045460016112bd91906121e1565b6112c79190612200565b8111155b6112d457600080fd5b601755565b6000546001600160a01b031633146113035760405162461bcd60e51b81526004016108f590612124565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113585760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166113bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f5565b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146114325760405162461bcd60e51b81526004016108f590612124565b604051600090339047908381818185875af1925050503d8060008114611474576040519150601f19603f3d011682016040523d82523d6000602084013e611479565b606091505b5050905080610ef457600080fd5b6001600160a01b038316158015906114a757506001600160a01b03821615155b6114fe5760405162461bcd60e51b815260206004820152602260248201527f4f776e65722f5370656e64657220616464726573732063616e6e6f7420626520604482015261181760f11b60648201526084016108f5565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526012602052604081205460ff168061159e57506001600160a01b03831660009081526012602052604090205460ff165b806115ab575060165460ff165b6001600160a01b0380861660009081526014602052604080822054928716825290205491925060ff908116911682156115f0576115eb86868660006118cb565b611686565b600554600160281b900460ff1661160657600080fd5b8115611617576115eb868686611b91565b80156116515760165460ff161580156116375750601654610100900460ff165b1561164657611646600061168e565b6115eb868686611bf8565b611686868686606488600560039054906101000a900460ff1660ff1661167791906121e1565b6116819190612200565b6118cb565b505050505050565b6016805460ff1916600117905530600090815260106020526040902054601754808210156116d6578280156116c35750600082115b156116cf5750806116d6565b50506118be565b6015546000906064906116f190610100900460ff16846121e1565b6116fb9190612200565b905060006117098284612194565b90506000611718600284612200565b905060006117268285612194565b90506117328184612315565b94504761173e86611c64565b600061174a8247612194565b905060008761175985846121e1565b6117639190612200565b905060006117718284612194565b60155490915060009060649061178a9060ff16846121e1565b6117949190612200565b905060006117a28284612194565b9050801561180e57600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156117fa57600080fd5b505af19350505050801561180c575060015b505b6008546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114611860576040519150601f19603f3d011682016040523d82523d6000602084013e611865565b606091505b50509050600090506118778986611db6565b604080518a8152602081018790527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1505050505050505050505050505b506016805460ff19169055565b6005546000906064906118e890849062010000900460ff166121e1565b6118f29190612200565b6001600160a01b03861660009081526010602052604081208054929350859290919061191f908490612194565b90915550506009546001600160a01b03166000908152601060205260408120805483929061194e908490612315565b9091555061195e90508183612194565b306000908152601060205260408120805490919061197d908490612315565b9091555061198d90508284612194565b6001600160a01b038516600090815260106020526040812080549091906119b5908490612315565b90915550506001600160a01b03851660009081526013602052604090205460ff16611a4b57600d546001600160a01b0386811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611a3857600080fd5b505af1925050508015611a49575060015b505b6001600160a01b03841660009081526013602052604090205460ff16611adc57600d546001600160a01b0385811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611ac957600080fd5b505af1925050508015611ada575060015b505b600d54600f546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611b149160040190815260200190565b600060405180830381600087803b158015611b2e57600080fd5b505af1925050508015611b3f575060015b506001600160a01b038085169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611b798587612194565b60405190815260200160405180910390a35050505050565b600654811115611bdb5760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d47908490849084906064906116779060ff16836121e1565b600654811115611c425760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d479084908490849060649061167790610100900460ff16836121e1565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c9957611c9961232d565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d169190612343565b81600181518110611d2957611d2961232d565b6001600160a01b039283166020918202929092010152600b54611d4f9130911684611487565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d88908590600090869030904290600401612360565b600060405180830381600087803b158015611da257600080fd5b505af1158015611686573d6000803e3d6000fd5b600b54611dce9030906001600160a01b031684611487565b600b5460095460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611e3e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e6391906123d1565b5050505050565b600060208083528351808285015260005b81811015611e9757858101830151858201604001528201611e7b565b81811115611ea9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ef457600080fd5b60008060408385031215611ee757600080fd5b8235611ef281611ebf565b946020939093013593505050565b803560ff81168114611f1157600080fd5b919050565b600080600060608486031215611f2b57600080fd5b611f3484611f00565b9250611f4260208501611f00565b9150611f5060408501611f00565b90509250925092565b600080600060608486031215611f6e57600080fd5b8335611f7981611ebf565b92506020840135611f8981611ebf565b929592945050506040919091013590565b8015158114610ef457600080fd5b600060208284031215611fba57600080fd5b8135611fc581611f9a565b9392505050565b600060208284031215611fde57600080fd5b8135611fc581611ebf565b60008060408385031215611ffc57600080fd5b823561200781611ebf565b9150602083013561201781611f9a565b809150509250929050565b60008060006060848603121561203757600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561206457600080fd5b61206d85611f00565b935061207b60208601611f00565b925061208960408601611f00565b915061209760608601611f00565b905092959194509250565b6000602082840312156120b457600080fd5b5035919050565b600080604083850312156120ce57600080fd5b82356120d981611ebf565b9150602083013561201781611ebf565b600181811c908216806120fd57607f821691505b6020821081141561211e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff0382111561218c5761218c612159565b019392505050565b6000828210156121a6576121a6612159565b500390565b6000602082840312156121bd57600080fd5b5051919050565b6000602082840312156121d657600080fd5b8151611fc581611f9a565b60008160001904831182151516156121fb576121fb612159565b500290565b60008261221d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561225d57816000190482111561224357612243612159565b8085161561225057918102915b93841c9390800290612227565b509250929050565b600082612274575060016108c5565b81612281575060006108c5565b816001811461229757600281146122a1576122bd565b60019150506108c5565b60ff8411156122b2576122b2612159565b50506001821b6108c5565b5060208310610133831016604e8410600b84101617156122e0575081810a6108c5565b6122ea8383612222565b80600019048211156122fe576122fe612159565b029392505050565b6000611fc560ff841683612265565b6000821982111561232857612328612159565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561235557600080fd5b8151611fc581611ebf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123b05784516001600160a01b03168352938301939183019160010161238b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156123e657600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122096db494a5da16c43beeed91b87617a5262c9acd7b1238b938226a43f4e1abf3364736f6c634300080c0033
Deployed Bytecode Sourcemap
17967:13780:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18680:41;;;;;;;;;;-1:-1:-1;18680:41:0;;;;-1:-1:-1;;;;;18680:41:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;18680:41:0;;;;;;;;29644:95;;;;;;;;;;-1:-1:-1;29716:15:0;;-1:-1:-1;;;29716:15:0;;;;29644:95;;;387:14:1;;380:22;362:41;;350:2;335:18;29644:95:0;222:187:1;31228:90:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18728:37::-;;;;;;;;;;-1:-1:-1;18728:37:0;;;;-1:-1:-1;;;;;18728:37:0;;;30714:187;;;;;;;;;;-1:-1:-1;30714:187:0;;;;;:::i;:::-;;:::i;31424:102::-;;;;;;;;;;-1:-1:-1;31506:12:0;;31424:102;;;1618:25:1;;;1606:2;1591:18;31424:102:0;1472:177:1;26076:372:0;;;;;;;;;;-1:-1:-1;26076:372:0;;;;;:::i;:::-;;:::i;:::-;;29952:433;;;;;;;;;;-1:-1:-1;29952:433:0;;;;;:::i;:::-;;:::i;26665:121::-;;;;;;;;;;-1:-1:-1;26665:121:0;;;;;:::i;:::-;;:::i;29398:240::-;;;;;;;;;;;;29563:26;;29616:14;;-1:-1:-1;;;;;29563:26:0;;;;29398:240;;;;;-1:-1:-1;;;;;3164:32:1;;;3146:51;;3228:2;3213:18;;3206:34;;;;3119:18;29398:240:0;2972:274:1;25305:131:0;;;;;;;;;;-1:-1:-1;25305:131:0;;;;;:::i;:::-;;:::i;31532:85::-;;;;;;;;;;-1:-1:-1;31600:9:0;;31532:85;;31600:9;;;;3645:36:1;;3633:2;3618:18;31532:85:0;3503:184:1;25442:222:0;;;;;;;;;;-1:-1:-1;25442:222:0;;;;;:::i;:::-;;:::i;28732:89::-;;;;;;;;;;-1:-1:-1;28801:12:0;;;;;;;28732:89;;27086:251;;;;;;;;;;-1:-1:-1;27086:251:0;;;;;:::i;:::-;;:::i;27735:253::-;;;;;;;;;;-1:-1:-1;27735:253:0;;;;;:::i;:::-;;:::i;28330:300::-;;;;;;;;;;-1:-1:-1;28330:300:0;;;;;:::i;:::-;;:::i;18524:69::-;;;;;;;;;;-1:-1:-1;18524:69:0;;;;-1:-1:-1;;;;;18524:69:0;;;31085:137;;;;;;;;;;-1:-1:-1;31085:137:0;;;;;:::i;:::-;-1:-1:-1;;;;;31196:18:0;31169:7;31196:18;;;:9;:18;;;;;;;31085:137;17564:148;;;;;;;;;;;;;:::i;28157:167::-;;;:::i;18600:73::-;;;;;;;;;;-1:-1:-1;18600:73:0;;;;-1:-1:-1;;;;;18600:73:0;;;25162:137;;;;;;;;;;;;;:::i;31623:85::-;;;;;;;;;;-1:-1:-1;31666:7:0;17422:6;-1:-1:-1;;;;;17422:6:0;31623:85;;24995:161;;;;;;;;;;;;;:::i;25670:400::-;;;;;;;;;;-1:-1:-1;25670:400:0;;;;;:::i;:::-;;:::i;31324:94::-;;;;;;;;;;;;;:::i;18914:41::-;;;;;;;;;;-1:-1:-1;18914:41:0;;;;-1:-1:-1;;;;;18914:41:0;;;29753:193;;;;;;;;;;-1:-1:-1;29753:193:0;;;;;:::i;:::-;;:::i;27514:215::-;;;;;;;;;;-1:-1:-1;27514:215:0;;;;;:::i;:::-;;:::i;18807:20::-;;;;;;;;;;-1:-1:-1;18807:20:0;;;;-1:-1:-1;;;;;18807:20:0;;;18861:46;;;;;;;;;;-1:-1:-1;18861:46:0;;;;-1:-1:-1;;;;;18861:46:0;;;27343:165;;;;;;;;;;-1:-1:-1;27343:165:0;;;;;:::i;:::-;;:::i;26792:131::-;;;;;;;;;;-1:-1:-1;26792:131:0;;;;;:::i;:::-;;:::i;26454:205::-;;;;;;;;;;-1:-1:-1;26454:205:0;;;;;:::i;:::-;;:::i;30907:172::-;;;;;;;;;;-1:-1:-1;30907:172:0;;;;;:::i;:::-;-1:-1:-1;;;;;31043:19:0;;;31016:7;31043:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;30907:172;26929:151;;;;;;;;;;-1:-1:-1;26929:151:0;;;;;:::i;:::-;;:::i;28827:275::-;;;;;;;;;;-1:-1:-1;28998:7:0;;28827:275;;;28998:7;;;;5827:36:1;;28998:7:0;29024:8;;;;5894:2:1;5879:18;;5872:45;29051:8:0;;;;;5933:18:1;;;5926:45;;;;29082:12:0;;;;;6002:2:1;5987:18;;5980:45;5814:3;5799:19;28827:275:0;5612:419:1;17718:244:0;;;;;;;;;;-1:-1:-1;17718:244:0;;;;;:::i;:::-;;:::i;27994:157::-;;;;;;;;;;;;;:::i;29108:284::-;;;;;;;;;;-1:-1:-1;29271:10:0;:23;29108:284;;;29271:23;;;;6226:36:1;;29271:23:0;29318;;;;6293:2:1;6278:18;;6271:45;29363:21:0;;;;;;;6332:18:1;;;6325:45;6214:2;6199:18;29108:284:0;6036:340:1;28644:82:0;;;;;;;;;;-1:-1:-1;28712:6:0;;28644:82;;31228:90;31267:13;31300:10;31293:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31228:90;:::o;30714:187::-;30817:4;30834:37;30843:10;30855:7;30864:6;30834:8;:37::i;:::-;-1:-1:-1;30889:4:0;30714:187;;;;;:::o;26076:372::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;;;;;;;;;26254:12;26230:23:::1;26243:10:::0;26230:12;:23:::1;:::i;:::-;:36;;;;:::i;:::-;26229:43;;26269:3;26229:43;26221:82;;;::::0;-1:-1:-1;;;26221:82:0;;7670:2:1;26221:82:0::1;::::0;::::1;7652:21:1::0;7709:2;7689:18;;;7682:30;7748:29;7728:18;;;7721:57;7795:18;;26221:82:0::1;7468:351:1::0;26221:82:0::1;26314:10;:36:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;26361:32:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;26404:36:0::1;26314;26404::::0;;;::::1;;::::0;;;::::1;::::0;;26076:372::o;29952:433::-;-1:-1:-1;;;;;30126:19:0;;30088:4;30126:19;;;:11;:19;;;;;;;;30146:10;30126:31;;;;;;;;30168:36;30138:6;30186:9;30197:6;30168:9;:36::i;:::-;30237:6;30223:10;:20;;30215:29;;;;;;30255:49;30264:6;30272:10;30284:19;30297:6;30284:10;:19;:::i;:::-;30255:8;:49::i;:::-;30337:9;-1:-1:-1;;;;;30320:35:0;30329:6;-1:-1:-1;;;;;30320:35:0;;30348:6;30320:35;;;;1618:25:1;;1606:2;1591:18;;1472:177;30320:35:0;;;;;;;;-1:-1:-1;30373:4:0;;29952:433;-1:-1:-1;;;;29952:433:0:o;26665:121::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;26754:12:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;26754:24:0;;::::1;::::0;;;::::1;::::0;;26665:121::o;25305:131::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;25404:11:::1;:24:::0;;-1:-1:-1;;;;;;25404:24:0::1;-1:-1:-1::0;;;;;25404:24:0;;;::::1;::::0;;;::::1;::::0;;25305:131::o;25442:222::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25567:35:0;::::1;;::::0;;;:22:::1;:35;::::0;;;;:43;;-1:-1:-1;;25567:43:0::1;::::0;::::1;;;::::0;;25621:35:::1;25567::::0;-1:-1:-1;25621:17:0::1;:35::i;:::-;25442:222:::0;;:::o;27086:251::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27198:29:0;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:38;;-1:-1:-1;;27198:38:0::1;::::0;::::1;;;::::0;;27251:19:::1;::::0;::::1;:28;27198:29:::0;:38;27288:29:::1;;-1:-1:-1::0;;;;;27299:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;27288:29:::1;;;27297:1;27288:29;27251:67;::::0;-1:-1:-1;;;;;;27251:67:0::1;::::0;;;;;;-1:-1:-1;;;;;3164:32:1;;;27251:67:0::1;::::0;::::1;3146:51:1::0;3213:18;;;3206:34;3119:18;;27251:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27247:83;;25442:222:::0;;:::o;27735:253::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27841:28:0;::::1;27864:4;27841:28;;27833:37;;;::::0;::::1;;27901:13:::0;-1:-1:-1;;;;;27926:14:0;::::1;;27941:7;17395::::0;17422:6;-1:-1:-1;;;;;17422:6:0;;17357:79;27941:7:::1;27949:30;::::0;-1:-1:-1;;;27949:30:0;;27973:4:::1;27949:30;::::0;::::1;160:51:1::0;-1:-1:-1;;;;;27949:15:0;::::1;::::0;::::1;::::0;133:18:1;;27949:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27926:54;::::0;-1:-1:-1;;;;;;27926:54:0::1;::::0;;;;;;-1:-1:-1;;;;;3164:32:1;;;27926:54:0::1;::::0;::::1;3146:51:1::0;3213:18;;;3206:34;3119:18;;27926:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27822:166;27735:253:::0;:::o;28330:300::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;28499:7:::1;28494:3;:12;;28486:21;;;::::0;::::1;;28518:19;::::0;:73:::1;::::0;-1:-1:-1;;;28518:73:0;;::::1;::::0;::::1;8567:25:1::0;;;8608:18;;;8601:34;;;-1:-1:-1;;;;;28518:19:0;;::::1;::::0;:43:::1;::::0;8540:18:1;;28518:73:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;28602:14:0::1;:20:::0;;;;-1:-1:-1;;;28330:300:0:o;17564:148::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;17646:1:::1;17629:19:::0;;-1:-1:-1;;;;;;17629:19:0::1;::::0;;17664:40:::1;::::0;17646:1;;17664:40:::1;::::0;17646:1;;17664:40:::1;17564:148::o:0;28157:167::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;28241:1:::1;28231:9;:11;28223:20;;;::::0;::::1;;28258:19;;;;;;;;;-1:-1:-1::0;;;;;28258:19:0::1;-1:-1:-1::0;;;;;28258:27:0::1;;28293:9;28258:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;28254:63:::0;::::1;28157:167::o:0;25162:137::-;25238:11;;-1:-1:-1;;;;;25238:11:0;25226:10;:23;25218:32;;;;;;25279:11;;25261:30;;-1:-1:-1;;;;;25279:11:0;25261:17;:30::i;24995:161::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;25059:15:::1;::::0;-1:-1:-1;;;25059:15:0;::::1;;;25058:16;25050:55;;;::::0;-1:-1:-1;;;25050:55:0;;8848:2:1;25050:55:0::1;::::0;::::1;8830:21:1::0;8887:2;8867:18;;;8860:30;8926:29;8906:18;;;8899:57;8973:18;;25050:55:0::1;8646:351:1::0;25050:55:0::1;25133:15;::::0;;-1:-1:-1;;25116:32:0;::::1;-1:-1:-1::0;;;25133:15:0;;;::::1;;;25132:16;25116:32:::0;;::::1;;::::0;;24995:161::o;25670:400::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;25831:7:::1;::::0;25848:2:::1;::::0;25831:15:::1;::::0;25839:7;;25831::::1;;:15;:::i;:::-;:19;;;;25823:55;;;::::0;-1:-1:-1;;;25823:55:0;;9204:2:1;25823:55:0::1;::::0;::::1;9186:21:1::0;9243:2;9223:18;;;9216:30;9282:26;9262:18;;;9255:54;9326:18;;25823:55:0::1;9002:348:1::0;25823:55:0::1;25897:12;::::0;25911:2:::1;25897:12:::0;;;::::1;;;:16;;25889:59;;;::::0;-1:-1:-1;;;25889:59:0;;9557:2:1;25889:59:0::1;::::0;::::1;9539:21:1::0;9596:2;9576:18;;;9569:30;9635:33;9615:18;;;9608:61;9686:18;;25889:59:0::1;9355:355:1::0;25889:59:0::1;25959:7;:14:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;25984:16:0;;;;25959:14:::1;25984:16:::0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;26038:24:0;26011:16;;;::::1;::::0;;;::::1;-1:-1:-1::0;;26038:24:0;;;;;;;;;::::1;;::::0;;;::::1;::::0;;25670:400::o;31324:94::-;31365:13;31398:12;31391:19;;;;;:::i;29753:193::-;29859:4;29876:40;29886:10;29898:9;29909:6;29876:9;:40::i;27514:215::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27623:28:0;::::1;27615:63;;;::::0;-1:-1:-1;;;27615:63:0;;9917:2:1;27615:63:0::1;::::0;::::1;9899:21:1::0;9956:2;9936:18;;;9929:30;9995:25;9975:18;;;9968:53;10038:18;;27615:63:0::1;9715:347:1::0;27615:63:0::1;27689:15;:32:::0;;-1:-1:-1;;;;;;27689:32:0::1;-1:-1:-1::0;;;;;27689:32:0;;;::::1;::::0;;;::::1;::::0;;27514:215::o;27343:165::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;27461:1:::1;27454:3;27439:12;;27452:1;27439:14;;;;:::i;:::-;:18;;;;:::i;:::-;27438:24;;;;:::i;:::-;27431:5;:31;;27423:40;;;::::0;::::1;;27491:9;::::0;27487:13:::1;::::0;27491:9:::1;;27487:2;:13;:::i;:::-;27481:19;::::0;:5;:19:::1;:::i;:::-;27474:6;:26:::0;-1:-1:-1;27343:165:0:o;26792:131::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;26886:29:::1;26902:12;26886:15;:29::i;26454:205::-:0;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;26573:1:::1;26558:14;;:16;:53;;;;;26607:3;26592:12;;26605:1;26592:14;;;;:::i;:::-;:18;;;;:::i;:::-;26576:13;:35;;26558:53;26550:62;;;::::0;::::1;;26623:14;:28:::0;26454:205::o;26929:151::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27038:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:34;;-1:-1:-1;;27038:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26929:151::o;17718:244::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17807:22:0;::::1;17799:73;;;::::0;-1:-1:-1;;;17799:73:0;;12047:2:1;17799:73:0::1;::::0;::::1;12029:21:1::0;12086:2;12066:18;;;12059:30;12125:34;12105:18;;;12098:62;-1:-1:-1;;;12176:18:1;;;12169:36;12222:19;;17799:73:0::1;11845:402:1::0;17799:73:0::1;17883:6;:17:::0;;-1:-1:-1;;;;;;17883:17:0::1;-1:-1:-1::0;;;;;17883:17:0;::::1;::::0;;::::1;::::0;;17916:38:::1;::::0;17883:17;;;;17916:38:::1;::::0;17883:6;17916:38:::1;17718:244:::0;:::o;27994:157::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;28066:50:::1;::::0;28051:12:::1;::::0;28066:10:::1;::::0;28089:21:::1;::::0;28051:12;28066:50;28051:12;28066:50;28089:21;28066:10;:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28050:66;;;28135:7;28127:16;;;::::0;::::1;30391:317:::0;-1:-1:-1;;;;;30521:19:0;;;;;;:44;;-1:-1:-1;;;;;;30544:21:0;;;;30521:44;30512:93;;;;-1:-1:-1;;;30512:93:0;;12664:2:1;30512:93:0;;;12646:21:1;12703:2;12683:18;;;12676:30;12742:34;12722:18;;;12715:62;-1:-1:-1;;;12793:18:1;;;12786:32;12835:19;;30512:93:0;12462:398:1;30512:93:0;-1:-1:-1;;;;;30616:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30668:32;;1618:25:1;;;30668:32:0;;1591:18:1;30668:32:0;;;;;;;30391:317;;;:::o;20808:717::-;-1:-1:-1;;;;;20938:22:0;;20922:15;20938:22;;;:16;:22;;;;;;;;;:44;;-1:-1:-1;;;;;;20962:20:0;;;;;;:16;:20;;;;;;;;20938:44;:53;;;-1:-1:-1;20984:7:0;;;;20938:53;-1:-1:-1;;;;;21013:28:0;;;21002:10;21013:28;;;:22;:28;;;;;;;21064:26;;;;;;;;20922:69;;-1:-1:-1;21013:28:0;;;;;21064:26;21101:417;;;;21115:32;21130:4;21135:2;21138:6;21145:1;21115:14;:32::i;:::-;21101:417;;;21186:15;;-1:-1:-1;;;21186:15:0;;;;21178:24;;;;;;21220:5;21217:290;;;21226:26;21237:4;21242:2;21245:6;21226:10;:26::i;21217:290::-;21275:6;21272:235;;;21306:7;;;;21305:8;:22;;;;-1:-1:-1;21315:12:0;;;;;;;21305:22;21302:48;;;21328:22;21344:5;21328:15;:22::i;:::-;21369:27;21381:4;21386:2;21389:6;21369:11;:27::i;21272:235::-;21437:54;21452:4;21457:2;21460:6;21487:3;21480:6;21467:12;;;;;;;;;;;:19;;;;;;:::i;:::-;:23;;;;:::i;:::-;21437:14;:54::i;:::-;20911:614;;;20808:717;;;:::o;21531:1436::-;19659:7;:14;;-1:-1:-1;;19659:14:0;19669:4;19659:14;;;21669:4:::1;19659:7:::0;21651:24;;;:9:::1;:24;::::0;;;;;21701:14:::1;::::0;21729:27;;::::1;21726:174;;;21776:12;:36;;;;;21811:1;21790:20;:22;21776:36;21773:116;;;-1:-1:-1::0;21840:20:0;21773:116:::1;;;21882:7;;;;21773:116;21946:10;:23:::0;21910:28:::1;::::0;21970:3:::1;::::0;21939:30:::1;::::0;21946:23:::1;::::0;::::1;;;21939:6:::0;:30:::1;:::i;:::-;:34;;;;:::i;:::-;21910:63:::0;-1:-1:-1;21984:23:0::1;22008:27;21910:63:::0;22008:6;:27:::1;:::i;:::-;21984:51:::0;-1:-1:-1;22046:23:0::1;22070:22;22091:1;22070:20:::0;:22:::1;:::i;:::-;22046:46:::0;-1:-1:-1;22103:26:0::1;22130:36;22046:46:::0;22130:20;:36:::1;:::i;:::-;22103:63:::0;-1:-1:-1;22184:34:0::1;22103:63:::0;22184:15;:34:::1;:::i;:::-;22177:41:::0;-1:-1:-1;22244:21:0::1;22276:25;22177:41:::0;22276:17:::1;:25::i;:::-;22312:14;22327:28;22349:6:::0;22327:21:::1;:28;:::i;:::-;22312:43:::0;-1:-1:-1;22366:20:0::1;22415:6:::0;22388:25:::1;22395:18:::0;22312:43;22388:25:::1;:::i;:::-;22387:34;;;;:::i;:::-;22366:55:::0;-1:-1:-1;22432:20:0::1;22453:19;22366:55:::0;22453:6;:19:::1;:::i;:::-;22517:10;:23:::0;22432:40;;-1:-1:-1;22483:20:0::1;::::0;22541:3:::1;::::0;22504:36:::1;::::0;22517:23:::1;;22432:40:::0;22504:36:::1;:::i;:::-;:40;;;;:::i;:::-;22483:61:::0;-1:-1:-1;22555:18:0::1;22574:25;22483:61:::0;22574:12;:25:::1;:::i;:::-;22555:44:::0;-1:-1:-1;22614:14:0;;22610:97:::1;;22647:19;;;;;;;;;-1:-1:-1::0;;;;;22647:19:0::1;-1:-1:-1::0;;;;;22647:27:0::1;;22682:10;22647:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22643:64:::0;::::1;22753:15;::::0;22745:66:::1;::::0;22718:22:::1;::::0;-1:-1:-1;;;;;22753:15:0::1;::::0;22801:5:::1;::::0;22782:12;;22718:22;22745:66;22718:22;22745:66;22782:12;22753:15;22801:5;22745:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22717:94;;;22840:5;22822:23;;22856:43;22870:15;22886:12;22856:13;:43::i;:::-;22915:44;::::0;;8567:25:1;;;8623:2;8608:18;;8601:34;;;22915:44:0::1;::::0;8540:18:1;22915:44:0::1;;;;;;;21611:1356;;;;;;;;;;;;;19674:1;-1:-1:-1::0;19676:7:0;:15;;-1:-1:-1;;19676:15:0;;;21531:1436::o;23447:684::-;23609:8;;23588:20;;23622:3;;23609:12;;23618:3;;23609:8;;;;;:12;:::i;:::-;:16;;;;:::i;:::-;-1:-1:-1;;;;;23636:15:0;;;;;;:9;:15;;;;;:23;;23588:37;;-1:-1:-1;23653:6:0;;23636:15;;;:23;;23653:6;;23636:23;:::i;:::-;;;;-1:-1:-1;;23680:10:0;;-1:-1:-1;;;;;23680:10:0;23670:21;;;;:9;:21;;;;;:35;;23693:12;;23670:21;:35;;23693:12;;23670:35;:::i;:::-;;;;-1:-1:-1;23743:16:0;;-1:-1:-1;23747:12:0;23743:3;:16;:::i;:::-;23734:4;23716:24;;;;:9;:24;;;;;:44;;:24;;;:44;;;;;:::i;:::-;;;;-1:-1:-1;23787:10:0;;-1:-1:-1;23794:3:0;23787:6;:10;:::i;:::-;-1:-1:-1;;;;;23771:13:0;;;;;;:9;:13;;;;;:27;;:13;;;:27;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;23813:26:0;;;;;;:20;:26;;;;;;;;23809:98;;23845:19;;-1:-1:-1;;;;;23879:15:0;;;23845:19;23879:15;;;:9;:15;;;;;;;;23845:50;;-1:-1:-1;;;23845:50:0;;;;;3146:51:1;;;;3213:18;;;3206:34;23845:19:0;;;:28;;3119:18:1;;23845:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23841:66;;-1:-1:-1;;;;;23921:24:0;;;;;;:20;:24;;;;;;;;23917:92;;23951:19;;-1:-1:-1;;;;;23983:13:0;;;23951:19;23983:13;;;:9;:13;;;;;;;;23951:46;;-1:-1:-1;;;23951:46:0;;;;;3146:51:1;;;;3213:18;;;3206:34;23951:19:0;;;:28;;3119:18:1;;23951:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23947:62;;24023:19;;24051:14;;24023:43;;-1:-1:-1;;;;;;24023:43:0;;-1:-1:-1;;;;;24023:19:0;;;;:27;;:43;;;;1618:25:1;;;1606:2;1591:18;;1472:177;24023:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24019:59;-1:-1:-1;;;;;24093:30:0;;;;;;;24111:10;24118:3;24111:6;:10;:::i;:::-;24093:30;;1618:25:1;;;1606:2;1591:18;24093:30:0;;;;;;;23577:554;23447:684;;;;:::o;22973:230::-;23104:6;;23096;:14;;23088:47;;;;-1:-1:-1;;;23088:47:0;;13200:2:1;23088:47:0;;;13182:21:1;13239:2;13219:18;;;13212:30;-1:-1:-1;;;13258:18:1;;;13251:51;13319:18;;23088:47:0;12998:345:1;23088:47:0;23183:7;;23146:49;;23161:4;;23166:2;;23169:6;;23191:3;;23176:14;;23183:7;;23169:6;23176:14;:::i;23209:232::-;23341:6;;23333;:14;;23325:47;;;;-1:-1:-1;;;23325:47:0;;13200:2:1;23325:47:0;;;13182:21:1;13239:2;13219:18;;;13212:30;-1:-1:-1;;;13258:18:1;;;13251:51;13319:18;;23325:47:0;12998:345:1;23325:47:0;23420:8;;23383:50;;23398:4;;23403:2;;23406:6;;23429:3;;23413:15;;23420:8;;;;;23406:6;23413:15;:::i;24137:465::-;24244:16;;;24258:1;24244:16;;;;;;;;24220:21;;24244:16;;;;;;;;;;-1:-1:-1;24244:16:0;24220:40;;24289:4;24271;24276:1;24271:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24271:23:0;;;:7;;;;;;;;;;:23;;;;24315:7;;:14;;;-1:-1:-1;;;24315:14:0;;;;:7;;;;;:12;;:14;;;;;24271:7;;24315:14;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24305:4;24310:1;24305:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24305:24:0;;;:7;;;;;;;;;:24;24372:7;;24340:54;;24357:4;;24372:7;24382:11;24340:8;:54::i;:::-;24405:7;;:189;;-1:-1:-1;;;24405:189:0;;-1:-1:-1;;;;;24405:7:0;;;;:58;;:189;;24478:11;;24405:7;;24521:4;;24548;;24568:15;;24405:189;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24608:373;24747:7;;24715:54;;24732:4;;-1:-1:-1;;;;;24747:7:0;24757:11;24715:8;:54::i;:::-;24780:7;;24922:10;;24780:193;;-1:-1:-1;;;24780:193:0;;24844:4;24780:193;;;15194:34:1;15244:18;;;15237:34;;;24780:7:0;15287:18:1;;;15280:34;;;15330:18;;;15323:34;-1:-1:-1;;;;;24922:10:0;;;15373:19:1;;;15366:44;24947:15:0;15426:19:1;;;15419:35;24780:7:0;;;:23;;24811:9;;15128:19:1;;24780:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24608:373;;:::o;414:597:1:-;526:4;555:2;584;573:9;566:21;616:6;610:13;659:6;654:2;643:9;639:18;632:34;684:1;694:140;708:6;705:1;702:13;694:140;;;803:14;;;799:23;;793:30;769:17;;;788:2;765:26;758:66;723:10;;694:140;;;852:6;849:1;846:13;843:91;;;922:1;917:2;908:6;897:9;893:22;889:31;882:42;843:91;-1:-1:-1;995:2:1;974:15;-1:-1:-1;;970:29:1;955:45;;;;1002:2;951:54;;414:597;-1:-1:-1;;;414:597:1:o;1016:131::-;-1:-1:-1;;;;;1091:31:1;;1081:42;;1071:70;;1137:1;1134;1127:12;1152:315;1220:6;1228;1281:2;1269:9;1260:7;1256:23;1252:32;1249:52;;;1297:1;1294;1287:12;1249:52;1336:9;1323:23;1355:31;1380:5;1355:31;:::i;:::-;1405:5;1457:2;1442:18;;;;1429:32;;-1:-1:-1;;;1152:315:1:o;1654:156::-;1720:20;;1780:4;1769:16;;1759:27;;1749:55;;1800:1;1797;1790:12;1749:55;1654:156;;;:::o;1815:322::-;1886:6;1894;1902;1955:2;1943:9;1934:7;1930:23;1926:32;1923:52;;;1971:1;1968;1961:12;1923:52;1994:27;2011:9;1994:27;:::i;:::-;1984:37;;2040:36;2072:2;2061:9;2057:18;2040:36;:::i;:::-;2030:46;;2095:36;2127:2;2116:9;2112:18;2095:36;:::i;:::-;2085:46;;1815:322;;;;;:::o;2142:456::-;2219:6;2227;2235;2288:2;2276:9;2267:7;2263:23;2259:32;2256:52;;;2304:1;2301;2294:12;2256:52;2343:9;2330:23;2362:31;2387:5;2362:31;:::i;:::-;2412:5;-1:-1:-1;2469:2:1;2454:18;;2441:32;2482:33;2441:32;2482:33;:::i;:::-;2142:456;;2534:7;;-1:-1:-1;;;2588:2:1;2573:18;;;;2560:32;;2142:456::o;2603:118::-;2689:5;2682:13;2675:21;2668:5;2665:32;2655:60;;2711:1;2708;2701:12;2726:241;2782:6;2835:2;2823:9;2814:7;2810:23;2806:32;2803:52;;;2851:1;2848;2841:12;2803:52;2890:9;2877:23;2909:28;2931:5;2909:28;:::i;:::-;2956:5;2726:241;-1:-1:-1;;;2726:241:1:o;3251:247::-;3310:6;3363:2;3351:9;3342:7;3338:23;3334:32;3331:52;;;3379:1;3376;3369:12;3331:52;3418:9;3405:23;3437:31;3462:5;3437:31;:::i;3692:382::-;3757:6;3765;3818:2;3806:9;3797:7;3793:23;3789:32;3786:52;;;3834:1;3831;3824:12;3786:52;3873:9;3860:23;3892:31;3917:5;3892:31;:::i;:::-;3942:5;-1:-1:-1;3999:2:1;3984:18;;3971:32;4012:30;3971:32;4012:30;:::i;:::-;4061:7;4051:17;;;3692:382;;;;;:::o;4079:316::-;4156:6;4164;4172;4225:2;4213:9;4204:7;4200:23;4196:32;4193:52;;;4241:1;4238;4231:12;4193:52;-1:-1:-1;;4264:23:1;;;4334:2;4319:18;;4306:32;;-1:-1:-1;4385:2:1;4370:18;;;4357:32;;4079:316;-1:-1:-1;4079:316:1:o;4400:393::-;4478:6;4486;4494;4502;4555:3;4543:9;4534:7;4530:23;4526:33;4523:53;;;4572:1;4569;4562:12;4523:53;4595:27;4612:9;4595:27;:::i;:::-;4585:37;;4641:36;4673:2;4662:9;4658:18;4641:36;:::i;:::-;4631:46;;4696:36;4728:2;4717:9;4713:18;4696:36;:::i;:::-;4686:46;;4751:36;4783:2;4772:9;4768:18;4751:36;:::i;:::-;4741:46;;4400:393;;;;;;;:::o;5034:180::-;5093:6;5146:2;5134:9;5125:7;5121:23;5117:32;5114:52;;;5162:1;5159;5152:12;5114:52;-1:-1:-1;5185:23:1;;5034:180;-1:-1:-1;5034:180:1:o;5219:388::-;5287:6;5295;5348:2;5336:9;5327:7;5323:23;5319:32;5316:52;;;5364:1;5361;5354:12;5316:52;5403:9;5390:23;5422:31;5447:5;5422:31;:::i;:::-;5472:5;-1:-1:-1;5529:2:1;5514:18;;5501:32;5542:33;5501:32;5542:33;:::i;6381:380::-;6460:1;6456:12;;;;6503;;;6524:61;;6578:4;6570:6;6566:17;6556:27;;6524:61;6631:2;6623:6;6620:14;6600:18;6597:38;6594:161;;;6677:10;6672:3;6668:20;6665:1;6658:31;6712:4;6709:1;6702:15;6740:4;6737:1;6730:15;6594:161;;6381:380;;;:::o;6766:356::-;6968:2;6950:21;;;6987:18;;;6980:30;7046:34;7041:2;7026:18;;7019:62;7113:2;7098:18;;6766:356::o;7127:127::-;7188:10;7183:3;7179:20;7176:1;7169:31;7219:4;7216:1;7209:15;7243:4;7240:1;7233:15;7259:204;7297:3;7333:4;7330:1;7326:12;7365:4;7362:1;7358:12;7400:3;7394:4;7390:14;7385:3;7382:23;7379:49;;;7408:18;;:::i;:::-;7444:13;;7259:204;-1:-1:-1;;;7259:204:1:o;7824:125::-;7864:4;7892:1;7889;7886:8;7883:34;;;7897:18;;:::i;:::-;-1:-1:-1;7934:9:1;;7824:125::o;7954:184::-;8024:6;8077:2;8065:9;8056:7;8052:23;8048:32;8045:52;;;8093:1;8090;8083:12;8045:52;-1:-1:-1;8116:16:1;;7954:184;-1:-1:-1;7954:184:1:o;8143:245::-;8210:6;8263:2;8251:9;8242:7;8238:23;8234:32;8231:52;;;8279:1;8276;8269:12;8231:52;8311:9;8305:16;8330:28;8352:5;8330:28;:::i;10067:168::-;10107:7;10173:1;10169;10165:6;10161:14;10158:1;10155:21;10150:1;10143:9;10136:17;10132:45;10129:71;;;10180:18;;:::i;:::-;-1:-1:-1;10220:9:1;;10067:168::o;10240:217::-;10280:1;10306;10296:132;;10350:10;10345:3;10341:20;10338:1;10331:31;10385:4;10382:1;10375:15;10413:4;10410:1;10403:15;10296:132;-1:-1:-1;10442:9:1;;10240:217::o;10462:422::-;10551:1;10594:5;10551:1;10608:270;10629:7;10619:8;10616:21;10608:270;;;10688:4;10684:1;10680:6;10676:17;10670:4;10667:27;10664:53;;;10697:18;;:::i;:::-;10747:7;10737:8;10733:22;10730:55;;;10767:16;;;;10730:55;10846:22;;;;10806:15;;;;10608:270;;;10612:3;10462:422;;;;;:::o;10889:806::-;10938:5;10968:8;10958:80;;-1:-1:-1;11009:1:1;11023:5;;10958:80;11057:4;11047:76;;-1:-1:-1;11094:1:1;11108:5;;11047:76;11139:4;11157:1;11152:59;;;;11225:1;11220:130;;;;11132:218;;11152:59;11182:1;11173:10;;11196:5;;;11220:130;11257:3;11247:8;11244:17;11241:43;;;11264:18;;:::i;:::-;-1:-1:-1;;11320:1:1;11306:16;;11335:5;;11132:218;;11434:2;11424:8;11421:16;11415:3;11409:4;11406:13;11402:36;11396:2;11386:8;11383:16;11378:2;11372:4;11369:12;11365:35;11362:77;11359:159;;;-1:-1:-1;11471:19:1;;;11503:5;;11359:159;11550:34;11575:8;11569:4;11550:34;:::i;:::-;11620:6;11616:1;11612:6;11608:19;11599:7;11596:32;11593:58;;;11631:18;;:::i;:::-;11669:20;;10889:806;-1:-1:-1;;;10889:806:1:o;11700:140::-;11758:5;11787:47;11828:4;11818:8;11814:19;11808:4;11787:47;:::i;12865:128::-;12905:3;12936:1;12932:6;12929:1;12926:13;12923:39;;;12942:18;;:::i;:::-;-1:-1:-1;12978:9:1;;12865:128::o;13480:127::-;13541:10;13536:3;13532:20;13529:1;13522:31;13572:4;13569:1;13562:15;13596:4;13593:1;13586:15;13612:251;13682:6;13735:2;13723:9;13714:7;13710:23;13706:32;13703:52;;;13751:1;13748;13741:12;13703:52;13783:9;13777:16;13802:31;13827:5;13802:31;:::i;13868:980::-;14130:4;14178:3;14167:9;14163:19;14209:6;14198:9;14191:25;14235:2;14273:6;14268:2;14257:9;14253:18;14246:34;14316:3;14311:2;14300:9;14296:18;14289:31;14340:6;14375;14369:13;14406:6;14398;14391:22;14444:3;14433:9;14429:19;14422:26;;14483:2;14475:6;14471:15;14457:29;;14504:1;14514:195;14528:6;14525:1;14522:13;14514:195;;;14593:13;;-1:-1:-1;;;;;14589:39:1;14577:52;;14684:15;;;;14649:12;;;;14625:1;14543:9;14514:195;;;-1:-1:-1;;;;;;;14765:32:1;;;;14760:2;14745:18;;14738:60;-1:-1:-1;;;14829:3:1;14814:19;14807:35;14726:3;13868:980;-1:-1:-1;;;13868:980:1:o;15465:306::-;15553:6;15561;15569;15622:2;15610:9;15601:7;15597:23;15593:32;15590:52;;;15638:1;15635;15628:12;15590:52;15667:9;15661:16;15651:26;;15717:2;15706:9;15702:18;15696:25;15686:35;;15761:2;15750:9;15746:18;15740:25;15730:35;;15465:306;;;;;:::o
Swarm Source
ipfs://c999a8a079c99f06e84b8b0abb5ae947e4a89e4f841312a0932b141ef5cfa900
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)