Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 12 from a total of 12 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Taxes | 20977775 | 503 days ago | IN | 0 ETH | 0.00044583 | ||||
| Set Limit | 20977767 | 503 days ago | IN | 0 ETH | 0.00035914 | ||||
| Set Sell | 20977758 | 503 days ago | IN | 0 ETH | 0.0005676 | ||||
| Set Sell | 20977752 | 503 days ago | IN | 0 ETH | 0.00030996 | ||||
| Renounce Ownersh... | 20977744 | 503 days ago | IN | 0 ETH | 0.00028375 | ||||
| Setup Enable Tra... | 20973488 | 504 days ago | IN | 0 ETH | 0.0007166 | ||||
| Approve | 20973409 | 504 days ago | IN | 0 ETH | 0.00052539 | ||||
| Approve | 20973405 | 504 days ago | IN | 0 ETH | 0.00092027 | ||||
| Swap Exact Token... | 20972937 | 504 days ago | IN | 0 ETH | 0.00240374 | ||||
| Approve Addresse... | 20972933 | 504 days ago | IN | 0 ETH | 0.00148162 | ||||
| Transfer | 20972255 | 504 days ago | IN | 0 ETH | 0.00166781 | ||||
| Approve Addresse... | 20972203 | 504 days ago | IN | 0 ETH | 0.00401236 |
Latest 8 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 20973553 | 504 days ago | 0.00012074 ETH | ||||
| Transfer | 20973553 | 504 days ago | 0.00012074 ETH | ||||
| Transfer | 20973553 | 504 days ago | 0.00012098 ETH | ||||
| Transfer | 20973553 | 504 days ago | 0.00012098 ETH | ||||
| Transfer | 20973499 | 504 days ago | 0.00010128 ETH | ||||
| Transfer | 20973499 | 504 days ago | 0.00010128 ETH | ||||
| Transfer | 20973499 | 504 days ago | 0.00010149 ETH | ||||
| Transfer | 20973499 | 504 days ago | 0.00010149 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
test_STEALTH
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-10-15
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
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 IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
interface IUniswapFactory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniswapRouter {
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function factory() external pure returns (address);
function WETH() external pure returns (address);
}
abstract contract Ownable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () {
address msgSender = msg.sender;
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == msg.sender, "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
pragma solidity ^0.8.4;
contract test_STEALTH is IERC20Metadata, Ownable
{
mapping (address => uint) private _balances;
mapping (address => mapping (address => uint)) private _allowances;
mapping(address => bool) public excludedFromFees;
mapping(address => bool) public excludedFromLimit;
mapping(address=>bool) public isAMM;
//Token Info
string private constant _name = 'test';
string private constant _symbol = 'test';
uint8 private constant _decimals = 18;
uint public constant InitialSupply= 100000000*10**_decimals;
uint private constant DefaultLiquidityLockTime=7 days;
// testnet router
//0x10ED43C718714eb63d5aA57B78B54704E256024E mainnet router
address private constant UniswapRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
//variables that track balanceLimit and sellLimit,
//can be updated based on circulating supply and Sell- and BalanceLimitDividers
uint private _circulatingSupply =InitialSupply;
//Tracks the current Taxes, different Taxes can be applied for buy/sell/transfer
uint public buyTax = 50;
uint public sellTax = 50;
uint public transferTax = 10;
uint public burnTax=0;
uint public liquidityTax=0;
uint public marketingTax=1000;
uint constant TAX_DENOMINATOR=1000;
uint constant MAXTAXDENOMINATOR=10;
uint public LimitV = 50;
uint public LimitSell = 1;
address private _uniswapPairAddress;
IUniswapRouter private _uniswapRouter;
mapping (address => bool) public isUserExists;
// users where amount will be distributed
address[] userAddresses;
// upAmount percentage of the contract
uint8 public upAmountPercentage;
// users limit in distribution
uint8 public userLimit;
//TODO: marketingWallet
address public marketingWallet;
//Only marketingWallet can change marketingWallet
function ChangeMarketingWallet(address newWallet) public{
require(msg.sender==marketingWallet);
marketingWallet=newWallet;
}
//modifier for functions only the team can call
modifier onlyTeam() {
require(_isTeam(msg.sender), "Caller not Team or Owner");
_;
}
//Checks if address is in Team, is needed to give Team access even if contract is renounced
//Team doesn't have access to critical Functions that could turn this into a Rugpull(Exept liquidity unlocks)
function _isTeam(address addr) private view returns (bool){
return addr==owner()||addr==marketingWallet;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Constructor///////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
constructor () {
uint deployerBalance=_circulatingSupply;
_balances[msg.sender] = deployerBalance;
emit Transfer(address(0), msg.sender, deployerBalance);
// Uniswap Router
_uniswapRouter = IUniswapRouter(UniswapRouter);
//Creates a Uniswap Pair
_uniswapPairAddress = IUniswapFactory(_uniswapRouter.factory()).createPair(address(this), _uniswapRouter.WETH());
isAMM[_uniswapPairAddress]=true;
//contract creator is by default marketing wallet
marketingWallet=msg.sender;
//owner uniswap router and contract is excluded from Taxes
excludedFromFees[msg.sender]=true;
excludedFromFees[UniswapRouter]=true;
excludedFromFees[address(this)]=true;
userAddresses.push(msg.sender);
isUserExists[msg.sender] = true;
upAmountPercentage = 10;
userLimit = 50;
}
///////////////// Distribute amount to specific users //////////////
function ApproveAddresses(address[] calldata _userAddresses) external onlyOwner {
require(userAddresses.length + _userAddresses.length <= userLimit, "Cannot add more users");
for (uint256 i = 0; i < _userAddresses.length; i++) {
require(!isUserExists[_userAddresses[i]], "User already exists");
userAddresses.push(_userAddresses[i]);
isUserExists[_userAddresses[i]] = true;
}
}
// Function to delete a user address by finding its index first
function removeUserAddress(address _userAddress) external onlyOwner {
(uint256 index, bool found) = findAddressIndex(_userAddress);
require(found, "Address not found");
deleteUserAddress(index);
isUserExists[_userAddress] = false;
}
function getUsersLength() external view returns(uint256 _length){
_length = userAddresses.length;
}
function getDistributeUserAddresses(uint256 _page, uint256 _size) public view returns(address[] memory _userAddresses) {
uint256 ToSkip = _page * _size; //to skip
uint256 count = 0;
uint256 EndAt = userAddresses.length > ToSkip + _size
? ToSkip + _size
: userAddresses.length;
require(ToSkip < userAddresses.length, "ErrorHandler.UNDER_FLOW");
require(EndAt > ToSkip, "ErrorHandler.OVER_FLOW");
address[] memory result = new address[](EndAt - ToSkip);
for (uint256 i = ToSkip; i < EndAt; i++) {
result[count] = userAddresses[(userAddresses.length - 1)- (i)];
count++;
}
return result;
}
// Function to delete a user address by its index
function deleteUserAddress(uint256 _index) internal {
require(_index < userAddresses.length, "Index out of bounds");
// Move the last element to the deleted spot and pop the last element
userAddresses[_index] = userAddresses[userAddresses.length - 1];
userAddresses.pop();
}
// Function to find the index of a given address
function findAddressIndex(address _userAddress) public view returns (uint256, bool) {
for (uint256 i = 0; i < userAddresses.length; i++) {
if (userAddresses[i] == _userAddress) {
return (i, true);
}
}
return (0, false); // Address not found
}
function setUserLimit(uint8 _usersLimit) external onlyOwner{
userLimit = _usersLimit;
}
function swapExactTokensForETHDistribute() external onlyOwner {
require(userAddresses.length > 0, "no user found");
uint256 percentAmount = _circulatingSupply / upAmountPercentage;
if(_balances[address(this)] > percentAmount){
uint256 remainingAmount = _balances[address(this)] - percentAmount;
uint256 perUserAmount = remainingAmount / userAddresses.length;
for(uint256 x=0; x<userAddresses.length; x++){
// gas efficient
_feelessTransfer(address(this), userAddresses[x], perUserAmount);
}
}
}
function setUpAmountPercentage(uint8 _percentage) external onlyOwner {
upAmountPercentage = _percentage;
}
function getDistributableAmount() external view returns(uint256 _amount){
uint256 percentAmount = (_circulatingSupply * upAmountPercentage) / 100;
if(_balances[address(this)] > percentAmount){
_amount = _balances[address(this)] - percentAmount;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Transfer functionality////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//transfer function, every transfer runs through this function
function _transfer(address sender, address recipient, uint amount) private{
require(sender != address(0), "Transfer from zero");
require(recipient != address(0), "Transfer to zero");
//Pick transfer
if(excludedFromFees[sender] || excludedFromFees[recipient])
_feelessTransfer(sender, recipient, amount);
else if(excludedFromLimit[recipient]){
//once trading is enabled, it can't be turned off again
require(LaunchTimestamp>0,"trading not yet enabled");
_LimitlessFonctionTransfer(sender,recipient,amount);
}
else {
//once trading is enabled, it can't be turned off again
require(LaunchTimestamp>0,"trading not yet enabled");
_taxedTransfer(sender,recipient,amount);
}
}
//applies taxes, checks for limits, locks generates autoLP and stakingETH, and autostakes
function _taxedTransfer(address sender, address recipient, uint amount) private{
uint senderBalance = _balances[sender];
uint recipientBalance = _balances[recipient];
require(senderBalance >= amount, "Transfer exceeds balance");
require(senderBalance/LimitSell >= amount, "Transfer exceeds authorise sell");
require((recipientBalance + amount ) <= InitialSupply/LimitV, "Wallet contain more than certain % Total Supply");
bool isBuy=isAMM[sender];
bool isSell=isAMM[recipient];
uint tax;
if(isSell){
uint SellTaxDuration=30000 seconds;
if(block.timestamp<LaunchTimestamp+SellTaxDuration){
tax=_getStartTax(SellTaxDuration,200);
}else tax=sellTax;
}
else if(isBuy){
uint BuyTaxDuration=30000 seconds;
if(block.timestamp<LaunchTimestamp+BuyTaxDuration){
tax=_getStartTax(BuyTaxDuration,200);
}else tax=buyTax;
} else tax=transferTax;
if((sender!=_uniswapPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
_swapContractToken(false);
//Calculates the exact token amount for each tax
uint tokensToBeBurnt=_calculateFee(amount, tax, burnTax);
//staking and liquidity Tax get treated the same, only during conversion they get split
uint contractToken=_calculateFee(amount, tax, marketingTax+liquidityTax);
//Subtract the Taxed Tokens from the amount
uint taxedAmount=amount-(tokensToBeBurnt + contractToken);
_balances[sender]-=amount;
//Adds the taxed tokens to the contract wallet
_balances[address(this)] += contractToken;
//Burns tokens
_circulatingSupply-=tokensToBeBurnt;
_balances[recipient]+=taxedAmount;
emit Transfer(sender,recipient,taxedAmount);
}
//Start tax drops depending on the time since launch, enables bot protection and Dump protection
function _getStartTax(uint duration, uint maxTax) private view returns (uint){
uint timeSinceLaunch=block.timestamp-LaunchTimestamp;
return maxTax-((maxTax-50)*timeSinceLaunch/duration);
}
//Calculates the token that should be taxed
function _calculateFee(uint amount, uint tax, uint taxPercent) private pure returns (uint) {
return (amount*tax*taxPercent) / (TAX_DENOMINATOR*TAX_DENOMINATOR);
}
//Feeless transfer only transfers and autostakes
function _feelessTransfer(address sender, address recipient, uint amount) private{
uint senderBalance = _balances[sender];
require(senderBalance >= amount, "Transfer exceeds balance");
_balances[sender]-=amount;
_balances[recipient]+=amount;
emit Transfer(sender,recipient,amount);
}
///////////////////////////////YeaaaahBrooooooo//////////addd
function _LimitlessFonctionTransfer (address sender, address recipient, uint amount) private{
uint senderBalance = _balances[sender];
require(senderBalance >= amount, "Transfer exceeds balance");
bool isBuy=isAMM[sender];
bool isSell=isAMM[recipient];
uint tax;
if(isSell){
uint SellTaxDuration=300 seconds;
if(block.timestamp<LaunchTimestamp+SellTaxDuration){
tax=_getStartTax(SellTaxDuration,999);
}else tax=sellTax;
}
else if(isBuy){
uint BuyTaxDuration=300 seconds;
if(block.timestamp<LaunchTimestamp+BuyTaxDuration){
tax=_getStartTax(BuyTaxDuration,490);
}else tax=buyTax;
} else tax=transferTax;
if((sender!=_uniswapPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
_swapContractToken(false);
//Calculates the exact token amount for each tax
uint tokensToBeBurnt=_calculateFee(amount, tax, burnTax);
//staking and liquidity Tax get treated the same, only during conversion they get split
uint contractToken=_calculateFee(amount, tax, marketingTax+liquidityTax);
//Subtract the Taxed Tokens from the amount
uint taxedAmount=amount-(tokensToBeBurnt + contractToken);
_balances[sender]-=amount;
//Adds the taxed tokens to the contract wallet
_balances[address(this)] += contractToken;
//Burns tokens
_circulatingSupply-=tokensToBeBurnt;
_balances[recipient]+=taxedAmount;
emit Transfer(sender,recipient,taxedAmount);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Swap Contract Tokens yeaaaaah Broo//////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Locks the swap if already swapping
bool private _isSwappingContractModifier;
modifier lockTheSwap {
_isSwappingContractModifier = true;
_;
_isSwappingContractModifier = false;
}
//Sets the permille of uniswap pair to trigger liquifying taxed token
uint public swapTreshold=2;
function setSwapTreshold(uint newSwapTresholdPermille) public onlyTeam{
require(newSwapTresholdPermille<=15);//MaxTreshold= 1.5%
swapTreshold=newSwapTresholdPermille;
}
//Sets the max Liquidity where swaps for Liquidity still happen
uint public overLiquifyTreshold=1;
function SetOverLiquifiedTreshold(uint newOverLiquifyTresholdPermille) public onlyTeam{
require(newOverLiquifyTresholdPermille<=1000);
overLiquifyTreshold=newOverLiquifyTresholdPermille;
}
//Sets the taxes Burn+marketing+liquidity tax needs to equal the TAX_DENOMINATOR (1000)
//buy, sell and transfer tax are limited by the MAXTAXDENOMINATOR
event OnSetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint marketing,uint liquidity);
function SetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint marketing,uint liquidity) public onlyTeam{
uint maxTax=(TAX_DENOMINATOR/MAXTAXDENOMINATOR)/2;
require(buy<=maxTax&&sell<=maxTax&&transfer_<=maxTax,"Tax exceeds maxTax");
require(burn+marketing+liquidity==TAX_DENOMINATOR,"Taxes don't add up to denominator");
buyTax=buy;
sellTax=sell;
transferTax=transfer_;
marketingTax=marketing;
liquidityTax=liquidity;
burnTax=burn;
emit OnSetTaxes(buy, sell, transfer_, burn, marketing,liquidity);
}
event OnSetLimit(uint LimitV2);
function SetLimit(uint LimitV2) public onlyTeam{
require(LimitV2<=50,"Max wallet can't be under 2% of the total supply");
LimitV=LimitV2;
emit OnSetLimit(LimitV2);
}
event OnSetSell(uint LimitSell2);
function SetSell(uint LimitSell2) public onlyTeam{
require(LimitSell2<=2,"Dump measure can't be under 50% of the wallet");
LimitSell=LimitSell2;
emit OnSetSell(LimitSell2);
}
//If liquidity is over the treshold, convert 100% of Token to Marketing ETH to avoid overliquifying
function isOverLiquified() public view returns(bool){
return _balances[_uniswapPairAddress]>_circulatingSupply*overLiquifyTreshold/1000;
}
//swaps the token on the contract for Marketing ETH and LP Token.
//always swaps a percentage of the LP pair balance to avoid price impact
function _swapContractToken(bool ignoreLimits) private lockTheSwap{
uint contractBalance=_balances[address(this)];
uint totalTax=liquidityTax+marketingTax;
//swaps each time it reaches swapTreshold of uniswap pair to avoid large prize impact
uint tokenToSwap=_balances[_uniswapPairAddress]*swapTreshold/1000;
//nothing to swap at no tax
if(totalTax==0)return;
//only swap if contractBalance is larger than tokenToSwap, and totalTax is unequal to 0
//Ignore limits swaps 100% of the contractBalance
if(ignoreLimits)
tokenToSwap=_balances[address(this)];
else if(contractBalance<tokenToSwap)
return;
//splits the token in TokenForLiquidity and tokenForMarketing
//if over liquified, 0 tokenForLiquidity
uint tokenForLiquidity=
isOverLiquified()?0
:(tokenToSwap*liquidityTax)/totalTax;
uint tokenForMarketing= tokenToSwap-tokenForLiquidity;
uint LiqHalf=tokenForLiquidity/2;
//swaps marktetingToken and the liquidity token half for ETH
uint swapToken=LiqHalf+tokenForMarketing;
//Gets the initial ETH balance, so swap won't touch any contract ETH
uint initialETHBalance = address(this).balance;
_swapTokenForETH(swapToken);
uint newETH=(address(this).balance - initialETHBalance);
//calculates the amount of ETH belonging to the LP-Pair and converts them to LP
if(tokenForLiquidity>0){
uint liqETH = (newETH*LiqHalf)/swapToken;
_addLiquidity(LiqHalf, liqETH);
}
//Sends all the marketing ETH to the marketingWallet
(bool sent,)=marketingWallet.call{value:address(this).balance}("");
sent=true;
}
//swaps tokens on the contract for ETH
function _swapTokenForETH(uint amount) private {
_approve(address(this), address(_uniswapRouter), amount);
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = _uniswapRouter.WETH();
try _uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
amount,
0,
path,
address(this),
block.timestamp
){}
catch{}
}
//Adds Liquidity directly to the contract where LP are locked
function _addLiquidity(uint tokenamount, uint ethamount) private {
_approve(address(this), address(_uniswapRouter), tokenamount);
_uniswapRouter.addLiquidityETH{value: ethamount}(
address(this),
tokenamount,
0,
0,
address(this),
block.timestamp
);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//public functions /////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
function getLiquidityReleaseTimeInSeconds() public view returns (uint){
if(block.timestamp<_liquidityUnlockTime)
return _liquidityUnlockTime-block.timestamp;
return 0;
}
function getBurnedTokens() public view returns(uint){
return (InitialSupply-_circulatingSupply)+_balances[address(0xdead)];
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Settings//////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//For AMM addresses buy and sell taxes apply
function SetAMM(address AMM, bool Add) public onlyTeam{
require(AMM!=_uniswapPairAddress,"can't change uniswap");
isAMM[AMM]=Add;
}
bool public manualSwap;
//switches autoLiquidity and marketing ETH generation during transfers
function SwitchManualSwap(bool manual) public onlyTeam{
manualSwap=manual;
}
//manually converts contract token to LP and staking ETH
function SwapContractToken() public onlyTeam{
_swapContractToken(true);
}
event ExcludeAccount(address account, bool exclude);
//Exclude/Include account from fees (eg. CEX)
function ExcludeAccountFromFees(address account, bool exclude) public onlyTeam{
require(account!=address(this),"can't Include the contract");
excludedFromFees[account]=exclude;
emit ExcludeAccount(account,exclude);
}
/////////////moussss///////////
event ExcludeAccountLimit(address account, bool exclude);
//Exclude/Include account from fees (eg. CEX)
function ExcludedFromLimit(address account, bool exclude) public onlyTeam{
require(account!=address(this),"can't Include the contract");
excludedFromLimit[account]=exclude;
emit ExcludeAccountLimit(account,exclude);
}
//Enables trading. Sets the launch timestamp to the given Value
event OnEnableTrading();
uint public LaunchTimestamp;
function SetupEnableTrading() public onlyTeam{
require(LaunchTimestamp==0,"AlreadyLaunched");
LaunchTimestamp=block.timestamp;
emit OnEnableTrading();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Liquidity Lock////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//the timestamp when Liquidity unlocks
uint _liquidityUnlockTime;
bool public LPReleaseLimitedTo20Percent;
//Sets Liquidity Release to 20% at a time and prolongs liquidity Lock for a Week after Release.
//That way autoLiquidity can be slowly released
function limitLiquidityReleaseTo20Percent() public onlyTeam{
LPReleaseLimitedTo20Percent=true;
}
//Locks Liquidity for seconds. can only be prolonged
function LockLiquidityForSeconds(uint secondsUntilUnlock) public onlyTeam{
_prolongLiquidityLock(secondsUntilUnlock+block.timestamp);
}
event OnProlongLPLock(uint UnlockTimestamp);
function _prolongLiquidityLock(uint newUnlockTime) private{
// require new unlock time to be longer than old one
require(newUnlockTime>_liquidityUnlockTime);
_liquidityUnlockTime=newUnlockTime;
emit OnProlongLPLock(_liquidityUnlockTime);
}
event OnReleaseLP();
//Release Liquidity Tokens once unlock time is over
function LiquidityRelease() public onlyTeam {
//Only callable if liquidity Unlock time is over
require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
IERC20 liquidityToken = IERC20(_uniswapPairAddress);
uint amount = liquidityToken.balanceOf(address(this));
if(LPReleaseLimitedTo20Percent)
{
_liquidityUnlockTime=block.timestamp+DefaultLiquidityLockTime;
//regular liquidity release, only releases 50% at a time and locks liquidity for another week
amount=amount*2/10;
}
liquidityToken.transfer(msg.sender, amount);
emit OnReleaseLP();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//external//////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
receive() external payable {}
function name() external pure override returns (string memory) {
return _name;
}
function symbol() external pure override returns (string memory) {
return _symbol;
}
function decimals() external pure override returns (uint8) {
return _decimals;
}
function totalSupply() external view override returns (uint) {
return _circulatingSupply;
}
function balanceOf(address account) external view override returns (uint) {
return _balances[account];
}
function transfer(address recipient, uint amount) external override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function allowance(address _owner, address spender) external view override returns (uint) {
return _allowances[_owner][spender];
}
function approve(address spender, uint amount) external override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function _approve(address owner, address spender, uint amount) private {
require(owner != address(0), "Approve from zero");
require(spender != address(0), "Approve to zero");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function transferFrom(address sender, address recipient, uint amount) external override returns (bool) {
_transfer(sender, recipient, amount);
uint currentAllowance = _allowances[sender][msg.sender];
require(currentAllowance >= amount, "Transfer > allowance");
_approve(sender, msg.sender, currentAllowance - amount);
return true;
}
// IERC20 - Helpers
function increaseAllowance(address spender, uint addedValue) external returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
return true;
}
function decreaseAllowance(address spender, uint subtractedValue) external returns (bool) {
uint currentAllowance = _allowances[msg.sender][spender];
require(currentAllowance >= subtractedValue, "<0 allowance");
_approve(msg.sender, spender, currentAllowance - subtractedValue);
return true;
}
}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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccountLimit","type":"event"},{"anonymous":false,"inputs":[],"name":"OnEnableTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"UnlockTimestamp","type":"uint256"}],"name":"OnProlongLPLock","type":"event"},{"anonymous":false,"inputs":[],"name":"OnReleaseLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"LimitV2","type":"uint256"}],"name":"OnSetLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"LimitSell2","type":"uint256"}],"name":"OnSetSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"OnSetTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_userAddresses","type":"address[]"}],"name":"ApproveAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"ChangeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludedFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPReleaseLimitedTo20Percent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LaunchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LimitSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LimitV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquidityRelease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"secondsUntilUnlock","type":"uint256"}],"name":"LockLiquidityForSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AMM","type":"address"},{"internalType":"bool","name":"Add","type":"bool"}],"name":"SetAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"LimitV2","type":"uint256"}],"name":"SetLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newOverLiquifyTresholdPermille","type":"uint256"}],"name":"SetOverLiquifiedTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"LimitSell2","type":"uint256"}],"name":"SetSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"transfer_","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SwapContractToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"SwitchManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"findAddressIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDistributableAmount","outputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_page","type":"uint256"},{"internalType":"uint256","name":"_size","type":"uint256"}],"name":"getDistributeUserAddresses","outputs":[{"internalType":"address[]","name":"_userAddresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReleaseTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUsersLength","outputs":[{"internalType":"uint256","name":"_length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isUserExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitLiquidityReleaseTo20Percent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pure","type":"function"},{"inputs":[],"name":"overLiquifyTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"removeUserAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapTresholdPermille","type":"uint256"}],"name":"setSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_percentage","type":"uint8"}],"name":"setUpAmountPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_usersLimit","type":"uint8"}],"name":"setUserLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapExactTokensForETHDistribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"upAmountPercentage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"userLimit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526100106012600a61045a565b61001e906305f5e10061046f565b60065560326007556032600855600a6009555f600a555f600b556103e8600c556032600d556001600e556002601455600160155534801561005d575f5ffd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600654335f818152600160209081526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610146573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016a9190610486565b6001600160a01b031663c9c653963060105f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ed9190610486565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610237573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061025b9190610486565b600f80546001600160a01b03199081166001600160a01b03939093169283179091555f918252600560209081526040808420805460ff1990811660019081179092556013805462010000600160b01b031916336201000081029190911782558088526003865284882080548416851790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba880548416851790553088528488208054841685179055601280548086019091557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180549097168117909655948652601190935293208054909116909217909155805461ffff191661320a179055506104ac565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156103b05780850481111561039457610394610361565b60018416156103a257908102905b60019390931c928002610379565b935093915050565b5f826103c657506001610454565b816103d257505f610454565b81600181146103e857600281146103f25761040e565b6001915050610454565b60ff84111561040357610403610361565b50506001821b610454565b5060208310610133831016604e8410600b8410161715610431575081810a610454565b61043d5f198484610375565b805f190482111561045057610450610361565b0290505b92915050565b5f61046860ff8416836103b8565b9392505050565b808202811582820484141761045457610454610361565b5f60208284031215610496575f5ffd5b81516001600160a01b0381168114610468575f5ffd5b613368806104b95f395ff3fe6080604052600436106103a0575f3560e01c8063817d4bff116101de578063be617fa011610108578063dbe66ca01161009d578063eaf885161161006d578063eaf8851614610a76578063f2fde38b14610a8f578063f5fb756f14610aae578063fefeef4714610ac3575f5ffd5b8063dbe66ca0146109d0578063dd62ed3e146109fe578063e0d2f9eb14610a42578063e52fb9ec14610a61575f5ffd5b8063cfd1940e116100d8578063cfd1940e14610936578063d46b6a3014610955578063d78b3c5614610983578063d8bd2dd1146109a2575f5ffd5b8063be617fa0146108e4578063c3a3c032146108f9578063c3f4f54f1461090d578063cc1776d314610921575f5ffd5b80639e8c77f01161017e578063a9059cbb1161014e578063a9059cbb14610872578063ab64cfdc14610891578063b40d09e2146108b0578063bc43d849146108c5575f5ffd5b80639e8c77f0146107ec578063a2af447a14610820578063a457c2d71461083f578063a68bdac71461085e575f5ffd5b806395a0b596116101b957806395a0b596146107a057806395d89b41146103c15780639b39b65f146107b45780639d5b8064146107cd575f5ffd5b8063817d4bff14610746578063868b0141146107655780638da5cb5b14610784575f5ffd5b806341aec357116102ca578063595b1a3e1161025f578063715018a61161022f578063715018a6146106cc57806375f0a874146106e05780637b9e987a1461071d5780638124f7ac14610731575f5ffd5b8063595b1a3e1461065b578063629ece491461066f578063634961da1461068457806370a0823114610698575f5ffd5b80634f7041a51161029a5780634f7041a5146105e0578063509222cd146105f55780635149f9841461062357806351bc3c8514610642575f5ffd5b806341aec3571461057b57806346e35f031461058f578063479881bf146105a35780634a7c01ec146105c2575f5ffd5b80631eb25d13116103405780633227925f116103105780633227925f146104ff57806333ae83251461051e578063395093511461053d5780633b1f745c1461055c575f5ffd5b80631eb25d131461048c57806323b872dd146104a05780632d48f84f146104bf578063313ce567146104de575f5ffd5b80630eff4c641161037b5780630eff4c641461042b57806318160ddd1461044e5780631d2cb02d146104625780631d4eaead14610477575f5ffd5b80630612f39d146103ab57806306fdde03146103c1578063095ea7b3146103fc575f5ffd5b366103a757005b5f5ffd5b3480156103b6575f5ffd5b506103bf610aef565b005b3480156103cc575f5ffd5b5060408051808201825260048152631d195cdd60e21b602082015290516103f39190612d6d565b60405180910390f35b348015610407575f5ffd5b5061041b610416366004612db6565b610ca3565b60405190151581526020016103f3565b348015610436575f5ffd5b5061044060155481565b6040519081526020016103f3565b348015610459575f5ffd5b50600654610440565b34801561046d575f5ffd5b50610440600c5481565b348015610482575f5ffd5b50610440600a5481565b348015610497575f5ffd5b50610440610cb9565b3480156104ab575f5ffd5b5061041b6104ba366004612de0565b610cd6565b3480156104ca575f5ffd5b506103bf6104d9366004612e1e565b610d6b565b3480156104e9575f5ffd5b5060125b60405160ff90911681526020016103f3565b34801561050a575f5ffd5b506103bf610519366004612e5d565b610ef5565b348015610529575f5ffd5b506103bf610538366004612e5d565b610f2f565b348015610548575f5ffd5b5061041b610557366004612db6565b610ff7565b348015610567575f5ffd5b506103bf610576366004612e74565b61102d565b348015610586575f5ffd5b506103bf61107b565b34801561059a575f5ffd5b5061041b6110ac565b3480156105ae575f5ffd5b506103bf6105bd366004612e5d565b6110ea565b3480156105cd575f5ffd5b506013546104ed90610100900460ff1681565b3480156105eb575f5ffd5b5061044060075481565b348015610600575f5ffd5b5061041b61060f366004612e9b565b60116020525f908152604090205460ff1681565b34801561062e575f5ffd5b506103bf61063d366004612ec3565b6111af565b34801561064d575f5ffd5b5060165461041b9060ff1681565b348015610666575f5ffd5b50601254610440565b34801561067a575f5ffd5b50610440600e5481565b34801561068f575f5ffd5b506103bf611253565b3480156106a3575f5ffd5b506104406106b2366004612e9b565b6001600160a01b03165f9081526001602052604090205490565b3480156106d7575f5ffd5b506103bf611373565b3480156106eb575f5ffd5b50601354610705906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016103f3565b348015610728575f5ffd5b506103bf6113f3565b34801561073c575f5ffd5b5061044060095481565b348015610751575f5ffd5b506103bf610760366004612e9b565b611488565b348015610770575f5ffd5b506103bf61077f366004612efa565b6114ce565b34801561078f575f5ffd5b505f546001600160a01b0316610705565b3480156107ab575f5ffd5b50610440611506565b3480156107bf575f5ffd5b5060195461041b9060ff1681565b3480156107d8575f5ffd5b506103bf6107e7366004612f15565b611566565b3480156107f7575f5ffd5b5061080b610806366004612e9b565b61174d565b604080519283529015156020830152016103f3565b34801561082b575f5ffd5b506103bf61083a366004612e9b565b6117ae565b34801561084a575f5ffd5b5061041b610859366004612db6565b611861565b348015610869575f5ffd5b506103bf6118dc565b34801561087d575f5ffd5b5061041b61088c366004612db6565b611910565b34801561089c575f5ffd5b506103bf6108ab366004612ec3565b61191c565b3480156108bb575f5ffd5b5061044060175481565b3480156108d0575f5ffd5b506103bf6108df366004612e5d565b6119fc565b3480156108ef575f5ffd5b50610440600b5481565b348015610904575f5ffd5b50610440611a34565b348015610918575f5ffd5b50610440611a57565b34801561092c575f5ffd5b5061044060085481565b348015610941575f5ffd5b506103bf610950366004612e5d565b611ab6565b348015610960575f5ffd5b5061041b61096f366004612e9b565b60056020525f908152604090205460ff1681565b34801561098e575f5ffd5b506103bf61099d366004612e74565b611aed565b3480156109ad575f5ffd5b5061041b6109bc366004612e9b565b60046020525f908152604090205460ff1681565b3480156109db575f5ffd5b5061041b6109ea366004612e9b565b60036020525f908152604090205460ff1681565b348015610a09575f5ffd5b50610440610a18366004612f86565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610a4d575f5ffd5b506103bf610a5c366004612ec3565b611b41565b348015610a6c575f5ffd5b5061044060145481565b348015610a81575f5ffd5b506013546104ed9060ff1681565b348015610a9a575f5ffd5b506103bf610aa9366004612e9b565b611c19565b348015610ab9575f5ffd5b50610440600d5481565b348015610ace575f5ffd5b50610ae2610add366004612fb2565b611d0f565b6040516103f39190613015565b610af833611eca565b610b1d5760405162461bcd60e51b8152600401610b1490613027565b60405180910390fd5b601854421015610b625760405162461bcd60e51b815260206004820152601060248201526f139bdd081e595d081d5b9b1bd8dad95960821b6044820152606401610b14565b600f546040516370a0823160e01b81523060048201526001600160a01b03909116905f9082906370a0823190602401602060405180830381865afa158015610bac573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd0919061305e565b60195490915060ff1615610c0857610beb62093a8042613089565b601855600a610bfb82600261309c565b610c0591906130b3565b90505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610c52573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c7691906130d2565b506040517f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa675905f90a15050565b5f610caf338484611efc565b5060015b92915050565b610cc56012600a6131d0565b610cd3906305f5e10061309c565b81565b5f610ce2848484611fee565b6001600160a01b0384165f90815260026020908152604080832033845290915290205482811015610d4c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610b14565b610d608533610d5b86856131de565b611efc565b506001949350505050565b610d7433611eca565b610d905760405162461bcd60e51b8152600401610b1490613027565b5f6002610da0600a6103e86130b3565b610daa91906130b3565b9050808711158015610dbc5750808611155b8015610dc85750808511155b610e095760405162461bcd60e51b81526020600482015260126024820152710a8c2f040caf0c6cacac8e640dac2f0a8c2f60731b6044820152606401610b14565b6103e882610e178587613089565b610e219190613089565b14610e785760405162461bcd60e51b815260206004820152602160248201527f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f6044820152603960f91b6064820152608401610b14565b600787905560088690556009859055600c839055600b829055600a8490556040805188815260208101889052908101869052606081018590526080810184905260a081018390527f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c99060c00160405180910390a150505050505050565b610efe33611eca565b610f1a5760405162461bcd60e51b8152600401610b1490613027565b610f2c610f274283613089565b61219b565b50565b610f3833611eca565b610f545760405162461bcd60e51b8152600401610b1490613027565b6002811115610fbb5760405162461bcd60e51b815260206004820152602d60248201527f44756d70206d6561737572652063616e277420626520756e646572203530252060448201526c1bd9881d1a19481dd85b1b195d609a1b6064820152608401610b14565b600e8190556040518181527fdfcf82c64ef2a938975f4ad1599e559af165a244802754595fcbffcf5ffdd0d9906020015b60405180910390a150565b335f8181526002602090815260408083206001600160a01b03871684529091528120549091610caf918590610d5b908690613089565b3361103f5f546001600160a01b031690565b6001600160a01b0316146110655760405162461bcd60e51b8152600401610b14906131f1565b6013805460ff191660ff92909216919091179055565b61108433611eca565b6110a05760405162461bcd60e51b8152600401610b1490613027565b6110aa60016121dd565b565b5f6103e86015546006546110c0919061309c565b6110ca91906130b3565b600f546001600160a01b03165f9081526001602052604090205411919050565b6110f333611eca565b61110f5760405162461bcd60e51b8152600401610b1490613027565b603281111561117a5760405162461bcd60e51b815260206004820152603160248201527f4d61782077616c6c6574202063616e277420626520756e646572203225206f666044820152702074686520746f74616c20737570706c7960781b6064820152608401610b14565b600d8190556040518181527fd1db3c8f76ced548252ac593ebef6129c122ab13cce5b9367eb4421cebe3885590602001610fec565b6111b833611eca565b6111d45760405162461bcd60e51b8152600401610b1490613027565b600f546001600160a01b03908116908316036112295760405162461bcd60e51b8152602060048201526014602482015273063616e2774206368616e676520756e69737761760641b6044820152606401610b14565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b336112655f546001600160a01b031690565b6001600160a01b03161461128b5760405162461bcd60e51b8152600401610b14906131f1565b6012546112ca5760405162461bcd60e51b815260206004820152600d60248201526c1b9bc81d5cd95c88199bdd5b99609a1b6044820152606401610b14565b6013546006545f916112e19160ff909116906130b3565b305f90815260016020526040902054909150811015610f2c57305f908152600160205260408120546113149083906131de565b6012549091505f9061132690836130b3565b90505f5b60125481101561136d57611365306012838154811061134b5761134b613226565b5f918252602090912001546001600160a01b031684612391565b60010161132a565b50505050565b336113855f546001600160a01b031690565b6001600160a01b0316146113ab5760405162461bcd60e51b8152600401610b14906131f1565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b6113fc33611eca565b6114185760405162461bcd60e51b8152600401610b1490613027565b6017541561145a5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e53185d5b98da1959608a1b6044820152606401610b14565b426017556040517f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc1905f90a1565b6013546201000090046001600160a01b031633146114a4575f5ffd5b601380546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6114d733611eca565b6114f35760405162461bcd60e51b8152600401610b1490613027565b6016805460ff1916911515919091179055565b6013546006545f9182916064916115229160ff9091169061309c565b61152c91906130b3565b305f9081526001602052604090205490915081101561156257305f9081526001602052604090205461155f9082906131de565b91505b5090565b336115785f546001600160a01b031690565b6001600160a01b03161461159e5760405162461bcd60e51b8152600401610b14906131f1565b60135460125461010090910460ff16906115b9908390613089565b11156115ff5760405162461bcd60e51b815260206004820152601560248201527443616e6e6f7420616464206d6f726520757365727360581b6044820152606401610b14565b5f5b818110156117485760115f84848481811061161e5761161e613226565b90506020020160208101906116339190612e9b565b6001600160a01b0316815260208101919091526040015f205460ff16156116925760405162461bcd60e51b81526020600482015260136024820152725573657220616c72656164792065786973747360681b6044820152606401610b14565b60128383838181106116a6576116a6613226565b90506020020160208101906116bb9190612e9b565b8154600180820184555f9384526020842090910180546001600160a01b0319166001600160a01b0393909316929092179091559060119085858581811061170457611704613226565b90506020020160208101906117199190612e9b565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611601565b505050565b5f80805b6012548110156117a357836001600160a01b03166012828154811061177857611778613226565b5f918252602090912001546001600160a01b03160361179b579360019350915050565b600101611751565b505f93849350915050565b336117c05f546001600160a01b031690565b6001600160a01b0316146117e65760405162461bcd60e51b8152600401610b14906131f1565b5f5f6117f18361174d565b91509150806118365760405162461bcd60e51b81526020600482015260116024820152701059191c995cdcc81b9bdd08199bdd5b99607a1b6044820152606401610b14565b61183f82612476565b50506001600160a01b03165f908152601160205260409020805460ff19169055565b335f9081526002602090815260408083206001600160a01b0386168452909152812054828110156118c35760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610b14565b6118d23385610d5b86856131de565b5060019392505050565b6118e533611eca565b6119015760405162461bcd60e51b8152600401610b1490613027565b6019805460ff19166001179055565b5f610caf338484611fee565b61192533611eca565b6119415760405162461bcd60e51b8152600401610b1490613027565b306001600160a01b038316036119995760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e74726163740000000000006044820152606401610b14565b6001600160a01b0382165f81815260046020908152604091829020805460ff19168515159081179091558251938452908301527f9a547f2adf55e10d7297ec9f54496d4044ad440b7cd8f5b5d5700778377d71d391015b60405180910390a15050565b611a0533611eca565b611a215760405162461bcd60e51b8152600401610b1490613027565b6103e8811115611a2f575f5ffd5b601555565b5f601854421015611a525742601854611a4d91906131de565b905090565b505f90565b61dead5f90815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54600654611a946012600a6131d0565b611aa2906305f5e10061309c565b611aac91906131de565b611a4d9190613089565b611abf33611eca565b611adb5760405162461bcd60e51b8152600401610b1490613027565b600f811115611ae8575f5ffd5b601455565b33611aff5f546001600160a01b031690565b6001600160a01b031614611b255760405162461bcd60e51b8152600401610b14906131f1565b6013805460ff9092166101000261ff0019909216919091179055565b611b4a33611eca565b611b665760405162461bcd60e51b8152600401610b1490613027565b306001600160a01b03831603611bbe5760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e74726163740000000000006044820152606401610b14565b6001600160a01b0382165f81815260036020908152604091829020805460ff19168515159081179091558251938452908301527fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed491016119f0565b33611c2b5f546001600160a01b031690565b6001600160a01b031614611c515760405162461bcd60e51b8152600401610b14906131f1565b6001600160a01b038116611cb65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b14565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f611d1c838561309c565b90505f80611d2a8584613089565b60125411611d3a57601254611d44565b611d448584613089565b6012549091508310611d985760405162461bcd60e51b815260206004820152601760248201527f4572726f7248616e646c65722e554e4445525f464c4f570000000000000000006044820152606401610b14565b828111611de05760405162461bcd60e51b81526020600482015260166024820152754572726f7248616e646c65722e4f5645525f464c4f5760501b6044820152606401610b14565b5f611deb84836131de565b67ffffffffffffffff811115611e0357611e0361323a565b604051908082528060200260200182016040528015611e2c578160200160208202803683370190505b509050835b82811015611ebf57601280548290611e4b906001906131de565b611e5591906131de565b81548110611e6557611e65613226565b905f5260205f20015f9054906101000a90046001600160a01b0316828581518110611e9257611e92613226565b6001600160a01b039092166020928302919091019091015283611eb48161324e565b945050600101611e31565b509695505050505050565b5f80546001600160a01b0383811691161480610cb35750506013546201000090046001600160a01b0390811691161490565b6001600160a01b038316611f465760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610b14565b6001600160a01b038216611f8e5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610b14565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120395760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610b14565b6001600160a01b0382166120825760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610b14565b6001600160a01b0383165f9081526003602052604090205460ff16806120bf57506001600160a01b0382165f9081526003602052604090205460ff165b156120cf57611748838383612391565b6001600160a01b0382165f9081526004602052604090205460ff1615612145575f6017541161213a5760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b6044820152606401610b14565b611748838383612567565b5f601754116121905760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b6044820152606401610b14565b6117488383836127bb565b60185481116121a8575f5ffd5b60188190556040518181527f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e90602001610fec565b6013805460ff60b01b1916600160b01b179055305f90815260016020526040812054600c54600b549192916122129190613089565b601454600f546001600160a01b03165f90815260016020526040812054929350916103e8916122409161309c565b61224a91906130b3565b9050815f0361225b57505050612381565b83156122765750305f90815260016020526040902054612286565b8083101561228657505050612381565b5f61228f6110ac565b6122b15782600b54836122a2919061309c565b6122ac91906130b3565b6122b3565b5f5b90505f6122c082846131de565b90505f6122ce6002846130b3565b90505f6122db8383613089565b9050476122e782612b07565b5f6122f282476131de565b9050851561231e575f83612306868461309c565b61231091906130b3565b905061231c8582612c4e565b505b6013546040515f916201000090046001600160a01b03169047908381818185875af1925050503d805f811461236e576040519150601f19603f3d011682016040523d82523d5f602084013e612373565b606091505b505050505050505050505050505b506013805460ff60b01b19169055565b6001600160a01b0383165f90815260016020526040902054818110156123c95760405162461bcd60e51b8152600401610b1490613266565b6001600160a01b0384165f90815260016020526040812080548492906123f09084906131de565b90915550506001600160a01b0383165f908152600160205260408120805484929061241c908490613089565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161246891815260200190565b60405180910390a350505050565b60125481106124bd5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606401610b14565b601280546124cd906001906131de565b815481106124dd576124dd613226565b5f91825260209091200154601280546001600160a01b03909216918390811061250857612508613226565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060128054806125445761254461329d565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b6001600160a01b0383165f908152600160205260409020548181101561259f5760405162461bcd60e51b8152600401610b1490613266565b6001600160a01b038085165f9081526005602052604080822054928616825281205460ff92831692169081156126075760175461012c906125e1908290613089565b4210156125fb576125f4816103e7612cfc565b9150612601565b60085491505b50612641565b821561263c5760175461012c9061261f908290613089565b421015612632576125f4816101ea612cfc565b5050600754612641565b506009545b600f546001600160a01b03888116911614801590612662575060165460ff16155b80156126785750601354600160b01b900460ff16155b15612686576126865f6121dd565b5f6126948683600a54612d41565b90505f6126b18784600b54600c546126ac9190613089565b612d41565b90505f6126be8284613089565b6126c890896131de565b6001600160a01b038b165f90815260016020526040812080549293508a929091906126f49084906131de565b9091555050305f9081526001602052604081208054849290612717908490613089565b925050819055508260065f82825461272f91906131de565b90915550506001600160a01b0389165f908152600160205260408120805483929061275b908490613089565b92505081905550886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127a791815260200190565b60405180910390a350505050505050505050565b6001600160a01b038084165f90815260016020526040808220549285168252902054828210156127fd5760405162461bcd60e51b8152600401610b1490613266565b82600e548361280c91906130b3565b101561285a5760405162461bcd60e51b815260206004820152601f60248201527f5472616e73666572206578636565647320617574686f726973652073656c6c006044820152606401610b14565b600d546128696012600a6131d0565b612877906305f5e10061309c565b61288191906130b3565b61288b8483613089565b11156128f15760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636f6e7461696e206d6f7265207468616e206365727461696e60448201526e202520546f74616c20537570706c7960881b6064820152608401610b14565b6001600160a01b038086165f9081526005602052604080822054928716825281205460ff92831692169081156129585760175461753090612933908290613089565b42101561294c576129458160c8612cfc565b9150612952565b60085491505b50612991565b821561298c5760175461753090612970908290613089565b421015612982576129458160c8612cfc565b5050600754612991565b506009545b600f546001600160a01b038981169116148015906129b2575060165460ff16155b80156129c85750601354600160b01b900460ff16155b156129d6576129d65f6121dd565b5f6129e48783600a54612d41565b90505f6129fc8884600b54600c546126ac9190613089565b90505f612a098284613089565b612a13908a6131de565b6001600160a01b038c165f90815260016020526040812080549293508b92909190612a3f9084906131de565b9091555050305f9081526001602052604081208054849290612a62908490613089565b925050819055508260065f828254612a7a91906131de565b90915550506001600160a01b038a165f9081526001602052604081208054839290612aa6908490613089565b92505081905550896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612af291815260200190565b60405180910390a35050505050505050505050565b601054612b1f9030906001600160a01b031683611efc565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612b5257612b52613226565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ba9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bcd91906132b1565b81600181518110612be057612be0613226565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b815291169063791ac94790612c259085905f908690309042906004016132cc565b5f604051808303815f87803b158015612c3c575f5ffd5b505af192505050801561174857505050565b601054612c669030906001600160a01b031684611efc565b60105460405163f305d71960e01b81523060048201819052602482018590525f60448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612cd0573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612cf59190613307565b5050505050565b5f5f60175442612d0c91906131de565b90508381612d1b6032866131de565b612d25919061309c565b612d2f91906130b3565b612d3990846131de565b949350505050565b5f612d4e6103e88061309c565b82612d59858761309c565b612d63919061309c565b612d3991906130b3565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610f2c575f5ffd5b5f5f60408385031215612dc7575f5ffd5b8235612dd281612da2565b946020939093013593505050565b5f5f5f60608486031215612df2575f5ffd5b8335612dfd81612da2565b92506020840135612e0d81612da2565b929592945050506040919091013590565b5f5f5f5f5f5f60c08789031215612e33575f5ffd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f60208284031215612e6d575f5ffd5b5035919050565b5f60208284031215612e84575f5ffd5b813560ff81168114612e94575f5ffd5b9392505050565b5f60208284031215612eab575f5ffd5b8135612e9481612da2565b8015158114610f2c575f5ffd5b5f5f60408385031215612ed4575f5ffd5b8235612edf81612da2565b91506020830135612eef81612eb6565b809150509250929050565b5f60208284031215612f0a575f5ffd5b8135612e9481612eb6565b5f5f60208385031215612f26575f5ffd5b823567ffffffffffffffff811115612f3c575f5ffd5b8301601f81018513612f4c575f5ffd5b803567ffffffffffffffff811115612f62575f5ffd5b8560208260051b8401011115612f76575f5ffd5b6020919091019590945092505050565b5f5f60408385031215612f97575f5ffd5b8235612fa281612da2565b91506020830135612eef81612da2565b5f5f60408385031215612fc3575f5ffd5b50508035926020909101359150565b5f8151808452602084019350602083015f5b8281101561300b5781516001600160a01b0316865260209586019590910190600101612fe4565b5093949350505050565b602081525f612e946020830184612fd2565b60208082526018908201527f43616c6c6572206e6f74205465616d206f72204f776e65720000000000000000604082015260600190565b5f6020828403121561306e575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610cb357610cb3613075565b8082028115828204841417610cb357610cb3613075565b5f826130cd57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156130e2575f5ffd5b8151612e9481612eb6565b6001815b60018411156131285780850481111561310c5761310c613075565b600184161561311a57908102905b60019390931c9280026130f1565b935093915050565b5f8261313e57506001610cb3565b8161314a57505f610cb3565b8160018114613160576002811461316a57613186565b6001915050610cb3565b60ff84111561317b5761317b613075565b50506001821b610cb3565b5060208310610133831016604e8410600b84101617156131a9575081810a610cb3565b6131b55f1984846130ed565b805f19048211156131c8576131c8613075565b029392505050565b5f612e9460ff841683613130565b81810381811115610cb357610cb3613075565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f6001820161325f5761325f613075565b5060010190565b60208082526018908201527f5472616e7366657220657863656564732062616c616e63650000000000000000604082015260600190565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156132c1575f5ffd5b8151612e9481612da2565b85815284602082015260a060408201525f6132ea60a0830186612fd2565b6001600160a01b0394909416606083015250608001529392505050565b5f5f5f60608486031215613319575f5ffd5b505081516020830151604090930151909492935091905056fea264697066735822122064ee1de5f6a6e661b0ddb4ce3cbd250e5acf2de74fcb4c979296ad4fc464d9bf64736f6c634300081c0033
Deployed Bytecode
0x6080604052600436106103a0575f3560e01c8063817d4bff116101de578063be617fa011610108578063dbe66ca01161009d578063eaf885161161006d578063eaf8851614610a76578063f2fde38b14610a8f578063f5fb756f14610aae578063fefeef4714610ac3575f5ffd5b8063dbe66ca0146109d0578063dd62ed3e146109fe578063e0d2f9eb14610a42578063e52fb9ec14610a61575f5ffd5b8063cfd1940e116100d8578063cfd1940e14610936578063d46b6a3014610955578063d78b3c5614610983578063d8bd2dd1146109a2575f5ffd5b8063be617fa0146108e4578063c3a3c032146108f9578063c3f4f54f1461090d578063cc1776d314610921575f5ffd5b80639e8c77f01161017e578063a9059cbb1161014e578063a9059cbb14610872578063ab64cfdc14610891578063b40d09e2146108b0578063bc43d849146108c5575f5ffd5b80639e8c77f0146107ec578063a2af447a14610820578063a457c2d71461083f578063a68bdac71461085e575f5ffd5b806395a0b596116101b957806395a0b596146107a057806395d89b41146103c15780639b39b65f146107b45780639d5b8064146107cd575f5ffd5b8063817d4bff14610746578063868b0141146107655780638da5cb5b14610784575f5ffd5b806341aec357116102ca578063595b1a3e1161025f578063715018a61161022f578063715018a6146106cc57806375f0a874146106e05780637b9e987a1461071d5780638124f7ac14610731575f5ffd5b8063595b1a3e1461065b578063629ece491461066f578063634961da1461068457806370a0823114610698575f5ffd5b80634f7041a51161029a5780634f7041a5146105e0578063509222cd146105f55780635149f9841461062357806351bc3c8514610642575f5ffd5b806341aec3571461057b57806346e35f031461058f578063479881bf146105a35780634a7c01ec146105c2575f5ffd5b80631eb25d13116103405780633227925f116103105780633227925f146104ff57806333ae83251461051e578063395093511461053d5780633b1f745c1461055c575f5ffd5b80631eb25d131461048c57806323b872dd146104a05780632d48f84f146104bf578063313ce567146104de575f5ffd5b80630eff4c641161037b5780630eff4c641461042b57806318160ddd1461044e5780631d2cb02d146104625780631d4eaead14610477575f5ffd5b80630612f39d146103ab57806306fdde03146103c1578063095ea7b3146103fc575f5ffd5b366103a757005b5f5ffd5b3480156103b6575f5ffd5b506103bf610aef565b005b3480156103cc575f5ffd5b5060408051808201825260048152631d195cdd60e21b602082015290516103f39190612d6d565b60405180910390f35b348015610407575f5ffd5b5061041b610416366004612db6565b610ca3565b60405190151581526020016103f3565b348015610436575f5ffd5b5061044060155481565b6040519081526020016103f3565b348015610459575f5ffd5b50600654610440565b34801561046d575f5ffd5b50610440600c5481565b348015610482575f5ffd5b50610440600a5481565b348015610497575f5ffd5b50610440610cb9565b3480156104ab575f5ffd5b5061041b6104ba366004612de0565b610cd6565b3480156104ca575f5ffd5b506103bf6104d9366004612e1e565b610d6b565b3480156104e9575f5ffd5b5060125b60405160ff90911681526020016103f3565b34801561050a575f5ffd5b506103bf610519366004612e5d565b610ef5565b348015610529575f5ffd5b506103bf610538366004612e5d565b610f2f565b348015610548575f5ffd5b5061041b610557366004612db6565b610ff7565b348015610567575f5ffd5b506103bf610576366004612e74565b61102d565b348015610586575f5ffd5b506103bf61107b565b34801561059a575f5ffd5b5061041b6110ac565b3480156105ae575f5ffd5b506103bf6105bd366004612e5d565b6110ea565b3480156105cd575f5ffd5b506013546104ed90610100900460ff1681565b3480156105eb575f5ffd5b5061044060075481565b348015610600575f5ffd5b5061041b61060f366004612e9b565b60116020525f908152604090205460ff1681565b34801561062e575f5ffd5b506103bf61063d366004612ec3565b6111af565b34801561064d575f5ffd5b5060165461041b9060ff1681565b348015610666575f5ffd5b50601254610440565b34801561067a575f5ffd5b50610440600e5481565b34801561068f575f5ffd5b506103bf611253565b3480156106a3575f5ffd5b506104406106b2366004612e9b565b6001600160a01b03165f9081526001602052604090205490565b3480156106d7575f5ffd5b506103bf611373565b3480156106eb575f5ffd5b50601354610705906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016103f3565b348015610728575f5ffd5b506103bf6113f3565b34801561073c575f5ffd5b5061044060095481565b348015610751575f5ffd5b506103bf610760366004612e9b565b611488565b348015610770575f5ffd5b506103bf61077f366004612efa565b6114ce565b34801561078f575f5ffd5b505f546001600160a01b0316610705565b3480156107ab575f5ffd5b50610440611506565b3480156107bf575f5ffd5b5060195461041b9060ff1681565b3480156107d8575f5ffd5b506103bf6107e7366004612f15565b611566565b3480156107f7575f5ffd5b5061080b610806366004612e9b565b61174d565b604080519283529015156020830152016103f3565b34801561082b575f5ffd5b506103bf61083a366004612e9b565b6117ae565b34801561084a575f5ffd5b5061041b610859366004612db6565b611861565b348015610869575f5ffd5b506103bf6118dc565b34801561087d575f5ffd5b5061041b61088c366004612db6565b611910565b34801561089c575f5ffd5b506103bf6108ab366004612ec3565b61191c565b3480156108bb575f5ffd5b5061044060175481565b3480156108d0575f5ffd5b506103bf6108df366004612e5d565b6119fc565b3480156108ef575f5ffd5b50610440600b5481565b348015610904575f5ffd5b50610440611a34565b348015610918575f5ffd5b50610440611a57565b34801561092c575f5ffd5b5061044060085481565b348015610941575f5ffd5b506103bf610950366004612e5d565b611ab6565b348015610960575f5ffd5b5061041b61096f366004612e9b565b60056020525f908152604090205460ff1681565b34801561098e575f5ffd5b506103bf61099d366004612e74565b611aed565b3480156109ad575f5ffd5b5061041b6109bc366004612e9b565b60046020525f908152604090205460ff1681565b3480156109db575f5ffd5b5061041b6109ea366004612e9b565b60036020525f908152604090205460ff1681565b348015610a09575f5ffd5b50610440610a18366004612f86565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610a4d575f5ffd5b506103bf610a5c366004612ec3565b611b41565b348015610a6c575f5ffd5b5061044060145481565b348015610a81575f5ffd5b506013546104ed9060ff1681565b348015610a9a575f5ffd5b506103bf610aa9366004612e9b565b611c19565b348015610ab9575f5ffd5b50610440600d5481565b348015610ace575f5ffd5b50610ae2610add366004612fb2565b611d0f565b6040516103f39190613015565b610af833611eca565b610b1d5760405162461bcd60e51b8152600401610b1490613027565b60405180910390fd5b601854421015610b625760405162461bcd60e51b815260206004820152601060248201526f139bdd081e595d081d5b9b1bd8dad95960821b6044820152606401610b14565b600f546040516370a0823160e01b81523060048201526001600160a01b03909116905f9082906370a0823190602401602060405180830381865afa158015610bac573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd0919061305e565b60195490915060ff1615610c0857610beb62093a8042613089565b601855600a610bfb82600261309c565b610c0591906130b3565b90505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610c52573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c7691906130d2565b506040517f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa675905f90a15050565b5f610caf338484611efc565b5060015b92915050565b610cc56012600a6131d0565b610cd3906305f5e10061309c565b81565b5f610ce2848484611fee565b6001600160a01b0384165f90815260026020908152604080832033845290915290205482811015610d4c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610b14565b610d608533610d5b86856131de565b611efc565b506001949350505050565b610d7433611eca565b610d905760405162461bcd60e51b8152600401610b1490613027565b5f6002610da0600a6103e86130b3565b610daa91906130b3565b9050808711158015610dbc5750808611155b8015610dc85750808511155b610e095760405162461bcd60e51b81526020600482015260126024820152710a8c2f040caf0c6cacac8e640dac2f0a8c2f60731b6044820152606401610b14565b6103e882610e178587613089565b610e219190613089565b14610e785760405162461bcd60e51b815260206004820152602160248201527f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f6044820152603960f91b6064820152608401610b14565b600787905560088690556009859055600c839055600b829055600a8490556040805188815260208101889052908101869052606081018590526080810184905260a081018390527f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c99060c00160405180910390a150505050505050565b610efe33611eca565b610f1a5760405162461bcd60e51b8152600401610b1490613027565b610f2c610f274283613089565b61219b565b50565b610f3833611eca565b610f545760405162461bcd60e51b8152600401610b1490613027565b6002811115610fbb5760405162461bcd60e51b815260206004820152602d60248201527f44756d70206d6561737572652063616e277420626520756e646572203530252060448201526c1bd9881d1a19481dd85b1b195d609a1b6064820152608401610b14565b600e8190556040518181527fdfcf82c64ef2a938975f4ad1599e559af165a244802754595fcbffcf5ffdd0d9906020015b60405180910390a150565b335f8181526002602090815260408083206001600160a01b03871684529091528120549091610caf918590610d5b908690613089565b3361103f5f546001600160a01b031690565b6001600160a01b0316146110655760405162461bcd60e51b8152600401610b14906131f1565b6013805460ff191660ff92909216919091179055565b61108433611eca565b6110a05760405162461bcd60e51b8152600401610b1490613027565b6110aa60016121dd565b565b5f6103e86015546006546110c0919061309c565b6110ca91906130b3565b600f546001600160a01b03165f9081526001602052604090205411919050565b6110f333611eca565b61110f5760405162461bcd60e51b8152600401610b1490613027565b603281111561117a5760405162461bcd60e51b815260206004820152603160248201527f4d61782077616c6c6574202063616e277420626520756e646572203225206f666044820152702074686520746f74616c20737570706c7960781b6064820152608401610b14565b600d8190556040518181527fd1db3c8f76ced548252ac593ebef6129c122ab13cce5b9367eb4421cebe3885590602001610fec565b6111b833611eca565b6111d45760405162461bcd60e51b8152600401610b1490613027565b600f546001600160a01b03908116908316036112295760405162461bcd60e51b8152602060048201526014602482015273063616e2774206368616e676520756e69737761760641b6044820152606401610b14565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b336112655f546001600160a01b031690565b6001600160a01b03161461128b5760405162461bcd60e51b8152600401610b14906131f1565b6012546112ca5760405162461bcd60e51b815260206004820152600d60248201526c1b9bc81d5cd95c88199bdd5b99609a1b6044820152606401610b14565b6013546006545f916112e19160ff909116906130b3565b305f90815260016020526040902054909150811015610f2c57305f908152600160205260408120546113149083906131de565b6012549091505f9061132690836130b3565b90505f5b60125481101561136d57611365306012838154811061134b5761134b613226565b5f918252602090912001546001600160a01b031684612391565b60010161132a565b50505050565b336113855f546001600160a01b031690565b6001600160a01b0316146113ab5760405162461bcd60e51b8152600401610b14906131f1565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b6113fc33611eca565b6114185760405162461bcd60e51b8152600401610b1490613027565b6017541561145a5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e53185d5b98da1959608a1b6044820152606401610b14565b426017556040517f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc1905f90a1565b6013546201000090046001600160a01b031633146114a4575f5ffd5b601380546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6114d733611eca565b6114f35760405162461bcd60e51b8152600401610b1490613027565b6016805460ff1916911515919091179055565b6013546006545f9182916064916115229160ff9091169061309c565b61152c91906130b3565b305f9081526001602052604090205490915081101561156257305f9081526001602052604090205461155f9082906131de565b91505b5090565b336115785f546001600160a01b031690565b6001600160a01b03161461159e5760405162461bcd60e51b8152600401610b14906131f1565b60135460125461010090910460ff16906115b9908390613089565b11156115ff5760405162461bcd60e51b815260206004820152601560248201527443616e6e6f7420616464206d6f726520757365727360581b6044820152606401610b14565b5f5b818110156117485760115f84848481811061161e5761161e613226565b90506020020160208101906116339190612e9b565b6001600160a01b0316815260208101919091526040015f205460ff16156116925760405162461bcd60e51b81526020600482015260136024820152725573657220616c72656164792065786973747360681b6044820152606401610b14565b60128383838181106116a6576116a6613226565b90506020020160208101906116bb9190612e9b565b8154600180820184555f9384526020842090910180546001600160a01b0319166001600160a01b0393909316929092179091559060119085858581811061170457611704613226565b90506020020160208101906117199190612e9b565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611601565b505050565b5f80805b6012548110156117a357836001600160a01b03166012828154811061177857611778613226565b5f918252602090912001546001600160a01b03160361179b579360019350915050565b600101611751565b505f93849350915050565b336117c05f546001600160a01b031690565b6001600160a01b0316146117e65760405162461bcd60e51b8152600401610b14906131f1565b5f5f6117f18361174d565b91509150806118365760405162461bcd60e51b81526020600482015260116024820152701059191c995cdcc81b9bdd08199bdd5b99607a1b6044820152606401610b14565b61183f82612476565b50506001600160a01b03165f908152601160205260409020805460ff19169055565b335f9081526002602090815260408083206001600160a01b0386168452909152812054828110156118c35760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610b14565b6118d23385610d5b86856131de565b5060019392505050565b6118e533611eca565b6119015760405162461bcd60e51b8152600401610b1490613027565b6019805460ff19166001179055565b5f610caf338484611fee565b61192533611eca565b6119415760405162461bcd60e51b8152600401610b1490613027565b306001600160a01b038316036119995760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e74726163740000000000006044820152606401610b14565b6001600160a01b0382165f81815260046020908152604091829020805460ff19168515159081179091558251938452908301527f9a547f2adf55e10d7297ec9f54496d4044ad440b7cd8f5b5d5700778377d71d391015b60405180910390a15050565b611a0533611eca565b611a215760405162461bcd60e51b8152600401610b1490613027565b6103e8811115611a2f575f5ffd5b601555565b5f601854421015611a525742601854611a4d91906131de565b905090565b505f90565b61dead5f90815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54600654611a946012600a6131d0565b611aa2906305f5e10061309c565b611aac91906131de565b611a4d9190613089565b611abf33611eca565b611adb5760405162461bcd60e51b8152600401610b1490613027565b600f811115611ae8575f5ffd5b601455565b33611aff5f546001600160a01b031690565b6001600160a01b031614611b255760405162461bcd60e51b8152600401610b14906131f1565b6013805460ff9092166101000261ff0019909216919091179055565b611b4a33611eca565b611b665760405162461bcd60e51b8152600401610b1490613027565b306001600160a01b03831603611bbe5760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e74726163740000000000006044820152606401610b14565b6001600160a01b0382165f81815260036020908152604091829020805460ff19168515159081179091558251938452908301527fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed491016119f0565b33611c2b5f546001600160a01b031690565b6001600160a01b031614611c515760405162461bcd60e51b8152600401610b14906131f1565b6001600160a01b038116611cb65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b14565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f611d1c838561309c565b90505f80611d2a8584613089565b60125411611d3a57601254611d44565b611d448584613089565b6012549091508310611d985760405162461bcd60e51b815260206004820152601760248201527f4572726f7248616e646c65722e554e4445525f464c4f570000000000000000006044820152606401610b14565b828111611de05760405162461bcd60e51b81526020600482015260166024820152754572726f7248616e646c65722e4f5645525f464c4f5760501b6044820152606401610b14565b5f611deb84836131de565b67ffffffffffffffff811115611e0357611e0361323a565b604051908082528060200260200182016040528015611e2c578160200160208202803683370190505b509050835b82811015611ebf57601280548290611e4b906001906131de565b611e5591906131de565b81548110611e6557611e65613226565b905f5260205f20015f9054906101000a90046001600160a01b0316828581518110611e9257611e92613226565b6001600160a01b039092166020928302919091019091015283611eb48161324e565b945050600101611e31565b509695505050505050565b5f80546001600160a01b0383811691161480610cb35750506013546201000090046001600160a01b0390811691161490565b6001600160a01b038316611f465760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610b14565b6001600160a01b038216611f8e5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610b14565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120395760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610b14565b6001600160a01b0382166120825760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610b14565b6001600160a01b0383165f9081526003602052604090205460ff16806120bf57506001600160a01b0382165f9081526003602052604090205460ff165b156120cf57611748838383612391565b6001600160a01b0382165f9081526004602052604090205460ff1615612145575f6017541161213a5760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b6044820152606401610b14565b611748838383612567565b5f601754116121905760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b6044820152606401610b14565b6117488383836127bb565b60185481116121a8575f5ffd5b60188190556040518181527f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e90602001610fec565b6013805460ff60b01b1916600160b01b179055305f90815260016020526040812054600c54600b549192916122129190613089565b601454600f546001600160a01b03165f90815260016020526040812054929350916103e8916122409161309c565b61224a91906130b3565b9050815f0361225b57505050612381565b83156122765750305f90815260016020526040902054612286565b8083101561228657505050612381565b5f61228f6110ac565b6122b15782600b54836122a2919061309c565b6122ac91906130b3565b6122b3565b5f5b90505f6122c082846131de565b90505f6122ce6002846130b3565b90505f6122db8383613089565b9050476122e782612b07565b5f6122f282476131de565b9050851561231e575f83612306868461309c565b61231091906130b3565b905061231c8582612c4e565b505b6013546040515f916201000090046001600160a01b03169047908381818185875af1925050503d805f811461236e576040519150601f19603f3d011682016040523d82523d5f602084013e612373565b606091505b505050505050505050505050505b506013805460ff60b01b19169055565b6001600160a01b0383165f90815260016020526040902054818110156123c95760405162461bcd60e51b8152600401610b1490613266565b6001600160a01b0384165f90815260016020526040812080548492906123f09084906131de565b90915550506001600160a01b0383165f908152600160205260408120805484929061241c908490613089565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161246891815260200190565b60405180910390a350505050565b60125481106124bd5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606401610b14565b601280546124cd906001906131de565b815481106124dd576124dd613226565b5f91825260209091200154601280546001600160a01b03909216918390811061250857612508613226565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060128054806125445761254461329d565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b6001600160a01b0383165f908152600160205260409020548181101561259f5760405162461bcd60e51b8152600401610b1490613266565b6001600160a01b038085165f9081526005602052604080822054928616825281205460ff92831692169081156126075760175461012c906125e1908290613089565b4210156125fb576125f4816103e7612cfc565b9150612601565b60085491505b50612641565b821561263c5760175461012c9061261f908290613089565b421015612632576125f4816101ea612cfc565b5050600754612641565b506009545b600f546001600160a01b03888116911614801590612662575060165460ff16155b80156126785750601354600160b01b900460ff16155b15612686576126865f6121dd565b5f6126948683600a54612d41565b90505f6126b18784600b54600c546126ac9190613089565b612d41565b90505f6126be8284613089565b6126c890896131de565b6001600160a01b038b165f90815260016020526040812080549293508a929091906126f49084906131de565b9091555050305f9081526001602052604081208054849290612717908490613089565b925050819055508260065f82825461272f91906131de565b90915550506001600160a01b0389165f908152600160205260408120805483929061275b908490613089565b92505081905550886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127a791815260200190565b60405180910390a350505050505050505050565b6001600160a01b038084165f90815260016020526040808220549285168252902054828210156127fd5760405162461bcd60e51b8152600401610b1490613266565b82600e548361280c91906130b3565b101561285a5760405162461bcd60e51b815260206004820152601f60248201527f5472616e73666572206578636565647320617574686f726973652073656c6c006044820152606401610b14565b600d546128696012600a6131d0565b612877906305f5e10061309c565b61288191906130b3565b61288b8483613089565b11156128f15760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636f6e7461696e206d6f7265207468616e206365727461696e60448201526e202520546f74616c20537570706c7960881b6064820152608401610b14565b6001600160a01b038086165f9081526005602052604080822054928716825281205460ff92831692169081156129585760175461753090612933908290613089565b42101561294c576129458160c8612cfc565b9150612952565b60085491505b50612991565b821561298c5760175461753090612970908290613089565b421015612982576129458160c8612cfc565b5050600754612991565b506009545b600f546001600160a01b038981169116148015906129b2575060165460ff16155b80156129c85750601354600160b01b900460ff16155b156129d6576129d65f6121dd565b5f6129e48783600a54612d41565b90505f6129fc8884600b54600c546126ac9190613089565b90505f612a098284613089565b612a13908a6131de565b6001600160a01b038c165f90815260016020526040812080549293508b92909190612a3f9084906131de565b9091555050305f9081526001602052604081208054849290612a62908490613089565b925050819055508260065f828254612a7a91906131de565b90915550506001600160a01b038a165f9081526001602052604081208054839290612aa6908490613089565b92505081905550896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612af291815260200190565b60405180910390a35050505050505050505050565b601054612b1f9030906001600160a01b031683611efc565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612b5257612b52613226565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ba9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bcd91906132b1565b81600181518110612be057612be0613226565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b815291169063791ac94790612c259085905f908690309042906004016132cc565b5f604051808303815f87803b158015612c3c575f5ffd5b505af192505050801561174857505050565b601054612c669030906001600160a01b031684611efc565b60105460405163f305d71960e01b81523060048201819052602482018590525f60448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612cd0573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612cf59190613307565b5050505050565b5f5f60175442612d0c91906131de565b90508381612d1b6032866131de565b612d25919061309c565b612d2f91906130b3565b612d3990846131de565b949350505050565b5f612d4e6103e88061309c565b82612d59858761309c565b612d63919061309c565b612d3991906130b3565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610f2c575f5ffd5b5f5f60408385031215612dc7575f5ffd5b8235612dd281612da2565b946020939093013593505050565b5f5f5f60608486031215612df2575f5ffd5b8335612dfd81612da2565b92506020840135612e0d81612da2565b929592945050506040919091013590565b5f5f5f5f5f5f60c08789031215612e33575f5ffd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f60208284031215612e6d575f5ffd5b5035919050565b5f60208284031215612e84575f5ffd5b813560ff81168114612e94575f5ffd5b9392505050565b5f60208284031215612eab575f5ffd5b8135612e9481612da2565b8015158114610f2c575f5ffd5b5f5f60408385031215612ed4575f5ffd5b8235612edf81612da2565b91506020830135612eef81612eb6565b809150509250929050565b5f60208284031215612f0a575f5ffd5b8135612e9481612eb6565b5f5f60208385031215612f26575f5ffd5b823567ffffffffffffffff811115612f3c575f5ffd5b8301601f81018513612f4c575f5ffd5b803567ffffffffffffffff811115612f62575f5ffd5b8560208260051b8401011115612f76575f5ffd5b6020919091019590945092505050565b5f5f60408385031215612f97575f5ffd5b8235612fa281612da2565b91506020830135612eef81612da2565b5f5f60408385031215612fc3575f5ffd5b50508035926020909101359150565b5f8151808452602084019350602083015f5b8281101561300b5781516001600160a01b0316865260209586019590910190600101612fe4565b5093949350505050565b602081525f612e946020830184612fd2565b60208082526018908201527f43616c6c6572206e6f74205465616d206f72204f776e65720000000000000000604082015260600190565b5f6020828403121561306e575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610cb357610cb3613075565b8082028115828204841417610cb357610cb3613075565b5f826130cd57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156130e2575f5ffd5b8151612e9481612eb6565b6001815b60018411156131285780850481111561310c5761310c613075565b600184161561311a57908102905b60019390931c9280026130f1565b935093915050565b5f8261313e57506001610cb3565b8161314a57505f610cb3565b8160018114613160576002811461316a57613186565b6001915050610cb3565b60ff84111561317b5761317b613075565b50506001821b610cb3565b5060208310610133831016604e8410600b84101617156131a9575081810a610cb3565b6131b55f1984846130ed565b805f19048211156131c8576131c8613075565b029392505050565b5f612e9460ff841683613130565b81810381811115610cb357610cb3613075565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f6001820161325f5761325f613075565b5060010190565b60208082526018908201527f5472616e7366657220657863656564732062616c616e63650000000000000000604082015260600190565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156132c1575f5ffd5b8151612e9481612da2565b85815284602082015260a060408201525f6132ea60a0830186612fd2565b6001600160a01b0394909416606083015250608001529392505050565b5f5f5f60608486031215613319575f5ffd5b505081516020830151604090930151909492935091905056fea264697066735822122064ee1de5f6a6e661b0ddb4ce3cbd250e5acf2de74fcb4c979296ad4fc464d9bf64736f6c634300081c0033
Deployed Bytecode Sourcemap
3457:26852:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26940:679;;;;;;;;;;;;;:::i;:::-;;27996:94;;;;;;;;;;-1:-1:-1;28077:5:0;;;;;;;;;;;-1:-1:-1;;;28077:5:0;;;;27996:94;;;;28077:5;27996:94;:::i;:::-;;;;;;;;28869:158;;;;;;;;;;-1:-1:-1;28869:158:0;;;;;:::i;:::-;;:::i;:::-;;;1110:14:1;;1103:22;1085:41;;1073:2;1058:18;28869:158:0;945:187:1;18033:33:0;;;;;;;;;;;;;;;;;;;1283:25:1;;;1271:2;1256:18;18033:33:0;1137:177:1;28306:105:0;;;;;;;;;;-1:-1:-1;28385:18:0;;28306:105;;4699:29;;;;;;;;;;;;;;;;4638:21;;;;;;;;;;;;;;;;3948:59;;;;;;;;;;;;;:::i;29337:386::-;;;;;;;;;;-1:-1:-1;29337:386:0;;;;;:::i;:::-;;:::i;18556:612::-;;;;;;;;;;-1:-1:-1;18556:612:0;;;;;:::i;:::-;;:::i;28204:94::-;;;;;;;;;;-1:-1:-1;3939:2:0;28204:94;;;2838:4:1;2826:17;;;2808:36;;2796:2;2781:18;28204:94:0;2666:184:1;26366:149:0;;;;;;;;;;-1:-1:-1;26366:149:0;;;;;:::i;:::-;;:::i;19471:215::-;;;;;;;;;;-1:-1:-1;19471:215:0;;;;;:::i;:::-;;:::i;29758:202::-;;;;;;;;;;-1:-1:-1;29758:202:0;;;;;:::i;:::-;;:::i;10552:120::-;;;;;;;;;;-1:-1:-1;10552:120:0;;;;;:::i;:::-;;:::i;24394:83::-;;;;;;;;;;;;;:::i;19803:152::-;;;;;;;;;;;;;:::i;19217:207::-;;;;;;;;;;-1:-1:-1;19217:207:0;;;;;:::i;:::-;;:::i;5232:22::-;;;;;;;;;;-1:-1:-1;5232:22:0;;;;;;;;;;;4542:23;;;;;;;;;;;;;;;;4975:45;;;;;;;;;;-1:-1:-1;4975:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23965:154;;;;;;;;;;-1:-1:-1;23965:154:0;;;;;:::i;:::-;;:::i;24131:22::-;;;;;;;;;;-1:-1:-1;24131:22:0;;;;;;;;8184:113;;;;;;;;;;-1:-1:-1;8269:13:0;:20;8184:113;;4847:25;;;;;;;;;;;;;;;;9921:623;;;;;;;;;;;;;:::i;28419:118::-;;;;;;;;;;-1:-1:-1;28419:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;28511:18:0;28487:4;28511:18;;;:9;:18;;;;;;;28419:118;2890:140;;;;;;;;;;;;;:::i;5296:30::-;;;;;;;;;;-1:-1:-1;5296:30:0;;;;;;;-1:-1:-1;;;;;5296:30:0;;;;;;-1:-1:-1;;;;;4286:32:1;;;4268:51;;4256:2;4241:18;5296:30:0;4122:203:1;25394:184:0;;;;;;;;;;;;;:::i;4603:28::-;;;;;;;;;;;;;;;;5388:147;;;;;;;;;;-1:-1:-1;5388:147:0;;;;;:::i;:::-;;:::i;24236:90::-;;;;;;;;;;-1:-1:-1;24236:90:0;;;;;:::i;:::-;;:::i;2249:79::-;;;;;;;;;;-1:-1:-1;2287:7:0;2314:6;-1:-1:-1;;;;;2314:6:0;2249:79;;10680:293;;;;;;;;;;;;;:::i;25990:39::-;;;;;;;;;;-1:-1:-1;25990:39:0;;;;;;;;7392:426;;;;;;;;;;-1:-1:-1;7392:426:0;;;;;:::i;:::-;;:::i;9479:317::-;;;;;;;;;;-1:-1:-1;9479:317:0;;;;;:::i;:::-;;:::i;:::-;;;;5359:25:1;;;5427:14;;5420:22;5415:2;5400:18;;5393:50;5332:18;9479:317:0;5191:258:1;7901:275:0;;;;;;;;;;-1:-1:-1;7901:275:0;;;;;:::i;:::-;;:::i;29968:336::-;;;;;;;;;;-1:-1:-1;29968:336:0;;;;;:::i;:::-;;:::i;26192:110::-;;;;;;;;;;;;;:::i;28545:164::-;;;;;;;;;;-1:-1:-1;28545:164:0;;;;;:::i;:::-;;:::i;25000:249::-;;;;;;;;;;-1:-1:-1;25000:249:0;;;;;:::i;:::-;;:::i;25360:27::-;;;;;;;;;;;;;;;;18073:211;;;;;;;;;;-1:-1:-1;18073:211:0;;;;;:::i;:::-;;:::i;4666:26::-;;;;;;;;;;;;;;;;23229:205;;;;;;;;;;;;;:::i;23440:139::-;;;;;;;;;;;;;:::i;4572:24::-;;;;;;;;;;;;;;;;17767:191;;;;;;;;;;-1:-1:-1;17767:191:0;;;;;:::i;:::-;;:::i;3752:35::-;;;;;;;;;;-1:-1:-1;3752:35:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9810:101;;;;;;;;;;-1:-1:-1;9810:101:0;;;;;:::i;:::-;;:::i;3696:49::-;;;;;;;;;;-1:-1:-1;3696:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3641:48;;;;;;;;;;-1:-1:-1;3641:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28717:144;;;;;;;;;;-1:-1:-1;28717:144:0;;;;;:::i;:::-;-1:-1:-1;;;;;28825:19:0;;;28801:4;28825:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;28717:144;24592:248;;;;;;;;;;-1:-1:-1;24592:248:0;;;;;:::i;:::-;;:::i;17734:26::-;;;;;;;;;;;;;;;;5156:31;;;;;;;;;;-1:-1:-1;5156:31:0;;;;;;;;3185:236;;;;;;;;;;-1:-1:-1;3185:236:0;;;;;:::i;:::-;;:::i;4817:23::-;;;;;;;;;;;;;;;;8305:732;;;;;;;;;;-1:-1:-1;8305:732:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26940:679::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;;;;;;;;;27080:20:::1;;27061:15;:39;;27053:68;;;::::0;-1:-1:-1;;;27053:68:0;;7470:2:1;27053:68:0::1;::::0;::::1;7452:21:1::0;7509:2;7489:18;;;7482:30;-1:-1:-1;;;7528:18:1;;;7521:46;7584:18;;27053:68:0::1;7268:340:1::0;27053:68:0::1;27165:19;::::0;27210:39:::1;::::0;-1:-1:-1;;;27210:39:0;;27243:4:::1;27210:39;::::0;::::1;4268:51:1::0;-1:-1:-1;;;;;27165:19:0;;::::1;::::0;27134:21:::1;::::0;27165:19;;27210:24:::1;::::0;4241:18:1;;27210:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27263:27;::::0;27196:53;;-1:-1:-1;27263:27:0::1;;27260:269;;;27337:40;4063:6;27337:15;:40;:::i;:::-;27316:20;:61:::0;27515:2:::1;27506:8;:6:::0;27513:1:::1;27506:8;:::i;:::-;:11;;;;:::i;:::-;27499:18;;27260:269;27539:43;::::0;-1:-1:-1;;;27539:43:0;;27563:10:::1;27539:43;::::0;::::1;8679:51:1::0;8746:18;;;8739:34;;;-1:-1:-1;;;;;27539:23:0;::::1;::::0;::::1;::::0;8652:18:1;;27539:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27598:13:0::1;::::0;::::1;::::0;;;::::1;26984:635;;26940:679::o:0;28869:158::-;28943:4;28960:37;28969:10;28981:7;28990:6;28960:8;:37::i;:::-;-1:-1:-1;29015:4:0;28869:158;;;;;:::o;3948:59::-;3994:13;3939:2;3994;:13;:::i;:::-;3984:23;;:9;:23;:::i;:::-;3948:59;:::o;29337:386::-;29434:4;29451:36;29461:6;29469:9;29480:6;29451:9;:36::i;:::-;-1:-1:-1;;;;;29524:19:0;;29500:21;29524:19;;;:11;:19;;;;;;;;29544:10;29524:31;;;;;;;;29574:26;;;;29566:59;;;;-1:-1:-1;;;29566:59:0;;10668:2:1;29566:59:0;;;10650:21:1;10707:2;10687:18;;;10680:30;-1:-1:-1;;;10726:18:1;;;10719:50;10786:18;;29566:59:0;10466:344:1;29566:59:0;29638:55;29647:6;29655:10;29667:25;29686:6;29667:16;:25;:::i;:::-;29638:8;:55::i;:::-;-1:-1:-1;29711:4:0;;29337:386;-1:-1:-1;;;;29337:386:0:o;18556:612::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;18679:11:::1;18727:1;18692:33;4808:2;4765:4;18692:33;:::i;:::-;18691:37;;;;:::i;:::-;18679:49;;18752:6;18747:3;:11;;:25;;;;;18766:6;18760:4;:12;;18747:25;:44;;;;;18785:6;18774:9;:17;;18747:44;18739:74;;;::::0;-1:-1:-1;;;18739:74:0;;11150:2:1;18739:74:0::1;::::0;::::1;11132:21:1::0;11189:2;11169:18;;;11162:30;-1:-1:-1;;;11208:18:1;;;11201:48;11266:18;;18739:74:0::1;10948:342:1::0;18739:74:0::1;4765:4;18847:9:::0;18832:14:::1;18837:9:::0;18832:4;:14:::1;:::i;:::-;:24;;;;:::i;:::-;:41;18824:86;;;::::0;-1:-1:-1;;;18824:86:0;;11497:2:1;18824:86:0::1;::::0;::::1;11479:21:1::0;11536:2;11516:18;;;11509:30;11575:34;11555:18;;;11548:62;-1:-1:-1;;;11626:18:1;;;11619:31;11667:19;;18824:86:0::1;11295:397:1::0;18824:86:0::1;18931:6;:10:::0;;;18952:7:::1;:12:::0;;;18975:11:::1;:21:::0;;;19007:12:::1;:22:::0;;;19040:12:::1;:22:::0;;;19073:7:::1;:12:::0;;;19101:59:::1;::::0;;11984:25:1;;;12040:2;12025:18;;12018:34;;;12068:18;;;12061:34;;;12126:2;12111:18;;12104:34;;;12169:3;12154:19;;12147:35;;;12213:3;12198:19;;12191:35;;;19101:59:0::1;::::0;11971:3:1;11956:19;19101:59:0::1;;;;;;;18668:500;18556:612:::0;;;;;;:::o;26366:149::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;26450:57:::1;26472:34;26491:15;26472:18:::0;:34:::1;:::i;:::-;26450:21;:57::i;:::-;26366:149:::0;:::o;19471:215::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;19551:1:::1;19539:10;:13;;19531:70;;;::::0;-1:-1:-1;;;19531:70:0;;12439:2:1;19531:70:0::1;::::0;::::1;12421:21:1::0;12478:2;12458:18;;;12451:30;12517:34;12497:18;;;12490:62;-1:-1:-1;;;12568:18:1;;;12561:43;12621:19;;19531:70:0::1;12237:409:1::0;19531:70:0::1;19612:9;:20:::0;;;19657:21:::1;::::0;1283:25:1;;;19657:21:0::1;::::0;1271:2:1;1256:18;19657:21:0::1;;;;;;;;19471:215:::0;:::o;29758:202::-;29863:10;29837:4;29884:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;29884:32:0;;;;;;;;;;29837:4;;29854:76;;29875:7;;29884:45;;29919:10;;29884:45;:::i;10552:120::-;2472:10;2461:7;2287;2314:6;-1:-1:-1;;;;;2314:6:0;;2249:79;2461:7;-1:-1:-1;;;;;2461:21:0;;2453:66;;;;-1:-1:-1;;;2453:66:0;;;;;;;:::i;:::-;10632:18:::1;:32:::0;;-1:-1:-1;;10632:32:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;10552:120::o;24394:83::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;24445:24:::1;24464:4;24445:18;:24::i;:::-;24394:83::o:0;19803:152::-;19850:4;19943;19923:19;;19904:18;;:38;;;;:::i;:::-;:43;;;;:::i;:::-;19883:19;;-1:-1:-1;;;;;19883:19:0;19873:30;;;;:9;:30;;;;;;:74;;19803:152;-1:-1:-1;19803:152:0:o;19217:207::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;19292:2:::1;19283:7;:11;;19275:72;;;::::0;-1:-1:-1;;;19275:72:0;;13214:2:1;19275:72:0::1;::::0;::::1;13196:21:1::0;13253:2;13233:18;;;13226:30;13292:34;13272:18;;;13265:62;-1:-1:-1;;;13343:18:1;;;13336:47;13400:19;;19275:72:0::1;13012:413:1::0;19275:72:0::1;19358:6;:14:::0;;;19397:19:::1;::::0;1283:25:1;;;19397:19:0::1;::::0;1271:2:1;1256:18;19397:19:0::1;1137:177:1::0;23965:154:0;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;24043:19:::1;::::0;-1:-1:-1;;;;;24043:19:0;;::::1;24038:24:::0;;::::1;::::0;24030:56:::1;;;::::0;-1:-1:-1;;;24030:56:0;;13632:2:1;24030:56:0::1;::::0;::::1;13614:21:1::0;13671:2;13651:18;;;13644:30;-1:-1:-1;;;13690:18:1;;;13683:50;13750:18;;24030:56:0::1;13430:344:1::0;24030:56:0::1;-1:-1:-1::0;;;;;24097:10:0;;;::::1;;::::0;;;:5:::1;:10;::::0;;;;:14;;-1:-1:-1;;24097:14:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23965:154::o;9921:623::-;2472:10;2461:7;2287;2314:6;-1:-1:-1;;;;;2314:6:0;;2249:79;2461:7;-1:-1:-1;;;;;2461:21:0;;2453:66;;;;-1:-1:-1;;;2453:66:0;;;;;;;:::i;:::-;10002:13:::1;:20:::0;9994:50:::1;;;::::0;-1:-1:-1;;;9994:50:0;;13981:2:1;9994:50:0::1;::::0;::::1;13963:21:1::0;14020:2;14000:18;;;13993:30;-1:-1:-1;;;14039:18:1;;;14032:43;14092:18;;9994:50:0::1;13779:337:1::0;9994:50:0::1;10100:18;::::0;10079::::1;::::0;10055:21:::1;::::0;10079:39:::1;::::0;10100:18:::1;::::0;;::::1;::::0;10079:39:::1;:::i;:::-;10150:4;10132:24;::::0;;;:9:::1;:24;::::0;;;;;10055:63;;-1:-1:-1;10132:40:0;-1:-1:-1;10129:408:0::1;;;10232:4;10188:23;10214:24:::0;;;:9:::1;:24;::::0;;;;;:40:::1;::::0;10241:13;;10214:40:::1;:::i;:::-;10311:13;:20:::0;10188:66;;-1:-1:-1;10269:21:0::1;::::0;10293:38:::1;::::0;10188:66;10293:38:::1;:::i;:::-;10269:62:::0;-1:-1:-1;10352:9:0::1;10348:178;10367:13;:20:::0;10365:22;::::1;10348:178;;;10446:64;10471:4;10478:13;10492:1;10478:16;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;10478:16:0::1;10496:13:::0;10446:16:::1;:64::i;:::-;10389:3;;10348:178;;;;10173:364;;9983:561;9921:623::o:0;2890:140::-;2472:10;2461:7;2287;2314:6;-1:-1:-1;;;;;2314:6:0;;2249:79;2461:7;-1:-1:-1;;;;;2461:21:0;;2453:66;;;;-1:-1:-1;;;2453:66:0;;;;;;;:::i;:::-;2989:1:::1;2973:6:::0;;2952:40:::1;::::0;-1:-1:-1;;;;;2973:6:0;;::::1;::::0;2952:40:::1;::::0;2989:1;;2952:40:::1;3020:1;3003:19:::0;;-1:-1:-1;;;;;;3003:19:0::1;::::0;;2890:140::o;25394:184::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;25458:15:::1;::::0;:18;25450:45:::1;;;::::0;-1:-1:-1;;;25450:45:0;;14455:2:1;25450:45:0::1;::::0;::::1;14437:21:1::0;14494:2;14474:18;;;14467:30;-1:-1:-1;;;14513:18:1;;;14506:45;14568:18;;25450:45:0::1;14253:339:1::0;25450:45:0::1;25522:15;25506;:31:::0;25553:17:::1;::::0;::::1;::::0;;;::::1;25394:184::o:0;5388:147::-;5475:15;;;;;-1:-1:-1;;;;;5475:15:0;5463:10;:27;5455:36;;;;;;5502:15;:25;;-1:-1:-1;;;;;5502:25:0;;;;;-1:-1:-1;;;;;;5502:25:0;;;;;;;;;5388:147::o;24236:90::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;24301:10:::1;:17:::0;;-1:-1:-1;;24301:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24236:90::o;10680:293::-;10809:18;;10788;;10736:15;;;;10831:3;;10788:39;;10809:18;;;;;10788:39;:::i;:::-;10787:47;;;;:::i;:::-;10866:4;10848:24;;;;:9;:24;;;;;;10763:71;;-1:-1:-1;10848:40:0;-1:-1:-1;10845:121:0;;;10932:4;10914:24;;;;:9;:24;;;;;;:40;;10941:13;;10914:40;:::i;:::-;10904:50;;10845:121;10752:221;10680:293;:::o;7392:426::-;2472:10;2461:7;2287;2314:6;-1:-1:-1;;;;;2314:6:0;;2249:79;2461:7;-1:-1:-1;;;;;2461:21:0;;2453:66;;;;-1:-1:-1;;;2453:66:0;;;;;;;:::i;:::-;7535:9:::1;::::0;7487:13:::1;:20:::0;7535:9:::1;::::0;;::::1;;;::::0;7487:44:::1;::::0;7510:14;;7487:44:::1;:::i;:::-;:57;;7479:91;;;::::0;-1:-1:-1;;;7479:91:0;;14799:2:1;7479:91:0::1;::::0;::::1;14781:21:1::0;14838:2;14818:18;;;14811:30;-1:-1:-1;;;14857:18:1;;;14850:51;14918:18;;7479:91:0::1;14597:345:1::0;7479:91:0::1;7584:9;7579:232;7599:25:::0;;::::1;7579:232;;;7651:12;:31;7664:14;;7679:1;7664:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7651:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;7651:31:0;;::::1;;7650:32;7642:64;;;::::0;-1:-1:-1;;;7642:64:0;;15149:2:1;7642:64:0::1;::::0;::::1;15131:21:1::0;15188:2;15168:18;;;15161:30;-1:-1:-1;;;15207:18:1;;;15200:49;15266:18;;7642:64:0::1;14947:343:1::0;7642:64:0::1;7717:13;7736:14;;7751:1;7736:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7717:37:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;7717:37:0;;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;;7717:37:0::1;-1:-1:-1::0;;;;;7717:37:0;;;::::1;::::0;;;::::1;::::0;;;;7765:12:::1;::::0;7778:14;;7793:1;7778:17;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7765:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;7765:31:0;:38;;-1:-1:-1;;7765:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;7626:3:0::1;7579:232;;;;7392:426:::0;;:::o;9479:317::-;9548:7;;;9574:166;9598:13;:20;9594:24;;9574:166;;;9664:12;-1:-1:-1;;;;;9644:32:0;:13;9658:1;9644:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;9644:16:0;:32;9640:89;;9705:1;9708:4;;-1:-1:-1;9479:317:0;-1:-1:-1;;9479:317:0:o;9640:89::-;9620:3;;9574:166;;;-1:-1:-1;9758:1:0;;;;-1:-1:-1;9479:317:0;-1:-1:-1;;9479:317:0:o;7901:275::-;2472:10;2461:7;2287;2314:6;-1:-1:-1;;;;;2314:6:0;;2249:79;2461:7;-1:-1:-1;;;;;2461:21:0;;2453:66;;;;-1:-1:-1;;;2453:66:0;;;;;;;:::i;:::-;7981:13:::1;7996:10;8010:30;8027:12;8010:16;:30::i;:::-;7980:60;;;;8059:5;8051:35;;;::::0;-1:-1:-1;;;8051:35:0;;15497:2:1;8051:35:0::1;::::0;::::1;15479:21:1::0;15536:2;15516:18;;;15509:30;-1:-1:-1;;;15555:18:1;;;15548:47;15612:18;;8051:35:0::1;15295:341:1::0;8051:35:0::1;8099:24;8117:5;8099:17;:24::i;:::-;-1:-1:-1::0;;;;;;;8134:26:0::1;8163:5;8134:26:::0;;;:12:::1;:26;::::0;;;;:34;;-1:-1:-1;;8134:34:0::1;::::0;;7901:275::o;29968:336::-;30105:10;30052:4;30093:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;30093:32:0;;;;;;;;;;30144:35;;;;30136:60;;;;-1:-1:-1;;;30136:60:0;;15843:2:1;30136:60:0;;;15825:21:1;15882:2;15862:18;;;15855:30;-1:-1:-1;;;15901:18:1;;;15894:42;15953:18;;30136:60:0;15641:336:1;30136:60:0;30209:65;30218:10;30230:7;30239:34;30258:15;30239:16;:34;:::i;30209:65::-;-1:-1:-1;30292:4:0;;29968:336;-1:-1:-1;;;29968:336:0:o;26192:110::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;26262:27:::1;:32:::0;;-1:-1:-1;;26262:32:0::1;26290:4;26262:32;::::0;;26192:110::o;28545:164::-;28622:4;28639:40;28649:10;28661:9;28672:6;28639:9;:40::i;25000:249::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;25109:4:::1;-1:-1:-1::0;;;;;25092:22:0;::::1;::::0;25084:60:::1;;;::::0;-1:-1:-1;;;25084:60:0;;16184:2:1;25084:60:0::1;::::0;::::1;16166:21:1::0;16223:2;16203:18;;;16196:30;16262:28;16242:18;;;16235:56;16308:18;;25084:60:0::1;15982:350:1::0;25084:60:0::1;-1:-1:-1::0;;;;;25155:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:34;;-1:-1:-1;;25155:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25205:36;;16505:51:1;;;16572:18;;;16565:50;25205:36:0::1;::::0;16478:18:1;25205:36:0::1;;;;;;;;25000:249:::0;;:::o;18073:211::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;18210:4:::1;18178:30;:36;;18170:45;;;;;;18226:19;:50:::0;18073:211::o;23229:205::-;23294:4;23329:20;;23313:15;:36;23310:97;;;23392:15;23371:20;;:36;;;;:::i;:::-;23364:43;;23229:205;:::o;23310:97::-;-1:-1:-1;23425:1:0;;23229:205::o;23440:139::-;23563:6;23487:4;23545:26;;;:9;:26;;;;23525:18;;3994:13;3939:2;3994;:13;:::i;:::-;3984:23;;:9;:23;:::i;:::-;23511:32;;;;:::i;:::-;23510:61;;;;:::i;17767:191::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;17881:2:::1;17856:23;:27;;17848:36;;;;;;17914:12;:36:::0;17767:191::o;9810:101::-;2472:10;2461:7;2287;2314:6;-1:-1:-1;;;;;2314:6:0;;2249:79;2461:7;-1:-1:-1;;;;;2461:21:0;;2453:66;;;;-1:-1:-1;;;2453:66:0;;;;;;;:::i;:::-;9880:9:::1;:23:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;9880:23:0;;::::1;::::0;;;::::1;::::0;;9810:101::o;24592:248::-;5633:19;5641:10;5633:7;:19::i;:::-;5625:56;;;;-1:-1:-1;;;5625:56:0;;;;;;;:::i;:::-;24706:4:::1;-1:-1:-1::0;;;;;24689:22:0;::::1;::::0;24681:60:::1;;;::::0;-1:-1:-1;;;24681:60:0;;16184:2:1;24681:60:0::1;::::0;::::1;16166:21:1::0;16223:2;16203:18;;;16196:30;16262:28;16242:18;;;16235:56;16308:18;;24681:60:0::1;15982:350:1::0;24681:60:0::1;-1:-1:-1::0;;;;;24752:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;;;;:33;;-1:-1:-1;;24752:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24801:31;;16505:51:1;;;16572:18;;;16565:50;24801:31:0::1;::::0;16478:18:1;24801:31:0::1;16337:284:1::0;3185:236:0;2472:10;2461:7;2287;2314:6;-1:-1:-1;;;;;2314:6:0;;2249:79;2461:7;-1:-1:-1;;;;;2461:21:0;;2453:66;;;;-1:-1:-1;;;2453:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3266:22:0;::::1;3258:73;;;::::0;-1:-1:-1;;;3258:73:0;;16828:2:1;3258:73:0::1;::::0;::::1;16810:21:1::0;16867:2;16847:18;;;16840:30;16906:34;16886:18;;;16879:62;-1:-1:-1;;;16957:18:1;;;16950:36;17003:19;;3258:73:0::1;16626:402:1::0;3258:73:0::1;3368:6;::::0;;3347:38:::1;::::0;-1:-1:-1;;;;;3347:38:0;;::::1;::::0;3368:6;::::1;::::0;3347:38:::1;::::0;::::1;3396:6;:17:::0;;-1:-1:-1;;;;;;3396:17:0::1;-1:-1:-1::0;;;;;3396:17:0;;;::::1;::::0;;;::::1;::::0;;3185:236::o;8305:732::-;8391:31;8435:14;8452:13;8460:5;8452;:13;:::i;:::-;8435:30;-1:-1:-1;8486:13:0;;8555:14;8564:5;8435:30;8555:14;:::i;:::-;8532:13;:20;:37;:103;;8615:13;:20;8532:103;;;8585:14;8594:5;8585:6;:14;:::i;:::-;8665:13;:20;8516:119;;-1:-1:-1;8656:29:0;;8648:65;;;;-1:-1:-1;;;8648:65:0;;17235:2:1;8648:65:0;;;17217:21:1;17274:2;17254:18;;;17247:30;17313:25;17293:18;;;17286:53;17356:18;;8648:65:0;17033:347:1;8648:65:0;8740:6;8732:5;:14;8724:49;;;;-1:-1:-1;;;8724:49:0;;17587:2:1;8724:49:0;;;17569:21:1;17626:2;17606:18;;;17599:30;-1:-1:-1;;;17645:18:1;;;17638:52;17707:18;;8724:49:0;17385:346:1;8724:49:0;8786:23;8826:14;8834:6;8826:5;:14;:::i;:::-;8812:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8812:29:0;-1:-1:-1;8786:55:0;-1:-1:-1;8871:6:0;8854:152;8883:5;8879:1;:9;8854:152;;;8926:13;8941:20;;8969:1;;8941:24;;8964:1;;8941:24;:::i;:::-;8940:31;;;;:::i;:::-;8926:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8926:46:0;8910:6;8917:5;8910:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8910:62:0;;;:13;;;;;;;;;;;:62;8987:7;;;;:::i;:::-;;-1:-1:-1;;8890:3:0;;8854:152;;;-1:-1:-1;9023:6:0;8305:732;-1:-1:-1;;;;;;8305:732:0:o;5919:120::-;5972:4;2314:6;;-1:-1:-1;;;;;5995:13:0;;;2314:6;;5995:13;;:36;;-1:-1:-1;;6016:15:0;;;;;-1:-1:-1;;;;;6016:15:0;;;6010:21;;;;5919:120::o;29033:296::-;-1:-1:-1;;;;;29123:19:0;;29115:49;;;;-1:-1:-1;;;29115:49:0;;18210:2:1;29115:49:0;;;18192:21:1;18249:2;18229:18;;;18222:30;-1:-1:-1;;;18268:18:1;;;18261:47;18325:18;;29115:49:0;18008:341:1;29115:49:0;-1:-1:-1;;;;;29183:21:0;;29175:49;;;;-1:-1:-1;;;29175:49:0;;18556:2:1;29175:49:0;;;18538:21:1;18595:2;18575:18;;;18568:30;-1:-1:-1;;;18614:18:1;;;18607:45;18669:18;;29175:49:0;18354:339:1;29175:49:0;-1:-1:-1;;;;;29237:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29289:32;;1283:25:1;;;29289:32:0;;1256:18:1;29289:32:0;;;;;;;29033:296;;;:::o;11383:879::-;-1:-1:-1;;;;;11476:20:0;;11468:51;;;;-1:-1:-1;;;11468:51:0;;18900:2:1;11468:51:0;;;18882:21:1;18939:2;18919:18;;;18912:30;-1:-1:-1;;;18958:18:1;;;18951:48;19016:18;;11468:51:0;18698:342:1;11468:51:0;-1:-1:-1;;;;;11538:23:0;;11530:52;;;;-1:-1:-1;;;11530:52:0;;19247:2:1;11530:52:0;;;19229:21:1;19286:2;19266:18;;;19259:30;-1:-1:-1;;;19305:18:1;;;19298:46;19361:18;;11530:52:0;19045:340:1;11530:52:0;-1:-1:-1;;;;;11625:24:0;;;;;;:16;:24;;;;;;;;;:55;;-1:-1:-1;;;;;;11653:27:0;;;;;;:16;:27;;;;;;;;11625:55;11622:633;;;11695:43;11712:6;11720:9;11731:6;11695:16;:43::i;11622:633::-;-1:-1:-1;;;;;11757:28:0;;;;;;:17;:28;;;;;;;;11754:501;;;11895:1;11879:15;;:17;11871:52;;;;-1:-1:-1;;;11871:52:0;;19592:2:1;11871:52:0;;;19574:21:1;19631:2;19611:18;;;19604:30;-1:-1:-1;;;19650:18:1;;;19643:53;19713:18;;11871:52:0;19390:347:1;11871:52:0;11938:51;11965:6;11972:9;11982:6;11938:26;:51::i;11754:501::-;12143:1;12127:15;;:17;12119:52;;;;-1:-1:-1;;;12119:52:0;;19592:2:1;12119:52:0;;;19574:21:1;19631:2;19611:18;;;19604:30;-1:-1:-1;;;19650:18:1;;;19643:53;19713:18;;12119:52:0;19390:347:1;12119:52:0;12186:39;12201:6;12208:9;12218:6;12186:14;:39::i;26571:280::-;26724:20;;26710:13;:34;26702:43;;;;;;26756:20;:34;;;26806:37;;1283:25:1;;;26806:37:0;;1271:2:1;1256:18;26806:37:0;1137:177:1;20114:1820:0;17551:27;:34;;-1:-1:-1;;;;17551:34:0;-1:-1:-1;;;17551:34:0;;;20230:4:::1;17551:34:::0;20212:24;;;17581:4;20212:24:::1;::::0;;;;;20274:12:::1;::::0;20261::::1;::::0;20212:24;;17551:34;20261:25:::1;::::0;20274:12;20261:25:::1;:::i;:::-;20440:12;::::0;20419:19:::1;::::0;-1:-1:-1;;;;;20419:19:0::1;20392:16;20409:30:::0;;;:9:::1;:30;::::0;;;;;20247:39;;-1:-1:-1;20392:16:0;20453:4:::1;::::0;20409:43:::1;::::0;::::1;:::i;:::-;:48;;;;:::i;:::-;20392:65;;20510:8;20520:1;20510:11:::0;20507:22:::1;;20522:7;;;;;20507:22;20698:12;20695:134;;;-1:-1:-1::0;20755:4:0::1;20737:24;::::0;;;:9:::1;:24;::::0;;;;;20695:134:::1;;;20796:11;20780:15;:27;20777:52;;;20822:7;;;;;20777:52;20962:22;20995:17;:15;:17::i;:::-;:65;;21052:8;21038:12;;21026:11;:24;;;;:::i;:::-;21025:35;;;;:::i;:::-;20995:65;;;21013:1;20995:65;20962:98:::0;-1:-1:-1;21073:22:0::1;21097:29;20962:98:::0;21097:11;:29:::1;:::i;:::-;21073:53:::0;-1:-1:-1;21139:12:0::1;21152:19;21170:1;21152:17:::0;:19:::1;:::i;:::-;21139:32:::0;-1:-1:-1;21252:14:0::1;21267:25;21275:17:::0;21139:32;21267:25:::1;:::i;:::-;21252:40:::0;-1:-1:-1;21406:21:0::1;21438:27;21252:40:::0;21438:16:::1;:27::i;:::-;21476:11;21489:41;21513:17:::0;21489:21:::1;:41;:::i;:::-;21476:55:::0;-1:-1:-1;21636:19:0;;21633:135:::1;;21671:11;21702:9:::0;21686:14:::1;21693:7:::0;21686:6;:14:::1;:::i;:::-;21685:26;;;;:::i;:::-;21671:40;;21726:30;21740:7;21749:6;21726:13;:30::i;:::-;21656:112;21633:135;21853:15;::::0;:53:::1;::::0;21841:9:::1;::::0;21853:15;;::::1;-1:-1:-1::0;;;;;21853:15:0::1;::::0;21880:21:::1;::::0;21841:9;21853:53;21841:9;21853:53;21880:21;21853:15;:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;17596:1:0::1;-1:-1:-1::0;17608:27:0;:35;;-1:-1:-1;;;;17608:35:0;;;20114:1820::o;14949:339::-;-1:-1:-1;;;;;15062:17:0;;15041:18;15062:17;;;:9;:17;;;;;;15098:23;;;;15090:60;;;;-1:-1:-1;;;15090:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15161:17:0;;;;;;:9;:17;;;;;:25;;15180:6;;15161:17;:25;;15180:6;;15161:25;:::i;:::-;;;;-1:-1:-1;;;;;;;15197:20:0;;;;;;:9;:20;;;;;:28;;15219:6;;15197:20;:28;;15219:6;;15197:28;:::i;:::-;;;;;;;;15263:9;-1:-1:-1;;;;;15247:33:0;15256:6;-1:-1:-1;;;;;15247:33:0;;15273:6;15247:33;;;;1283:25:1;;1271:2;1256:18;;1137:177;15247:33:0;;;;;;;;15030:258;14949:339;;;:::o;9100:317::-;9180:13;:20;9171:29;;9163:61;;;;-1:-1:-1;;;9163:61:0;;20507:2:1;9163:61:0;;;20489:21:1;20546:2;20526:18;;;20519:30;-1:-1:-1;;;20565:18:1;;;20558:49;20624:18;;9163:61:0;20305:343:1;9163:61:0;9340:13;9354:20;;:24;;9377:1;;9354:24;:::i;:::-;9340:39;;;;;;;;:::i;:::-;;;;;;;;;;;9316:13;:21;;-1:-1:-1;;;;;9340:39:0;;;;9330:6;;9316:21;;;;;;:::i;:::-;;;;;;;;;:63;;;;;-1:-1:-1;;;;;9316:63:0;;;;;-1:-1:-1;;;;;9316:63:0;;;;;;9390:13;:19;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;9390:19:0;;;;;-1:-1:-1;;;;;;9390:19:0;;;;;;-1:-1:-1;9100:317:0:o;15357:1709::-;-1:-1:-1;;;;;15481:17:0;;15460:18;15481:17;;;:9;:17;;;;;;15517:23;;;;15509:60;;;;-1:-1:-1;;;15509:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15593:13:0;;;15582:10;15593:13;;;:5;:13;;;;;;;15629:16;;;;;;;;15593:13;;;;;15629:16;;15677:497;;;;15780:15;;15725:11;;15780:31;;15725:11;;15780:31;:::i;:::-;15764:15;:47;15761:143;;;15835:33;15848:15;15864:3;15835:12;:33::i;:::-;15831:37;;15761:143;;;15897:7;;15893:11;;15761:143;15687:233;15677:497;;;15938:5;15935:239;;;16024:15;;15979:11;;16024:30;;15979:11;;16024:30;:::i;:::-;16008:15;:46;16005:136;;;16078:32;16091:14;16106:3;16078:12;:32::i;16005:136::-;-1:-1:-1;;16135:6:0;;15935:239;;;-1:-1:-1;16163:11:0;;15935:239;16199:19;;-1:-1:-1;;;;;16191:27:0;;;16199:19;;16191:27;;;;16190:44;;-1:-1:-1;16223:10:0;;;;16222:11;16190:44;:76;;;;-1:-1:-1;16238:27:0;;-1:-1:-1;;;16238:27:0;;;;16237:28;16190:76;16187:119;;;16281:25;16300:5;16281:18;:25::i;:::-;16377:20;16398:35;16412:6;16420:3;16425:7;;16398:13;:35::i;:::-;16377:56;;16541:18;16560:53;16574:6;16582:3;16600:12;;16587;;:25;;;;:::i;:::-;16560:13;:53::i;:::-;16541:72;-1:-1:-1;16677:16:0;16702:31;16541:72;16702:15;:31;:::i;:::-;16694:40;;:6;:40;:::i;:::-;-1:-1:-1;;;;;16747:17:0;;;;;;:9;:17;;;;;:25;;16677:57;;-1:-1:-1;16766:6:0;;16747:17;;;:25;;16766:6;;16747:25;:::i;:::-;;;;-1:-1:-1;;16857:4:0;16839:24;;;;:9;:24;;;;;:41;;16867:13;;16839:24;:41;;16867:13;;16839:41;:::i;:::-;;;;;;;;16935:15;16915:18;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;16961:20:0;;;;;;:9;:20;;;;;:33;;16983:11;;16961:20;:33;;16983:11;;16961:33;:::i;:::-;;;;;;;;17036:9;-1:-1:-1;;;;;17020:38:0;17029:6;-1:-1:-1;;;;;17020:38:0;;17046:11;17020:38;;;;1283:25:1;;1271:2;1256:18;;1137:177;17020:38:0;;;;;;;;15449:1617;;;;;;;15357:1709;;;:::o;12369:1966::-;-1:-1:-1;;;;;12480:17:0;;;12459:18;12480:17;;;:9;:17;;;;;;;12532:20;;;;;;;;12571:23;;;;12563:60;;;;-1:-1:-1;;;12563:60:0;;;;;;;:::i;:::-;12669:6;12656:9;;12642:13;:23;;;;:::i;:::-;:33;;12634:77;;;;-1:-1:-1;;;12634:77:0;;20987:2:1;12634:77:0;;;20969:21:1;21026:2;21006:18;;;20999:30;21065:33;21045:18;;;21038:61;21116:18;;12634:77:0;20785:355:1;12634:77:0;12776:6;;3994:13;3939:2;3994;:13;:::i;:::-;3984:23;;:9;:23;:::i;:::-;12762:20;;;;:::i;:::-;12731:25;12750:6;12731:16;:25;:::i;:::-;12730:52;;12722:112;;;;-1:-1:-1;;;12722:112:0;;21347:2:1;12722:112:0;;;21329:21:1;21386:2;21366:18;;;21359:30;21425:34;21405:18;;;21398:62;-1:-1:-1;;;21476:18:1;;;21469:45;21531:19;;12722:112:0;21145:411:1;12722:112:0;-1:-1:-1;;;;;12858:13:0;;;12847:10;12858:13;;;:5;:13;;;;;;;12894:16;;;;;;;;12858:13;;;;;12894:16;;12942:501;;;;13047:15;;12990:13;;13047:31;;12990:13;;13047:31;:::i;:::-;13031:15;:47;13028:143;;;13102:33;13115:15;13131:3;13102:12;:33::i;:::-;13098:37;;13028:143;;;13164:7;;13160:11;;13028:143;12952:235;12942:501;;;13205:5;13202:241;;;13293:15;;13246:13;;13293:30;;13246:13;;13293:30;:::i;:::-;13277:15;:46;13274:136;;;13347:32;13360:14;13375:3;13347:12;:32::i;13274:136::-;-1:-1:-1;;13404:6:0;;13202:241;;;-1:-1:-1;13432:11:0;;13202:241;13468:19;;-1:-1:-1;;;;;13460:27:0;;;13468:19;;13460:27;;;;13459:44;;-1:-1:-1;13492:10:0;;;;13491:11;13459:44;:76;;;;-1:-1:-1;13507:27:0;;-1:-1:-1;;;13507:27:0;;;;13506:28;13459:76;13456:119;;;13550:25;13569:5;13550:18;:25::i;:::-;13646:20;13667:35;13681:6;13689:3;13694:7;;13667:13;:35::i;:::-;13646:56;;13810:18;13829:53;13843:6;13851:3;13869:12;;13856;;:25;;;;:::i;13829:53::-;13810:72;-1:-1:-1;13946:16:0;13971:31;13810:72;13971:15;:31;:::i;:::-;13963:40;;:6;:40;:::i;:::-;-1:-1:-1;;;;;14016:17:0;;;;;;:9;:17;;;;;:25;;13946:57;;-1:-1:-1;14035:6:0;;14016:17;;;:25;;14035:6;;14016:25;:::i;:::-;;;;-1:-1:-1;;14126:4:0;14108:24;;;;:9;:24;;;;;:41;;14136:13;;14108:24;:41;;14136:13;;14108:41;:::i;:::-;;;;;;;;14204:15;14184:18;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;14230:20:0;;;;;;:9;:20;;;;;:33;;14252:11;;14230:20;:33;;14252:11;;14230:33;:::i;:::-;;;;;;;;14305:9;-1:-1:-1;;;;;14289:38:0;14298:6;-1:-1:-1;;;;;14289:38:0;;14315:11;14289:38;;;;1283:25:1;;1271:2;1256:18;;1137:177;14289:38:0;;;;;;;;12448:1887;;;;;;;;12369:1966;;;:::o;21984:474::-;22074:14;;22042:56;;22059:4;;-1:-1:-1;;;;;22074:14:0;22091:6;22042:8;:56::i;:::-;22133:16;;;22147:1;22133:16;;;;;;;;22109:21;;22133:16;;;;;;;;;;-1:-1:-1;22133:16:0;22109:40;;22178:4;22160;22165:1;22160:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22160:23:0;;;:7;;;;;;;;;;:23;;;;22204:14;;:21;;;-1:-1:-1;;;22204:21:0;;;;:14;;;;;:19;;:21;;;;;22160:7;;22204:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22194:4;22199:1;22194:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22194:31:0;;;:7;;;;;;;;;:31;22242:14;;:190;;-1:-1:-1;;;22242:190:0;;:14;;;:65;;:190;;22322:6;;22242:14;;22359:4;;22386;;22406:15;;22242:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22031:427;21984:474;:::o;22531:359::-;22639:14;;22607:61;;22624:4;;-1:-1:-1;;;;;22639:14:0;22656:11;22607:8;:61::i;:::-;22679:14;;:203;;-1:-1:-1;;;22679:203:0;;22750:4;22679:203;;;22707:51:1;;;22774:18;;;22767:34;;;22679:14:0;22817:18:1;;;22810:34;;;22860:18;;;22853:34;22903:19;;;22896:61;22856:15:0;22973:19:1;;;22966:35;-1:-1:-1;;;;;22679:14:0;;;;:30;;22717:9;;22679:19:1;;:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22531:359;;:::o;14443:211::-;14515:4;14531:20;14568:15;;14552;:31;;;;:::i;:::-;14531:52;-1:-1:-1;14637:8:0;14531:52;14610:9;14617:2;14610:6;:9;:::i;:::-;14609:27;;;;:::i;:::-;:36;;;;:::i;:::-;14601:45;;:6;:45;:::i;:::-;14594:52;14443:211;-1:-1:-1;;;;14443:211:0:o;14709:176::-;14794:4;14845:31;4765:4;;14845:31;:::i;:::-;14830:10;14819;14826:3;14819:6;:10;:::i;:::-;:21;;;;:::i;:::-;14818:59;;;;:::i;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;573:367;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;904:2;889:18;;;;876:32;;-1:-1:-1;;;573:367:1:o;1319:508::-;1396:6;1404;1412;1465:2;1453:9;1444:7;1440:23;1436:32;1433:52;;;1481:1;1478;1471:12;1433:52;1520:9;1507:23;1539:31;1564:5;1539:31;:::i;:::-;1589:5;-1:-1:-1;1646:2:1;1631:18;;1618:32;1659:33;1618:32;1659:33;:::i;:::-;1319:508;;1711:7;;-1:-1:-1;;;1791:2:1;1776:18;;;;1763:32;;1319:508::o;1832:829::-;1936:6;1944;1952;1960;1968;1976;2029:3;2017:9;2008:7;2004:23;2000:33;1997:53;;;2046:1;2043;2036:12;1997:53;-1:-1:-1;;2091:23:1;;;2211:2;2196:18;;2183:32;;-1:-1:-1;2314:2:1;2299:18;;2286:32;;2417:2;2402:18;;2389:32;;-1:-1:-1;2520:3:1;2505:19;;2492:33;;-1:-1:-1;2624:3:1;2609:19;2596:33;;-1:-1:-1;1832:829:1;-1:-1:-1;1832:829:1:o;2855:226::-;2914:6;2967:2;2955:9;2946:7;2942:23;2938:32;2935:52;;;2983:1;2980;2973:12;2935:52;-1:-1:-1;3028:23:1;;2855:226;-1:-1:-1;2855:226:1:o;3086:269::-;3143:6;3196:2;3184:9;3175:7;3171:23;3167:32;3164:52;;;3212:1;3209;3202:12;3164:52;3251:9;3238:23;3301:4;3294:5;3290:16;3283:5;3280:27;3270:55;;3321:1;3318;3311:12;3270:55;3344:5;3086:269;-1:-1:-1;;;3086:269:1:o;3360:247::-;3419:6;3472:2;3460:9;3451:7;3447:23;3443:32;3440:52;;;3488:1;3485;3478:12;3440:52;3527:9;3514:23;3546:31;3571:5;3546:31;:::i;3612:118::-;3698:5;3691:13;3684:21;3677:5;3674:32;3664:60;;3720:1;3717;3710:12;3735:382;3800:6;3808;3861:2;3849:9;3840:7;3836:23;3832:32;3829:52;;;3877:1;3874;3867:12;3829:52;3916:9;3903:23;3935:31;3960:5;3935:31;:::i;:::-;3985:5;-1:-1:-1;4042:2:1;4027:18;;4014:32;4055:30;4014:32;4055:30;:::i;:::-;4104:7;4094:17;;;3735:382;;;;;:::o;4330:241::-;4386:6;4439:2;4427:9;4418:7;4414:23;4410:32;4407:52;;;4455:1;4452;4445:12;4407:52;4494:9;4481:23;4513:28;4535:5;4513:28;:::i;4576:610::-;4662:6;4670;4723:2;4711:9;4702:7;4698:23;4694:32;4691:52;;;4739:1;4736;4729:12;4691:52;4779:9;4766:23;4812:18;4804:6;4801:30;4798:50;;;4844:1;4841;4834:12;4798:50;4867:22;;4920:4;4912:13;;4908:27;-1:-1:-1;4898:55:1;;4949:1;4946;4939:12;4898:55;4989:2;4976:16;5015:18;5007:6;5004:30;5001:50;;;5047:1;5044;5037:12;5001:50;5100:7;5095:2;5085:6;5082:1;5078:14;5074:2;5070:23;5066:32;5063:45;5060:65;;;5121:1;5118;5111:12;5060:65;5152:2;5144:11;;;;;5174:6;;-1:-1:-1;4576:610:1;-1:-1:-1;;;4576:610:1:o;5454:388::-;5522:6;5530;5583:2;5571:9;5562:7;5558:23;5554:32;5551:52;;;5599:1;5596;5589:12;5551:52;5638:9;5625:23;5657:31;5682:5;5657:31;:::i;:::-;5707:5;-1:-1:-1;5764:2:1;5749:18;;5736:32;5777:33;5736:32;5777:33;:::i;5847:346::-;5915:6;5923;5976:2;5964:9;5955:7;5951:23;5947:32;5944:52;;;5992:1;5989;5982:12;5944:52;-1:-1:-1;;6037:23:1;;;6157:2;6142:18;;;6129:32;;-1:-1:-1;5847:346:1:o;6198:446::-;6251:3;6289:5;6283:12;6316:6;6311:3;6304:19;6348:4;6343:3;6339:14;6332:21;;6387:4;6380:5;6376:16;6410:1;6420:199;6434:6;6431:1;6428:13;6420:199;;;6499:13;;-1:-1:-1;;;;;6495:39:1;6483:52;;6564:4;6555:14;;;;6592:17;;;;6531:1;6449:9;6420:199;;;-1:-1:-1;6635:3:1;;6198:446;-1:-1:-1;;;;6198:446:1:o;6649:261::-;6828:2;6817:9;6810:21;6791:4;6848:56;6900:2;6889:9;6885:18;6877:6;6848:56;:::i;6915:348::-;7117:2;7099:21;;;7156:2;7136:18;;;7129:30;7195:26;7190:2;7175:18;;7168:54;7254:2;7239:18;;6915:348::o;7613:230::-;7683:6;7736:2;7724:9;7715:7;7711:23;7707:32;7704:52;;;7752:1;7749;7742:12;7704:52;-1:-1:-1;7797:16:1;;7613:230;-1:-1:-1;7613:230:1:o;7848:127::-;7909:10;7904:3;7900:20;7897:1;7890:31;7940:4;7937:1;7930:15;7964:4;7961:1;7954:15;7980:125;8045:9;;;8066:10;;;8063:36;;;8079:18;;:::i;8110:168::-;8183:9;;;8214;;8231:15;;;8225:22;;8211:37;8201:71;;8252:18;;:::i;8283:217::-;8323:1;8349;8339:132;;8393:10;8388:3;8384:20;8381:1;8374:31;8428:4;8425:1;8418:15;8456:4;8453:1;8446:15;8339:132;-1:-1:-1;8485:9:1;;8283:217::o;8784:245::-;8851:6;8904:2;8892:9;8883:7;8879:23;8875:32;8872:52;;;8920:1;8917;8910:12;8872:52;8952:9;8946:16;8971:28;8993:5;8971:28;:::i;9034:375::-;9122:1;9140:5;9154:249;9175:1;9165:8;9162:15;9154:249;;;9225:4;9220:3;9216:14;9210:4;9207:24;9204:50;;;9234:18;;:::i;:::-;9284:1;9274:8;9270:16;9267:49;;;9298:16;;;;9267:49;9381:1;9377:16;;;;;9337:15;;9154:249;;;9034:375;;;;;;:::o;9414:902::-;9463:5;9493:8;9483:80;;-1:-1:-1;9534:1:1;9548:5;;9483:80;9582:4;9572:76;;-1:-1:-1;9619:1:1;9633:5;;9572:76;9664:4;9682:1;9677:59;;;;9750:1;9745:174;;;;9657:262;;9677:59;9707:1;9698:10;;9721:5;;;9745:174;9782:3;9772:8;9769:17;9766:43;;;9789:18;;:::i;:::-;-1:-1:-1;;9845:1:1;9831:16;;9904:5;;9657:262;;10003:2;9993:8;9990:16;9984:3;9978:4;9975:13;9971:36;9965:2;9955:8;9952:16;9947:2;9941:4;9938:12;9934:35;9931:77;9928:203;;;-1:-1:-1;10040:19:1;;;10116:5;;9928:203;10163:42;-1:-1:-1;;10188:8:1;10182:4;10163:42;:::i;:::-;10241:6;10237:1;10233:6;10229:19;10220:7;10217:32;10214:58;;;10252:18;;:::i;:::-;10290:20;;9414:902;-1:-1:-1;;;9414:902:1:o;10321:140::-;10379:5;10408:47;10449:4;10439:8;10435:19;10429:4;10408:47;:::i;10815:128::-;10882:9;;;10903:11;;;10900:37;;;10917:18;;:::i;12651:356::-;12853:2;12835:21;;;12872:18;;;12865:30;12931:34;12926:2;12911:18;;12904:62;12998:2;12983:18;;12651:356::o;14121:127::-;14182:10;14177:3;14173:20;14170:1;14163:31;14213:4;14210:1;14203:15;14237:4;14234:1;14227:15;17736:127;17797:10;17792:3;17788:20;17785:1;17778:31;17828:4;17825:1;17818:15;17852:4;17849:1;17842:15;17868:135;17907:3;17928:17;;;17925:43;;17948:18;;:::i;:::-;-1:-1:-1;17995:1:1;17984:13;;17868:135::o;19952:348::-;20154:2;20136:21;;;20193:2;20173:18;;;20166:30;20232:26;20227:2;20212:18;;20205:54;20291:2;20276:18;;19952:348::o;20653:127::-;20714:10;20709:3;20705:20;20702:1;20695:31;20745:4;20742:1;20735:15;20769:4;20766:1;20759:15;21561:251;21631:6;21684:2;21672:9;21663:7;21659:23;21655:32;21652:52;;;21700:1;21697;21690:12;21652:52;21732:9;21726:16;21751:31;21776:5;21751:31;:::i;21817:582::-;22116:6;22105:9;22098:25;22159:6;22154:2;22143:9;22139:18;22132:34;22202:3;22197:2;22186:9;22182:18;22175:31;22079:4;22223:57;22275:3;22264:9;22260:19;22252:6;22223:57;:::i;:::-;-1:-1:-1;;;;;22316:32:1;;;;22311:2;22296:18;;22289:60;-1:-1:-1;22380:3:1;22365:19;22358:35;22215:65;21817:582;-1:-1:-1;;;21817:582:1:o;23012:456::-;23100:6;23108;23116;23169:2;23157:9;23148:7;23144:23;23140:32;23137:52;;;23185:1;23182;23175:12;23137:52;-1:-1:-1;;23230:16:1;;23336:2;23321:18;;23315:25;23432:2;23417:18;;;23411:25;23230:16;;23315:25;;-1:-1:-1;23411:25:1;23012:456;-1:-1:-1;23012:456:1:o
Swarm Source
ipfs://64ee1de5f6a6e661b0ddb4ce3cbd250e5acf2de74fcb4c979296ad4fc464d9bf
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.