Token Magus Nodes
Overview CRC20
Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
10,000,000 MAGUS
Holders:
240 addresses
Transfers:
-
Contract:
Decimals:
6
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
magus
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
/*Auther by STQC, Please credit this repo and my github https://github.com/stqc if you use this in your project */ /** *Submitted for verification at BscScan.com on 2021-07-27 */ pragma solidity ^0.8.0; // SPDX-License-Identifier: Creative Commons Attribution Non Commercial Share Alike 4.0 International import "magus.sol"; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface nodeMethods{ function confirmSaleOnP2P(address seller, address buyer, uint256 amount) external; } contract magus is Context, IBEP20, Ownable, ReentrancyGuard, nodeMethods { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => uint256) public _interest; mapping (address => uint256) public _lastClaim; mapping(address=>uint256) public nodeBalance; mapping (address => mapping (address => uint256)) private _allowances; mapping(address => bool) private exclude; mapping(address => bool) private isHolder; mapping (uint256=>address)private tokensForClaim; mapping(address=>uint256) private wasInSale; mapping(address=>bool) private blackList; mapping(address=>bool) public claimedPre; uint8 private _decimals; uint256 private _totalSupply; uint256 private _burntamt; uint256 private totalTaxCollected; uint256 public earlySaleTax = 20; uint256 public minAmount; uint256 public maxTxAllowed; uint256 public nodeSupply; uint256 public claimTax=10; uint256 public launchTime; uint256 public nodePrice; uint256 public availableNodes; uint256 public threshold; uint256 public presaleTokens; string private _symbol; string private _name; address public USDC =0xc21223249CA28397B4B6541dfFaEcC539BfF0c59;//mainnet cro address public treasuryWallet =0x96c10FC094fC95f4bD4E4F85E74F7d6DeB28947d;//treasuryWallet address public devWallet =0x8c46309D78e1e80bCeFE915aBBeC0FB15eEd085c;//devWallet address public rewardsPool= 0x243357d074270993B83229f49f5c2B825493c699; address public burnAddress = 0x000000000000000000000000000000000000dEaD; //burnAddress address public presale; address private P2P; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; constructor() ReentrancyGuard() public { _decimals = 6; _totalSupply = 10000000*10**uint256(_decimals); presaleTokens = 150000*10**uint256(_decimals); uint256 initialTransfer = _totalSupply.sub(presaleTokens); nodeSupply = 100000; availableNodes=nodeSupply; nodePrice = 100; _balances[msg.sender] = initialTransfer; _name = "Magus Nodes"; _symbol = "MAGUS"; maxTxAllowed = 0*10**uint256(_decimals); minAmount = 1000*10**uint256(_decimals); exclude[owner()]=true; exclude[address(this)]=true; exclude[treasuryWallet]=true; exclude[burnAddress]=true; exclude[devWallet]=true; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x145677FC4d9b8F19B5D56d1820c48e0443049a30);//pancake v2 router address PairCreated = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), USDC); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = PairCreated; launchTime=block.timestamp; emit Transfer(address(0), msg.sender, initialTransfer); emit Transfer(address(0),address(this),presaleTokens); } /** * @dev Returns the bep token owner. */ function getOwner() external view override returns (address) { return owner(); } /** * @dev Returns the token decimals. */ function decimals() external view override returns (uint8) { return _decimals; } /** * @dev Returns the token symbol. */ function symbol() external view override returns (string memory) { return _symbol; } /** * @dev Returns the token name. */ function name() external view override returns (string memory) { return _name; } /** * @dev See {BEP20-totalSupply}. */ function totalSupply() external view override returns (uint256) { return _totalSupply; } function total_burnt() external view returns(uint256){ return _burntamt; } /** * @dev See {BEP20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function changeDevWallet(address add) external onlyOwner{ devWallet = add; } function changeRewardWallet(address add) external onlyOwner{ rewardsPool = add; } function changeTreasurey(address add) external onlyOwner{ treasuryWallet = add; } function totalburnt() public view returns(uint256){ return _burntamt; } function isExcludedfromFee(address account) external view returns(bool){ return exclude[account]; } function checkBlackList(address account) external view returns (bool){ return blackList[account]; } function airdropNode(address nodeOwner,uint256 amount) external onlyOwner{ _lastClaim[nodeOwner]=block.timestamp; nodeBalance[nodeOwner] = nodeBalance[nodeOwner].add(amount); availableNodes=availableNodes.sub(amount); } function addMorePresaleTokens(uint256 amount) external onlyOwner{ amount=amount*10**uint256(_decimals); _balances[msg.sender]=_balances[msg.sender].sub(amount); presaleTokens=presaleTokens.add(amount); emit Transfer(msg.sender,address(this),amount); } function removeePresaleTokens(uint256 amount) external onlyOwner{ amount=amount*10**uint256(_decimals); presaleTokens=presaleTokens.sub(amount); _balances[msg.sender] = _balances[msg.sender].add(amount); emit Transfer(address(this),msg.sender,amount); } function claimTokenAndNode() external{ require(!claimedPre[msg.sender],"You have already made your claims"); magusPresale MagusPre = magusPresale(presale); require(MagusPre.balanceOf(msg.sender)>0,"You have no presale tokens"); claimedPre[msg.sender]=true; uint256 bal = MagusPre.balanceOf(msg.sender); bal = bal.div(100); uint256 nodeToGive = bal.div(2); bal = bal.sub(nodeToGive); nodeToGive = nodeToGive.div(10**uint256(_decimals)); availableNodes = availableNodes.sub(nodeToGive); presaleTokens= presaleTokens.sub(bal.mul(100)); nodeBalance[msg.sender] = nodeBalance[msg.sender].add(nodeToGive); _balances[msg.sender] = _balances[msg.sender].add(bal.mul(100)); _lastClaim[msg.sender] = block.timestamp; emit Transfer(address(this),msg.sender,bal.mul(100)); } function manualburn( uint256 amount) external returns (bool){ _burn(msg.sender,amount); return true; } function updatePresaleAddress(address pre) external onlyOwner{ presale =pre; } function removeFromFee(address account) external onlyOwner{ exclude[account]=true; } function includeInFee(address account) external onlyOwner{ exclude[account]=false; } function setMaxTx(uint256 amount) external onlyOwner{ maxTxAllowed = amount*10**uint256(_decimals); } function changeMinAmount(uint256 amount) external onlyOwner{ minAmount = amount*10**uint256(_decimals); } function addToBlacklist(address account) external onlyOwner{ blackList[account]=true; } function removeFromBlackList(address account) external onlyOwner{ blackList[account]=false; } function setP2Paddress(address p2p) external onlyOwner{ P2P = p2p; } /** * @dev See {BEP20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {BEP20-allowance}. */ function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {BEP20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {BEP20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {BEP20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "trnsfr amt > alonce")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {BEP20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {BEP20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "alonce < 0")); return true; } receive() external payable{} /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "trnfr frm 0 addr"); require(recipient != address(0), "trnfr to 0 addr"); require(!blackList[sender],"you have been flagged as a bot please contact the devs"); require(!blackList[recipient],"you have been flagged as a bot please contact the devs"); uint256 tax=1; uint256 txTax; if(exclude[sender] || exclude[recipient]){ _balances[sender] = _balances[sender].sub(amount); _balances[recipient] = _balances[recipient].add(amount); } else{ require(amount<=maxTxAllowed,"amount larger than allowed"); if(sender!=address(uniswapV2Router) && sender!=address(uniswapV2Pair) && _balances[devWallet]>=threshold){ swapUSDC(); } uint256 daysSincelaunch = (block.timestamp.sub(launchTime)).div(86400); if(daysSincelaunch<10 && sender!=address(uniswapV2Pair) && sender!=address(uniswapV2Router)){ tax= 20-(daysSincelaunch.mul(2)); } _balances[sender]= _balances[sender].sub(amount); txTax = (amount.mul(tax)).div(100); amount=amount.sub(txTax); _balances[rewardsPool] = _balances[rewardsPool].add(txTax.div(2)); txTax=txTax.sub(txTax.div(2)); _balances[devWallet]=_balances[devWallet].add(txTax); _balances[recipient]=_balances[recipient].add(amount); } emit Transfer(sender, recipient, amount); emit Transfer(sender,devWallet,txTax); emit Transfer(sender,rewardsPool,txTax); } function setThreshold(uint256 amt) external onlyOwner{ amt = amt*10**uint256(_decimals); threshold = amt; } function swapUSDC() internal nonReentrant{ _balances[devWallet] = _balances[devWallet].sub(threshold); _balances[address(this)] = _balances[address(this)].add(threshold); emit Transfer(devWallet,address(this),threshold); address[] memory path = new address[](2); path[0] = address(this); path[1] = USDC; _approve(address(this), address(uniswapV2Router), threshold); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( threshold, 0, // accept any amount of USDC path, devWallet, block.timestamp ); } /************************************************************** NODE RELATED FUNCTIONS ****************************************************************/ function makeClaimNodeReward(address claimer) external nonReentrant{ //require(block.timestamp.sub(_lastClaim[claimer])>=1 days,"Can't claim more than once per day"); uint256 dayCount = (block.timestamp.sub(_lastClaim[claimer])).div(86400); if(dayCount>0){ _lastClaim[claimer]=block.timestamp; uint256 roi = nodeBalance[claimer]*10**uint256(_decimals); roi=roi.mul(dayCount); //add a multiplier of days here in the code _balances[rewardsPool] =_balances[rewardsPool].sub(roi); uint256 txTax = (roi.mul(claimTax)).div(100); uint256 toDev = (txTax.mul(10)).div(100); roi = roi.sub(txTax); txTax=txTax.sub(toDev); _balances[devWallet] =_balances[devWallet].add(toDev); txTax =txTax.sub(toDev); _balances[treasuryWallet] = _balances[treasuryWallet].add(toDev); _balances[rewardsPool] =_balances[rewardsPool].add(txTax); _balances[claimer] = _balances[claimer].add(roi); _interest[claimer] =_interest[claimer].add(roi); emit Transfer(rewardsPool,claimer,roi); emit Transfer(rewardsPool,devWallet,toDev); emit Transfer(rewardsPool,treasuryWallet,toDev); emit Transfer(address(this),rewardsPool,txTax); } } function buyNode(uint256 amount) external { require(amount.mod(100)==0,"You can buy nodes only in multiples of 100"); require(availableNodes>0,"nodes available are 0 headover to P2P"); uint256 numOfNodes = amount.div(100); uint256 cost = amount*10**uint256(_decimals); uint256 toRew= cost.div(2); _balances[msg.sender] = _balances[msg.sender].sub(cost); cost = cost.sub(toRew); _balances[rewardsPool] = _balances[rewardsPool].add(toRew); _balances[devWallet] =_balances[devWallet].add(cost); availableNodes=availableNodes.sub(numOfNodes); this.makeClaimNodeReward(msg.sender); nodeBalance[msg.sender] = nodeBalance[msg.sender].add(numOfNodes); emit Transfer(msg.sender,address(this),cost.add(toRew)); emit Transfer(address(this),rewardsPool,toRew); emit Transfer(address(this),devWallet,cost); } function confirmSaleOnP2P(address seller, address buyer ,uint256 amount) external override{ require(msg.sender==P2P,"you are not authorized to call this function"); this.makeClaimNodeReward(seller); this.makeClaimNodeReward(buyer); if(_lastClaim[buyer]==0){ _lastClaim[buyer]=block.timestamp; } nodeBalance[seller] =nodeBalance[seller].sub(amount); nodeBalance[buyer] = nodeBalance[buyer].add(amount); } /*************************************************************** NODE FUNCTION END ***************************************************************/ function pricePerToken(uint256 amount) external view returns(uint256){ IBEP20 USD = IBEP20(USDC); uint256 busdinLP = USD.balanceOf(uniswapV2Pair); uint256 tokensInLP = balanceOf(uniswapV2Pair); uint256 priceInUSD = (busdinLP.mul(10**uint256(_decimals))).div(tokensInLP); return amount.mul(priceInUSD); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal { require(account != address(0), "brn frm 0 addr"); _balances[account] = _balances[account].sub(amount, "brn amt > bal"); _balances[burnAddress] = _balances[burnAddress].add(amount); _burntamt = _burntamt.add(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "approve frm 0 add"); require(spender != address(0), "approve to 0 add"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Destroys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "brn amt > alonce")); } }
/* Code by STQC find me on https://github.com/stqc */ // SPDX-License-Identifier: Creative Commons Attribution Non Commercial Share Alike 4.0 International pragma solidity ^0.8.0; interface IBEP20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address _owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () { } function _msgSender() internal view returns (address) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public 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 { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract ReentrancyGuard { bool private _notEntered; constructor () { // Storing an initial non-zero value makes deployment a bit more // expensive, but in exchange the refund on every call to nonReentrant // will be lower in amount. Since refunds are capped to a percetange of // the total transaction's gas, it is best to keep them low in cases // like this one, to increase the likelihood of the full refund coming // into effect. _notEntered = true; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "low-lvl call fail"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "lowlvl call with val fail"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "low bal 4 call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "call 2 nocontract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract magusPresale is Context, IBEP20, Ownable, ReentrancyGuard { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping(address=>bool) private hasClaimed; mapping (address => mapping (address => uint256)) private _allowances; mapping(address=>bool) public isWhiteListed; mapping(address=>uint256) public contAMT; uint8 private _decimals; uint256 private _totalSupply; uint256 private _burntamt; string private _symbol; string private _name; address private magusContract; modifier onlyContract(){ require(msg.sender==address(magusContract),"You are not the contract"); _; } constructor() ReentrancyGuard() { _decimals = 6; _totalSupply = 0*10**uint256(_decimals); _balances[msg.sender] = _totalSupply; _name = "Magus Presale"; _symbol = "MagusPre"; emit Transfer(address(0), msg.sender, _totalSupply); } function insertMagusAdd(address con) public onlyOwner{ magusContract=con; } function addToWhiteList(address [] calldata add) external onlyOwner{ for(uint256 i=0; i<add.length; i++){ isWhiteListed[add[i]]=true; } } /** * @dev Returns the bep token owner. */ function getOwner() external view override returns (address) { return owner(); } /** * @dev Returns the token decimals. */ function decimals() external view override returns (uint8) { return _decimals; } /** * @dev Returns the token symbol. */ function symbol() external view override returns (string memory) { return _symbol; } /** * @dev Returns the token name. */ function name() external view override returns (string memory) { return _name; } /** * @dev See {BEP20-totalSupply}. */ function totalSupply() external view override returns (uint256) { return _totalSupply; } function total_burnt() external view returns(uint256){ return _burntamt; } /** * @dev See {BEP20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function totalburnt() public view returns(uint256){ return _burntamt; } function checkClaimed(address acc) public view returns(bool){ return hasClaimed[acc]; } /** * @dev See {BEP20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {BEP20-allowance}. */ function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {BEP20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {BEP20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {BEP20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "trnsfr amt > alonce")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {BEP20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {BEP20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "alonce < 0")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "trnfr frm 0 addr"); require(recipient != address(0), "trnfr to 0 addr"); _balances[sender]=_balances[sender].sub(amount); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender,recipient, amount); } function fund(uint256 amount) external nonReentrant{ require(amount>=200*10**uint256(_decimals),"Minimum contribution is $200"); require(amount<=1000*10**uint256(_decimals),"Maximum contribution is $1000"); require(contAMT[msg.sender]<=1000*10**uint256(_decimals),"can't contribute more than $1000"); require(isWhiteListed[msg.sender]==true,"You are not whitelisted"); IBEP20 USDC = IBEP20(0xc21223249CA28397B4B6541dfFaEcC539BfF0c59); // write address uint256 prevBalance=USDC.balanceOf(owner()); // USDC.approve(address(this), amount); USDC.transferFrom(msg.sender, owner(), amount); require(USDC.balanceOf(owner()).sub(prevBalance)>=amount,"Amount not successfully transfered"); _totalSupply = _totalSupply.add(amount); contAMT[msg.sender] = contAMT[msg.sender].add(amount); _balances[owner()] = _balances[owner()].add(amount); _transfer(owner(),msg.sender, amount); hasClaimed[msg.sender]=false; } function changeHasClaimed(address presaler,bool state) external onlyOwner { hasClaimed[presaler]=state; } function changeHasClaimedFromContract(address presaler) external onlyContract{ hasClaimed[presaler]=true; _balances[presaler]=0; } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "approve frm 0 add"); require(spender != address(0), "approve to 0 add"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Destroys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address account, uint256 amount) internal { // _burn(account, amount); _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "brn amt > alonce")); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_interest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addMorePresaleTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nodeOwner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdropNode","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":[],"name":"availableNodes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"changeDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"changeMinAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"changeRewardWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"changeTreasurey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkBlackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTokenAndNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedPre","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"confirmSaleOnP2P","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySaleTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedfromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"claimer","type":"address"}],"name":"makeClaimNodeReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualburn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nodeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pricePerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeePresaleTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"p2p","type":"address"}],"name":"setP2Paddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_burnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalburnt","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":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pre","type":"address"}],"name":"updatePresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405260146010819055600a9055601c80546001600160a01b031990811673c21223249ca28397b4b6541dffaecc539bff0c5917909155601d805482167396c10fc094fc95f4bd4e4f85e74f7d6deb28947d179055601e80548216738c46309d78e1e80bcefe915abbec0fb15eed085c179055601f8054821673243357d074270993b83229f49f5c2b825493c6991790556020805490911661dead179055348015620000ac57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b1916600160a01b179055600c805460ff191660069081179091556200011e90600a62000684565b6200012d906298968062000740565b600d55600c54620001439060ff16600a62000684565b6200015290620249f062000740565b601981905550600062000178601954600d546200047060201b6200201a1790919060201c565b620186a060138190556017556064601655336000908152600160209081526040918290208390558151808301909252600b8083526a4d61677573204e6f64657360a81b92909101918252919250620001d491601b91906200050b565b50604080518082019091526005808252644d4147555360d81b60209092019182526200020391601a916200050b565b50600c54620002179060ff16600a62000684565b6200022490600062000740565b601255600c546200023a9060ff16600a62000684565b62000248906103e862000740565b601155600160066000620002646000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260068452828120805486166001908117909155601d548316825283822080548716821790558454831682528382208054871682179055601e5490921681528281208054909516909117909355805163c45a015560e01b8152905173145677fc4d9b8f19b5d56d1820c48e0443049a309392849263c45a01559260048083019392829003018186803b1580156200032a57600080fd5b505afa1580156200033f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003659190620005b1565b601c546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c6539690604401602060405180830381600087803b158015620003b257600080fd5b505af1158015620003c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ed9190620005b1565b6001600160601b0319606084811b821660805282901b1660a0524260155560405190915033906000906000805160206200399283398151915290620004359087815260200190565b60405180910390a36019546040519081523090600090600080516020620039928339815191529060200160405180910390a3505050620007cf565b6000620004ba83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620004c360201b60201c565b90505b92915050565b60008184841115620004f35760405162461bcd60e51b8152600401620004ea9190620005e3565b60405180910390fd5b50600062000502848662000762565b95945050505050565b82805462000519906200077c565b90600052602060002090601f0160209004810192826200053d576000855562000588565b82601f106200055857805160ff191683800117855562000588565b8280016001018555821562000588579182015b82811115620005885782518255916020019190600101906200056b565b50620005969291506200059a565b5090565b5b808211156200059657600081556001016200059b565b600060208284031215620005c457600080fd5b81516001600160a01b0381168114620005dc57600080fd5b9392505050565b600060208083528351808285015260005b818110156200061257858101830151858201604001528201620005f4565b8181111562000625576000604083870101525b50601f01601f1916929092016040019392505050565b600181815b808511156200067c578160001904821115620006605762000660620007b9565b808516156200066e57918102915b93841c939080029062000640565b509250929050565b6000620004ba83836000826200069d57506001620004bd565b81620006ac57506000620004bd565b8160018114620006c55760028114620006d057620006f0565b6001915050620004bd565b60ff841115620006e457620006e4620007b9565b50506001821b620004bd565b5060208310610133831016604e8410600b841016171562000715575081810a620004bd565b6200072183836200063b565b8060001904821115620007385762000738620007b9565b029392505050565b60008160001904831182151516156200075d576200075d620007b9565b500290565b600082821015620007775762000777620007b9565b500390565b600181811c908216806200079157607f821691505b60208210811415620007b357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c60a05160601c61315f62000833600039600081816106ed01528181611735015281816117c60152818161239b01526124320152600081816104bb0152818161235e0152818161247001528181612ba90152612bed015261315f6000f3fe6080604052600436106103b15760003560e01c806370d5ae05116101e7578063ac6ae79e1161010d578063e4f282ad116100a0578063f1fec2b81161006f578063f1fec2b814610b58578063f2fde38b14610b6e578063f4754847146106c6578063fdea8e0b14610b8e57600080fd5b8063e4f282ad14610abf578063e8c231dc14610af8578063ea2f0b3714610b18578063edd47fe614610b3857600080fd5b8063d1cc6e3f116100dc578063d1cc6e3f14610a19578063d600ecc114610a39578063dd62ed3e14610a59578063e34ffcb814610a9f57600080fd5b8063ac6ae79e1461098c578063b8781c82146109b9578063bc337182146109d9578063bd8d8211146109f957600080fd5b80638ea5220f11610185578063a457c2d711610154578063a457c2d71461090c578063a6dee3191461092c578063a9059cbb1461094c578063abe110b61461096c57600080fd5b80638ea5220f146108a157806395d89b41146108c1578063960bfe04146108d65780639b2cb5d8146108f657600080fd5b806385b8154e116101c157806385b8154e14610843578063893d20e81461086357806389a30271146108815780638da5cb5b1461086357600080fd5b806370d5ae05146107f8578063715018a614610818578063790ca4131461082d57600080fd5b806339509351116102d7578063489c3a0a1161026a5780634d5496a8116102395780634d5496a81461074f5780635f6d54ac1461077c578063683c67dd1461079257806370a08231146107c257600080fd5b8063489c3a0a146106c657806349bd5a5e146106db5780634a49ac4c1461070f5780634bbe59041461072f57600080fd5b806342cde4e8116102a657806342cde4e81461065a57806344337ea114610670578063448883d7146106905780634626402b146106a657600080fd5b806339509351146105cd5780633b73904a146105ed5780633e7556ed1461061a578063420a7bb71461063a57600080fd5b80631d820e4f1161034f5780632d9af9211161031e5780632d9af921146105605780632fde382614610575578063313ce5671461059557806334789740146105b757600080fd5b80631d820e4f146104f2578063204401e71461050857806323b872dd1461051e57806324d01aa21461053e57600080fd5b80630a09815c1161038b5780630a09815c1461044c5780630b84a6c6146104705780631694505e146104a957806318160ddd146104dd57600080fd5b80630359fea9146103bd57806306fdde03146103fa578063095ea7b31461041c57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b50601f546103dd906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040657600080fd5b5061040f610bae565b6040516103f19190612dda565b34801561042857600080fd5b5061043c610437366004612d7e565b610c40565b60405190151581526020016103f1565b34801561045857600080fd5b5061046260195481565b6040519081526020016103f1565b34801561047c57600080fd5b5061043c61048b366004612cf4565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104b557600080fd5b506103dd7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e957600080fd5b50600d54610462565b3480156104fe57600080fd5b5061046260125481565b34801561051457600080fd5b5061046260175481565b34801561052a57600080fd5b5061043c610539366004612d42565b610c57565b34801561054a57600080fd5b5061055e610559366004612cf4565b610cf7565b005b34801561056c57600080fd5b5061055e610d4c565b34801561058157600080fd5b5061055e610590366004612cf4565b61102b565b3480156105a157600080fd5b50600c5460405160ff90911681526020016103f1565b3480156105c357600080fd5b5061046260105481565b3480156105d957600080fd5b5061043c6105e8366004612d7e565b611077565b3480156105f957600080fd5b50610462610608366004612cf4565b60026020526000908152604090205481565b34801561062657600080fd5b5061055e610635366004612cf4565b6110ad565b34801561064657600080fd5b5061055e610655366004612d42565b6110f9565b34801561066657600080fd5b5061046260185481565b34801561067c57600080fd5b5061055e61068b366004612cf4565b6112c6565b34801561069c57600080fd5b5061046260145481565b3480156106b257600080fd5b50601d546103dd906001600160a01b031681565b3480156106d257600080fd5b50600e54610462565b3480156106e757600080fd5b506103dd7f000000000000000000000000000000000000000000000000000000000000000081565b34801561071b57600080fd5b5061055e61072a366004612cf4565b611314565b34801561073b57600080fd5b5061055e61074a366004612da8565b61135f565b34801561075b57600080fd5b5061046261076a366004612cf4565b60036020526000908152604090205481565b34801561078857600080fd5b5061046260135481565b34801561079e57600080fd5b5061043c6107ad366004612cf4565b600b6020526000908152604090205460ff1681565b3480156107ce57600080fd5b506104626107dd366004612cf4565b6001600160a01b031660009081526001602052604090205490565b34801561080457600080fd5b506020546103dd906001600160a01b031681565b34801561082457600080fd5b5061055e61140a565b34801561083957600080fd5b5061046260155481565b34801561084f57600080fd5b5061043c61085e366004612da8565b61147e565b34801561086f57600080fd5b506000546001600160a01b03166103dd565b34801561088d57600080fd5b50601c546103dd906001600160a01b031681565b3480156108ad57600080fd5b50601e546103dd906001600160a01b031681565b3480156108cd57600080fd5b5061040f611492565b3480156108e257600080fd5b5061055e6108f1366004612da8565b6114a1565b34801561090257600080fd5b5061046260115481565b34801561091857600080fd5b5061043c610927366004612d7e565b6114ec565b34801561093857600080fd5b5061055e610947366004612cf4565b611556565b34801561095857600080fd5b5061043c610967366004612d7e565b6115a4565b34801561097857600080fd5b5061055e610987366004612cf4565b6115b1565b34801561099857600080fd5b506104626109a7366004612cf4565b60046020526000908152604090205481565b3480156109c557600080fd5b5061055e6109d4366004612d7e565b6115fd565b3480156109e557600080fd5b5061055e6109f4366004612da8565b611684565b348015610a0557600080fd5b5061055e610a14366004612cf4565b6116cf565b348015610a2557600080fd5b50610462610a34366004612da8565b61171b565b348015610a4557600080fd5b5061055e610a54366004612cf4565b611844565b348015610a6557600080fd5b50610462610a74366004612d0f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610aab57600080fd5b5061055e610aba366004612da8565b611bcb565b348015610acb57600080fd5b5061043c610ada366004612cf4565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610b0457600080fd5b5061055e610b13366004612da8565b611c16565b348015610b2457600080fd5b5061055e610b33366004612cf4565b611cbe565b348015610b4457600080fd5b5061055e610b53366004612da8565b611d09565b348015610b6457600080fd5b5061046260165481565b348015610b7a57600080fd5b5061055e610b89366004612cf4565b611fe4565b348015610b9a57600080fd5b506021546103dd906001600160a01b031681565b6060601b8054610bbd90613078565b80601f0160208091040260200160405190810160405280929190818152602001828054610be990613078565b8015610c365780601f10610c0b57610100808354040283529160200191610c36565b820191906000526020600020905b815481529060010190602001808311610c1957829003601f168201915b5050505050905090565b6000610c4d338484612063565b5060015b92915050565b6000610c6484848461214f565b610ced8433610ce8856040518060400160405280601381526020017274726e73667220616d74203e20616c6f6e636560681b815250600560008b6001600160a01b03166001600160a01b031681526020019081526020016000206000610cc73390565b6001600160a01b031681526020810191909152604001600020549190612698565b612063565b5060019392505050565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b8152600401610d2190612e2f565b60405180910390fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600b602052604090205460ff1615610db65760405162461bcd60e51b815260206004820152602160248201527f596f75206861766520616c7265616479206d61646520796f757220636c61696d6044820152607360f81b6064820152608401610d21565b6021546040516370a0823160e01b81523360048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b158015610dfe57600080fd5b505afa158015610e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e369190612dc1565b11610e835760405162461bcd60e51b815260206004820152601a60248201527f596f752068617665206e6f2070726573616c6520746f6b656e730000000000006044820152606401610d21565b336000818152600b6020526040808220805460ff19166001179055516370a0823160e01b81526004810192909252906001600160a01b038316906370a082319060240160206040518083038186803b158015610ede57600080fd5b505afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f169190612dc1565b9050610f238160646126d2565b90506000610f328260026126d2565b9050610f3e828261201a565b600c54909250610f5d90610f569060ff16600a612f9a565b82906126d2565b601754909150610f6d908261201a565b601755610f87610f7e836064612714565b6019549061201a565b60195533600090815260046020526040902054610fa49082612793565b33600090815260046020526040902055610fd8610fc2836064612714565b3360009081526001602052604090205490612793565b3360008181526001602090815260408083209490945560039052919091204290553060008051602061310a833981519152611014856064612714565b6040519081526020015b60405180910390a3505050565b6000546001600160a01b031633146110555760405162461bcd60e51b8152600401610d2190612e2f565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c4d918590610ce89086612793565b6000546001600160a01b031633146110d75760405162461bcd60e51b8152600401610d2190612e2f565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6022546001600160a01b031633146111685760405162461bcd60e51b815260206004820152602c60248201527f796f7520617265206e6f7420617574686f72697a656420746f2063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610d21565b60405163d600ecc160e01b81526001600160a01b0384166004820152309063d600ecc190602401600060405180830381600087803b1580156111a957600080fd5b505af11580156111bd573d6000803e3d6000fd5b505060405163d600ecc160e01b81526001600160a01b038516600482015230925063d600ecc19150602401600060405180830381600087803b15801561120257600080fd5b505af1158015611216573d6000803e3d6000fd5b505050506001600160a01b038216600090815260036020526040902054611253576001600160a01b03821660009081526003602052604090204290555b6001600160a01b038316600090815260046020526040902054611276908261201a565b6001600160a01b0380851660009081526004602052604080822093909355908416815220546112a59082612793565b6001600160a01b039092166000908152600460205260409020919091555050565b6000546001600160a01b031633146112f05760405162461bcd60e51b8152600401610d2190612e2f565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b0316331461133e5760405162461bcd60e51b8152600401610d2190612e2f565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610d2190612e2f565b600c5461139a9060ff16600a612f9a565b6113a49082613042565b336000908152600160205260409020549091506113c1908261201a565b336000908152600160205260409020556019546113de9082612793565b6019556040518181523090339060008051602061310a833981519152906020015b60405180910390a350565b6000546001600160a01b031633146114345760405162461bcd60e51b8152600401610d2190612e2f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061148a33836127f2565b506001919050565b6060601a8054610bbd90613078565b6000546001600160a01b031633146114cb5760405162461bcd60e51b8152600401610d2190612e2f565b600c546114dc9060ff16600a612f9a565b6114e69082613042565b60185550565b6000610c4d3384610ce8856040518060400160405280600a8152602001690616c6f6e6365203c20360b41b815250600560006115253390565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612698565b6000546001600160a01b031633146115805760405162461bcd60e51b8152600401610d2190612e2f565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000610c4d33848461214f565b6000546001600160a01b031633146115db5760405162461bcd60e51b8152600401610d2190612e2f565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116275760405162461bcd60e51b8152600401610d2190612e2f565b6001600160a01b038216600090815260036020908152604080832042905560049091529020546116579082612793565b6001600160a01b03831660009081526004602052604090205560175461167d908261201a565b6017555050565b6000546001600160a01b031633146116ae5760405162461bcd60e51b8152600401610d2190612e2f565b600c546116bf9060ff16600a612f9a565b6116c99082613042565b60125550565b6000546001600160a01b031633146116f95760405162461bcd60e51b8152600401610d2190612e2f565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526000921690829082906370a082319060240160206040518083038186803b15801561178557600080fd5b505afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd9190612dc1565b905060006118007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526001602052604090205490565b600c5490915060009061182e908390611828906118219060ff16600a612f9a565b8690612714565b906126d2565b905061183a8682612714565b9695505050505050565b600054600160a01b900460ff1661189d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d21565b6000805460ff60a01b191681556001600160a01b0382168152600360205260408120546118d490620151809061182890429061201a565b90508015611bb4576001600160a01b0382166000908152600360205260408120429055600c546119089060ff16600a612f9a565b6001600160a01b03841660009081526004602052604090205461192b9190613042565b90506119378183612714565b601f546001600160a01b031660009081526001602052604090205490915061195f908261201a565b601f546001600160a01b031660009081526001602052604081209190915560145461199290606490611828908590612714565b905060006119a6606461182884600a612714565b90506119b2838361201a565b92506119be828261201a565b601e546001600160a01b03166000908152600160205260409020549092506119e69082612793565b601e546001600160a01b0316600090815260016020526040902055611a0b828261201a565b601d546001600160a01b0316600090815260016020526040902054909250611a339082612793565b601d546001600160a01b0390811660009081526001602052604080822093909355601f5490911681522054611a689083612793565b601f546001600160a01b039081166000908152600160205260408082209390935590871681522054611a9a9084612793565b6001600160a01b038616600090815260016020908152604080832093909355600290522054611ac99084612793565b6001600160a01b0386811660008181526002602090815260409182902094909455601f549051878152919392169160008051602061310a833981519152910160405180910390a3601e54601f546040518381526001600160a01b03928316929091169060008051602061310a8339815191529060200160405180910390a3601d54601f546040518381526001600160a01b03928316929091169060008051602061310a8339815191529060200160405180910390a3601f546040518381526001600160a01b0390911690309060008051602061310a8339815191529060200160405180910390a35050505b50506000805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314611bf55760405162461bcd60e51b8152600401610d2190612e2f565b600c54611c069060ff16600a612f9a565b611c109082613042565b60115550565b6000546001600160a01b03163314611c405760405162461bcd60e51b8152600401610d2190612e2f565b600c54611c519060ff16600a612f9a565b611c5b9082613042565b601954909150611c6b908261201a565b60195533600090815260016020526040902054611c889082612793565b3360008181526001602052604090819020929092559051309060008051602061310a833981519152906113ff9085815260200190565b6000546001600160a01b03163314611ce85760405162461bcd60e51b8152600401610d2190612e2f565b6001600160a01b03166000908152600660205260409020805460ff19169055565b611d14816064612915565b15611d745760405162461bcd60e51b815260206004820152602a60248201527f596f752063616e20627579206e6f646573206f6e6c7920696e206d756c74697060448201526906c6573206f66203130360b41b6064820152608401610d21565b600060175411611dd45760405162461bcd60e51b815260206004820152602560248201527f6e6f64657320617661696c61626c6520617265203020686561646f766572207460448201526406f205032560dc1b6064820152608401610d21565b6000611de18260646126d2565b600c54909150600090611df89060ff16600a612f9a565b611e029084613042565b90506000611e118260026126d2565b33600090815260016020526040902054909150611e2e908361201a565b33600090815260016020526040902055611e48828261201a565b601f546001600160a01b0316600090815260016020526040902054909250611e709082612793565b601f546001600160a01b0390811660009081526001602052604080822093909355601e5490911681522054611ea59083612793565b601e546001600160a01b0316600090815260016020526040902055601754611ecd908461201a565b60175560405163d600ecc160e01b8152336004820152309063d600ecc190602401600060405180830381600087803b158015611f0857600080fd5b505af1158015611f1c573d6000803e3d6000fd5b505033600090815260046020526040902054611f3b9250905084612793565b33600081815260046020526040902091909155309060008051602061310a833981519152611f698585612793565b60405190815260200160405180910390a3601f546040518281526001600160a01b0390911690309060008051602061310a8339815191529060200160405180910390a3601e546040518381526001600160a01b0390911690309060008051602061310a8339815191529060200160405180910390a350505050565b6000546001600160a01b0316331461200e5760405162461bcd60e51b8152600401610d2190612e2f565b61201781612957565b50565b600061205c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612698565b9392505050565b6001600160a01b0383166120ad5760405162461bcd60e51b8152602060048201526011602482015270185c1c1c9bdd9948199c9b480c08185919607a1b6044820152606401610d21565b6001600160a01b0382166120f65760405162461bcd60e51b815260206004820152601060248201526f185c1c1c9bdd99481d1bc80c0818591960821b6044820152606401610d21565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161101e565b6001600160a01b0383166121985760405162461bcd60e51b815260206004820152601060248201526f3a393733391033393690181030b2323960811b6044820152606401610d21565b6001600160a01b0382166121e05760405162461bcd60e51b815260206004820152600f60248201526e3a39373339103a3790181030b2323960891b6044820152606401610d21565b6001600160a01b0383166000908152600a602052604090205460ff16156122195760405162461bcd60e51b8152600401610d2190612e64565b6001600160a01b0382166000908152600a602052604090205460ff16156122525760405162461bcd60e51b8152600401610d2190612e64565b6001600160a01b0383166000908152600660205260408120546001919060ff168061229557506001600160a01b03841660009081526006602052604090205460ff165b1561230a576001600160a01b0385166000908152600160205260409020546122bd908461201a565b6001600160a01b0380871660009081526001602052604080822093909355908616815220546122ec9084612793565b6001600160a01b0385166000908152600160205260409020556125f0565b60125483111561235c5760405162461bcd60e51b815260206004820152601a60248201527f616d6f756e74206c6172676572207468616e20616c6c6f7765640000000000006044820152606401610d21565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316141580156123d057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156123f85750601854601e546001600160a01b031660009081526001602052604090205410155b1561240557612405612a17565b6000612423620151806118286015544261201a90919063ffffffff16565b9050600a8110801561246757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b80156124a557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b156124c3576124b5816002612714565b6124c0906014613061565b92505b6001600160a01b0386166000908152600160205260409020546124e6908561201a565b6001600160a01b03871660009081526001602052604090205561250e60646118288686612714565b915061251a848361201a565b935061254b61252a8360026126d2565b601f546001600160a01b031660009081526001602052604090205490612793565b601f546001600160a01b031660009081526001602052604090205561257b6125748360026126d2565b839061201a565b601e546001600160a01b03166000908152600160205260409020549092506125a39083612793565b601e546001600160a01b0390811660009081526001602052604080822093909355908716815220546125d59085612793565b6001600160a01b038616600090815260016020526040902055505b836001600160a01b0316856001600160a01b031660008051602061310a8339815191528560405161262391815260200190565b60405180910390a3601e546040518281526001600160a01b039182169187169060008051602061310a8339815191529060200160405180910390a3601f546040518281526001600160a01b039182169187169060008051602061310a8339815191529060200160405180910390a35050505050565b600081848411156126bc5760405162461bcd60e51b8152600401610d219190612dda565b5060006126c98486613061565b95945050505050565b600061205c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c76565b60008261272357506000610c51565b600061272f8385613042565b90508261273c8583612f43565b1461205c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d21565b6000806127a08385612f2b565b90508381101561205c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d21565b6001600160a01b0382166128395760405162461bcd60e51b815260206004820152600e60248201526d3139371033393690181030b2323960911b6044820152606401610d21565b604080518082018252600d81526c189c9b88185b5d080f8818985b609a1b6020808301919091526001600160a01b038516600090815260019091529190912054612884918390612698565b6001600160a01b0380841660009081526001602090815260408083209490945554909116815220546128b69082612793565b602080546001600160a01b0316600090815260019091526040902055600e546128df9082612793565b600e556040518181526000906001600160a01b0384169060008051602061310a8339815191529060200160405180910390a35050565b600061205c83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612ca4565b6001600160a01b0381166129bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d21565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff16612a705760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d21565b6000805460ff60a01b19168155601854601e546001600160a01b031682526001602052604090912054612aa29161201a565b601e546001600160a01b03166000908152600160205260408082209290925560185430825291902054612ad491612793565b3060008181526001602090815260409182902093909355601e54601854915191825291926001600160a01b039092169160008051602061310a833981519152910160405180910390a36040805160028082526060820183526000926020830190803683370190505090503081600081518110612b5257612b526130f3565b6001600160a01b039283166020918202929092010152601c54825191169082906001908110612b8357612b836130f3565b60200260200101906001600160a01b031690816001600160a01b031681525050612bd0307f0000000000000000000000000000000000000000000000000000000000000000601854612063565b601854601e54604051635c11d79560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693635c11d79593612c2e9391926000928892909116904290600401612eba565b600060405180830381600087803b158015612c4857600080fd5b505af1158015612c5c573d6000803e3d6000fd5b50506000805460ff60a01b1916600160a01b179055505050565b60008183612c975760405162461bcd60e51b8152600401610d219190612dda565b5060006126c98486612f43565b60008183612cc55760405162461bcd60e51b8152600401610d219190612dda565b50612cd083856130b3565b949350505050565b80356001600160a01b0381168114612cef57600080fd5b919050565b600060208284031215612d0657600080fd5b61205c82612cd8565b60008060408385031215612d2257600080fd5b612d2b83612cd8565b9150612d3960208401612cd8565b90509250929050565b600080600060608486031215612d5757600080fd5b612d6084612cd8565b9250612d6e60208501612cd8565b9150604084013590509250925092565b60008060408385031215612d9157600080fd5b612d9a83612cd8565b946020939093013593505050565b600060208284031215612dba57600080fd5b5035919050565b600060208284031215612dd357600080fd5b5051919050565b600060208083528351808285015260005b81811015612e0757858101830151858201604001528201612deb565b81811115612e19576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526036908201527f796f752068617665206265656e20666c6167676564206173206120626f7420706040820152756c6561736520636f6e7461637420746865206465767360501b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f0a5784516001600160a01b031683529383019391830191600101612ee5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f3e57612f3e6130c7565b500190565b600082612f5257612f526130dd565b500490565b600181815b80851115612f92578160001904821115612f7857612f786130c7565b80851615612f8557918102915b93841c9390800290612f5c565b509250929050565b600061205c8383600082612fb057506001610c51565b81612fbd57506000610c51565b8160018114612fd35760028114612fdd57612ff9565b6001915050610c51565b60ff841115612fee57612fee6130c7565b50506001821b610c51565b5060208310610133831016604e8410600b841016171561301c575081810a610c51565b6130268383612f57565b806000190482111561303a5761303a6130c7565b029392505050565b600081600019048311821515161561305c5761305c6130c7565b500290565b600082821015613073576130736130c7565b500390565b600181811c9082168061308c57607f821691505b602082108114156130ad57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826130c2576130c26130dd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202bc84d5d21b64eadbe07eb4bae41aebff837675397b64a82d876f2f2efb99be364736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
Deployed ByteCode Sourcemap
8529:18395:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10005:70;;;;;;;;;;-1:-1:-1;10005:70:1;;;;-1:-1:-1;;;;;10005:70:1;;;;;;-1:-1:-1;;;;;1778:32:2;;;1760:51;;1748:2;1733:18;10005:70:1;;;;;;;;11988:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16506:153::-;;;;;;;;;;-1:-1:-1;16506:153:1;;;;;:::i;:::-;;:::i;:::-;;;1987:14:2;;1980:22;1962:41;;1950:2;1935:18;16506:153:1;1822:187:2;9653:28:1;;;;;;;;;;;;;;;;;;;9371:25:2;;;9359:2;9344:18;9653:28:1;9225:177:2;12919:113:1;;;;;;;;;;-1:-1:-1;12919:113:1;;;;;:::i;:::-;-1:-1:-1;;;;;13008:16:1;12985:4;13008:16;;;:7;:16;;;;;;;;;12919:113;10221:51;;;;;;;;;;;;;;;12132:96;;;;;;;;;;-1:-1:-1;12210:12:1;;12132:96;;9436:27;;;;;;;;;;;;;;;;9590:29;;;;;;;;;;;;;;;;17108:280;;;;;;;;;;-1:-1:-1;17108:280:1;;;;;:::i;:::-;;:::i;12720:95::-;;;;;;;;;;-1:-1:-1;12720:95:1;;;;;:::i;:::-;;:::i;:::-;;13960:842;;;;;;;;;;;;;:::i;14952:96::-;;;;;;;;;;-1:-1:-1;14952:96:1;;;;;:::i;:::-;;:::i;11694:88::-;;;;;;;;;;-1:-1:-1;11767:9:1;;11694:88;;11767:9;;;;10534:36:2;;10522:2;10507:18;11694:88:1;10392:184:2;9369:32:1;;;;;;;;;;;;;;;;17770:200;;;;;;;;;;-1:-1:-1;17770:200:1;;;;;:::i;:::-;;:::i;8731:45::-;;;;;;;;;;-1:-1:-1;8731:45:1;;;;;:::i;:::-;;;;;;;;;;;;;;15750:80;;;;;;;;;;-1:-1:-1;15750:80:1;;;;;:::i;:::-;;:::i;24152:469::-;;;;;;;;;;-1:-1:-1;24152:469:1;;;;;:::i;:::-;;:::i;9624:24::-;;;;;;;;;;;;;;;;15530:101;;;;;;;;;;-1:-1:-1;15530:101:1;;;;;:::i;:::-;;:::i;9500:26::-;;;;;;;;;;;;;;;;9827:73;;;;;;;;;;-1:-1:-1;9827:73:1;;;;-1:-1:-1;;;;;9827:73:1;;;12824:83;;;;;;;;;;-1:-1:-1;12891:9:1;;12824:83;;10277:38;;;;;;;;;;;;;;;15637:107;;;;;;;;;;-1:-1:-1;15637:107:1;;;;;:::i;:::-;;:::i;13395:274::-;;;;;;;;;;-1:-1:-1;13395:274:1;;;;;:::i;:::-;;:::i;8781:46::-;;;;;;;;;;-1:-1:-1;8781:46:1;;;;;:::i;:::-;;;;;;;;;;;;;;9468:25;;;;;;;;;;;;;;;;9192:40;;;;;;;;;;-1:-1:-1;9192:40:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;12384:122;;;;;;;;;;-1:-1:-1;12384:122:1;;;;;:::i;:::-;-1:-1:-1;;;;;12475:18:1;12450:7;12475:18;;;:9;:18;;;;;;;12384:122;10080:71;;;;;;;;;;-1:-1:-1;10080:71:1;;;;-1:-1:-1;;;;;10080:71:1;;;10744:130:0;;;;;;;;;;;;;:::i;9531:25:1:-;;;;;;;;;;;;;;;;14812:126;;;;;;;;;;-1:-1:-1;14812:126:1;;;;;:::i;:::-;;:::i;11547:88::-;;;;;;;;;;-1:-1:-1;11599:7:1;10203:6:0;-1:-1:-1;;;;;10203:6:0;11547:88:1;;9746:63;;;;;;;;;;-1:-1:-1;9746:63:1;;;;-1:-1:-1;;;;;9746:63:1;;;9921:68;;;;;;;;;;-1:-1:-1;9921:68:1;;;;-1:-1:-1;;;;;9921:68:1;;;11843:92;;;;;;;;;;;;;:::i;21024:120::-;;;;;;;;;;-1:-1:-1;21024:120:1;;;;;:::i;:::-;;:::i;9407:24::-;;;;;;;;;;;;;;;;18442:224;;;;;;;;;;-1:-1:-1;18442:224:1;;;;;:::i;:::-;;:::i;15056:98::-;;;;;;;;;;-1:-1:-1;15056:98:1;;;;;:::i;:::-;;:::i;16024:159::-;;;;;;;;;;-1:-1:-1;16024:159:1;;;;;:::i;:::-;;:::i;12619:95::-;;;;;;;;;;-1:-1:-1;12619:95:1;;;;;:::i;:::-;;:::i;8832:44::-;;;;;;;;;;-1:-1:-1;8832:44:1;;;;;:::i;:::-;;;;;;;;;;;;;;13150:237;;;;;;;;;;-1:-1:-1;13150:237:1;;;;;:::i;:::-;;:::i;15272:115::-;;;;;;;;;;-1:-1:-1;15272:115:1;;;;;:::i;:::-;;:::i;12519:90::-;;;;;;;;;;-1:-1:-1;12519:90:1;;;;;:::i;:::-;;:::i;24826:353::-;;;;;;;;;;-1:-1:-1;24826:353:1;;;;;:::i;:::-;;:::i;22028:1229::-;;;;;;;;;;-1:-1:-1;22028:1229:1;;;;;:::i;:::-;;:::i;16237:139::-;;;;;;;;;;-1:-1:-1;16237:139:1;;;;;:::i;:::-;-1:-1:-1;;;;;16343:18:1;;;16320:7;16343:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16237:139;15395:119;;;;;;;;;;-1:-1:-1;15395:119:1;;;;;:::i;:::-;;:::i;13038:107::-;;;;;;;;;;-1:-1:-1;13038:107:1;;;;;:::i;:::-;-1:-1:-1;;;;;13122:18:1;13102:4;13122:18;;;:9;:18;;;;;;;;;13038:107;13673:276;;;;;;;;;;-1:-1:-1;13673:276:1;;;;;:::i;:::-;;:::i;15166:98::-;;;;;;;;;;-1:-1:-1;15166:98:1;;;;;:::i;:::-;;:::i;23264:874::-;;;;;;;;;;-1:-1:-1;23264:874:1;;;;;:::i;:::-;;:::i;9561:24::-;;;;;;;;;;;;;;;;11019:103:0;;;;;;;;;;-1:-1:-1;11019:103:0;;;;;:::i;:::-;;:::i;10170:22:1:-;;;;;;;;;;-1:-1:-1;10170:22:1;;;;-1:-1:-1;;;;;10170:22:1;;;11988:88;12036:13;12065:5;12058:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11988:88;:::o;16506:153::-;16583:4;16596:39;3924:10:0;16619:7:1;16628:6;16596:8;:39::i;:::-;-1:-1:-1;16649:4:1;16506:153;;;;;:::o;17108:280::-;17208:4;17221:36;17231:6;17239:9;17250:6;17221:9;:36::i;:::-;17264:100;17273:6;3924:10:0;17295:68:1;17333:6;17295:68;;;;;;;;;;;;;-1:-1:-1;;;17295:68:1;;;:11;:19;17307:6;-1:-1:-1;;;;;17295:19:1;-1:-1:-1;;;;;17295:19:1;;;;;;;;;;;;:33;17315:12;3924:10:0;;3856:84;17315:12:1;-1:-1:-1;;;;;17295:33:1;;;;;;;;;;;;-1:-1:-1;17295:33:1;;;:68;:37;:68::i;:::-;17264:8;:100::i;:::-;-1:-1:-1;17378:4:1;17108:280;;;;;:::o;12720:95::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;;;;;;;;;12787:14:1::1;:20:::0;;-1:-1:-1;;;;;;12787:20:1::1;-1:-1:-1::0;;;;;12787:20:1;;;::::1;::::0;;;::::1;::::0;;12720:95::o;13960:842::-;14024:10;14013:22;;;;:10;:22;;;;;;;;14012:23;14004:68;;;;-1:-1:-1;;;14004:68:1;;5325:2:2;14004:68:1;;;5307:21:2;5364:2;5344:18;;;5337:30;5403:34;5383:18;;;5376:62;-1:-1:-1;;;5454:18:2;;;5447:31;5495:19;;14004:68:1;5123:397:2;14004:68:1;14116:7;;14139:30;;-1:-1:-1;;;14139:30:1;;14158:10;14139:30;;;1760:51:2;-1:-1:-1;;;;;14116:7:1;;;;14079:21;;14116:7;;14139:18;;1733::2;;14139:30:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;14131:70;;;;-1:-1:-1;;;14131:70:1;;6082:2:2;14131:70:1;;;6064:21:2;6121:2;6101:18;;;6094:30;6160:28;6140:18;;;6133:56;6206:18;;14131:70:1;5880:350:2;14131:70:1;14219:10;14208:22;;;;:10;:22;;;;;;:27;;-1:-1:-1;;14208:27:1;14231:4;14208:27;;;14256:30;-1:-1:-1;;;14256:30:1;;;;;1760:51:2;;;;14208:22:1;-1:-1:-1;;;;;14256:18:1;;;;;1733::2;;14256:30:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14242:44;-1:-1:-1;14299:12:1;14242:44;14307:3;14299:7;:12::i;:::-;14293:18;-1:-1:-1;14318:18:1;14339:10;14293:18;14347:1;14339:7;:10::i;:::-;14318:31;-1:-1:-1;14362:19:1;:3;14318:31;14362:7;:19::i;:::-;14428:9;;14356:25;;-1:-1:-1;14401:38:1;;14416:22;;14428:9;;14416:2;:22;:::i;:::-;14401:10;;:14;:38::i;:::-;14463:14;;14388:51;;-1:-1:-1;14463:30:1;;14388:51;14463:18;:30::i;:::-;14446:14;:47;14515:31;14533:12;:3;14541;14533:7;:12::i;:::-;14515:13;;;:17;:31::i;:::-;14500:13;:46;14591:10;14579:23;;;;:11;:23;;;;;;:39;;14607:10;14579:27;:39::i;:::-;14565:10;14553:23;;;;:11;:23;;;;;:65;14649:39;14675:12;:3;14683;14675:7;:12::i;:::-;14659:10;14649:21;;;;:9;:21;;;;;;;:25;:39::i;:::-;14635:10;14625:21;;;;:9;:21;;;;;;;;:63;;;;14695:10;:22;;;;;;14720:15;14695:40;;14766:4;-1:-1:-1;;;;;;;;;;;14783:12:1;:3;14791;14783:7;:12::i;:::-;14749:47;;9371:25:2;;;9359:2;9344:18;14749:47:1;;;;;;;;13997:805;;;13960:842::o;14952:96::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;15028:7:1::1;:12:::0;;-1:-1:-1;;;;;;15028:12:1::1;-1:-1:-1::0;;;;;15028:12:1;;;::::1;::::0;;;::::1;::::0;;14952:96::o;17770:200::-;3924:10:0;17850:4:1;17895:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17895:34:1;;;;;;;;;;17850:4;;17863:83;;17886:7;;17895:50;;17934:10;17895:38;:50::i;15750:80::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;15813:3:1::1;:9:::0;;-1:-1:-1;;;;;;15813:9:1::1;-1:-1:-1::0;;;;;15813:9:1;;;::::1;::::0;;;::::1;::::0;;15750:80::o;24152:469::-;24271:3;;-1:-1:-1;;;;;24271:3:1;24259:10;:15;24251:71;;;;-1:-1:-1;;;24251:71:1;;4912:2:2;24251:71:1;;;4894:21:2;4951:2;4931:18;;;4924:30;4990:34;4970:18;;;4963:62;-1:-1:-1;;;5041:18:2;;;5034:42;5093:19;;24251:71:1;4710:408:2;24251:71:1;24331:32;;-1:-1:-1;;;24331:32:1;;-1:-1:-1;;;;;1778:32:2;;24331::1;;;1760:51:2;24331:4:1;;:24;;1733:18:2;;24331:32:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24372:31:1;;-1:-1:-1;;;24372:31:1;;-1:-1:-1;;;;;1778:32:2;;24372:31:1;;;1760:51:2;24372:4:1;;-1:-1:-1;24372:24:1;;-1:-1:-1;1733:18:2;;24372:31:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;24415:17:1;;;;;;:10;:17;;;;;;24412:80;;-1:-1:-1;;;;;24449:17:1;;;;;;:10;:17;;;;;24467:15;24449:33;;24412:80;-1:-1:-1;;;;;24521:19:1;;;;;;:11;:19;;;;;;:31;;24545:6;24521:23;:31::i;:::-;-1:-1:-1;;;;;24500:19:1;;;;;;;:11;:19;;;;;;:52;;;;24582:18;;;;;;;:30;;24605:6;24582:22;:30::i;:::-;-1:-1:-1;;;;;24561:18:1;;;;;;;:11;:18;;;;;:51;;;;-1:-1:-1;;24152:469:1:o;15530:101::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15600:18:1::1;;::::0;;;:9:::1;:18;::::0;;;;:23;;-1:-1:-1;;15600:23:1::1;15619:4;15600:23;::::0;;15530:101::o;15637:107::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15712:18:1::1;15731:5;15712:18:::0;;;:9:::1;:18;::::0;;;;:24;;-1:-1:-1;;15712:24:1::1;::::0;;15637:107::o;13395:274::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;13492:9:1::1;::::0;13480:22:::1;::::0;13492:9:::1;;13480:2;:22;:::i;:::-;13473:29;::::0;:6;:29:::1;:::i;:::-;13541:10;13531:21;::::0;;;:9:::1;:21;::::0;;;;;13466:36;;-1:-1:-1;13531:33:1::1;::::0;13466:36;13531:25:::1;:33::i;:::-;13519:10;13509:21;::::0;;;:9:::1;:21;::::0;;;;:55;13585:13:::1;::::0;:25:::1;::::0;13603:6;13585:17:::1;:25::i;:::-;13571:13;:39:::0;13622:41:::1;::::0;9371:25:2;;;13650:4:1::1;::::0;13631:10:::1;::::0;-1:-1:-1;;;;;;;;;;;13622:41:1;9359:2:2;9344:18;13622:41:1::1;;;;;;;;13395:274:::0;:::o;10744:130:0:-;10336:6;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;10839:1:::1;10823:6:::0;;10802:40:::1;::::0;-1:-1:-1;;;;;10823:6:0;;::::1;::::0;10802:40:::1;::::0;10839:1;;10802:40:::1;10866:1;10849:19:::0;;-1:-1:-1;;;;;;10849:19:0::1;::::0;;10744:130::o;14812:126:1:-;14868:4;14884:24;14890:10;14901:6;14884:5;:24::i;:::-;-1:-1:-1;14926:4:1;;14812:126;-1:-1:-1;14812:126:1:o;11843:92::-;11893:13;11922:7;11915:14;;;;;:::i;21024:120::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;21106:9:1::1;::::0;21094:22:::1;::::0;21106:9:::1;;21094:2;:22;:::i;:::-;21090:26;::::0;:3;:26:::1;:::i;:::-;21123:9;:15:::0;-1:-1:-1;21024:120:1:o;18442:224::-;18527:4;18540:102;3924:10:0;18563:7:1;18572:69;18611:15;18572:69;;;;;;;;;;;;;-1:-1:-1;;;18572:69:1;;;:11;:25;18584:12;3924:10:0;;3856:84;18584:12:1;-1:-1:-1;;;;;18572:25:1;;;;;;;;;;;;;;;;;-1:-1:-1;18572:25:1;;;:34;;;;;;;;;;;:69;:38;:69::i;15056:98::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15125:16:1::1;;::::0;;;:7:::1;:16;::::0;;;;:21;;-1:-1:-1;;15125:21:1::1;15142:4;15125:21;::::0;;15056:98::o;16024:159::-;16104:4;16117:42;3924:10:0;16141:9:1;16152:6;16117:9;:42::i;12619:95::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;12689:11:1::1;:17:::0;;-1:-1:-1;;;;;;12689:17:1::1;-1:-1:-1::0;;;;;12689:17:1;;;::::1;::::0;;;::::1;::::0;;12619:95::o;13150:237::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13231:21:1;::::1;;::::0;;;:10:::1;:21;::::0;;;;;;;13253:15:::1;13231:37:::0;;13300:11:::1;:22:::0;;;;;;:34:::1;::::0;13327:6;13300:26:::1;:34::i;:::-;-1:-1:-1::0;;;;;13275:22:1;::::1;;::::0;;;:11:::1;:22;::::0;;;;:59;13356:14:::1;::::0;:26:::1;::::0;13375:6;13356:18:::1;:26::i;:::-;13341:14;:41:::0;-1:-1:-1;;13150:237:1:o;15272:115::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;15369:9:1::1;::::0;15357:22:::1;::::0;15369:9:::1;;15357:2;:22;:::i;:::-;15350:29;::::0;:6;:29:::1;:::i;:::-;15335:12;:44:::0;-1:-1:-1;15272:115:1:o;12519:90::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;12586:9:1::1;:15:::0;;-1:-1:-1;;;;;;12586:15:1::1;-1:-1:-1::0;;;;;12586:15:1;;;::::1;::::0;;;::::1;::::0;;12519:90::o;24826:353::-;24926:4;;24961:28;;-1:-1:-1;;;24961:28:1;;-1:-1:-1;;;;;24975:13:1;1778:32:2;;24961:28:1;;;1760:51:2;-1:-1:-1;;24926:4:1;;-1:-1:-1;;24926:4:1;;24961:13;;1733:18:2;;24961:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24942:47;;25000:18;25021:24;25031:13;-1:-1:-1;;;;;12475:18:1;12450:7;12475:18;;;:9;:18;;;;;;;12384:122;25021:24;25103:9;;25000:45;;-1:-1:-1;25056:18:1;;25077:54;;25000:45;;25078:36;;25091:22;;25103:9;;25091:2;:22;:::i;:::-;25078:8;;:12;:36::i;:::-;25077:42;;:54::i;:::-;25056:75;-1:-1:-1;25149:22:1;:6;25056:75;25149:10;:22::i;:::-;25142:29;24826:353;-1:-1:-1;;;;;;24826:353:1:o;22028:1229::-;12480:11:0;;-1:-1:-1;;;12480:11:0;;;;12472:55;;;;-1:-1:-1;;;12472:55:0;;8722:2:2;12472:55:0;;;8704:21:2;8761:2;8741:18;;;8734:30;8800:33;8780:18;;;8773:61;8851:18;;12472:55:0;8520:355:2;12472:55:0;12619:5;12605:19;;-1:-1:-1;;;;12605:19:0;;;-1:-1:-1;;;;;22245:19:1;::::1;::::0;;:10:::1;:19;::::0;;;;;22224:53:::1;::::0;22271:5:::1;::::0;22225:40:::1;::::0;:15:::1;::::0;:19:::1;:40::i;22224:53::-;22205:72:::0;-1:-1:-1;22287:10:1;;22284:956:::1;;-1:-1:-1::0;;;;;22305:19:1;::::1;;::::0;;;:10:::1;:19;::::0;;;;22325:15:::1;22305:35:::0;;22394:9:::1;::::0;22382:22:::1;::::0;22394:9:::1;;22382:2;:22;:::i;:::-;-1:-1:-1::0;;;;;22361:20:1;::::1;;::::0;;;:11:::1;:20;::::0;;;;;:43:::1;::::0;;::::1;:::i;:::-;22347:57:::0;-1:-1:-1;22415:17:1::1;22347:57:::0;22423:8;22415:7:::1;:17::i;:::-;22522:11;::::0;-1:-1:-1;;;;;22522:11:1::1;22512:22;::::0;;;:9:::1;:22;::::0;;;;;22411:21;;-1:-1:-1;22512:31:1::1;::::0;22411:21;22512:26:::1;:31::i;:::-;22498:11;::::0;-1:-1:-1;;;;;22498:11:1::1;22488:22;::::0;;;:9:::1;:22;::::0;;;;:55;;;;22575:8:::1;::::0;22566:28:::1;::::0;22590:3:::1;::::0;22567:17:::1;::::0;:3;;:7:::1;:17::i;22566:28::-;22550:44:::0;-1:-1:-1;22601:13:1::1;22617:24;22637:3;22618:13;22550:44:::0;22628:2:::1;22618:9;:13::i;22617:24::-;22601:40:::0;-1:-1:-1;22654:14:1::1;:3:::0;22662:5;22654:7:::1;:14::i;:::-;22648:20:::0;-1:-1:-1;22681:16:1::1;:5:::0;22691;22681:9:::1;:16::i;:::-;22736:9;::::0;-1:-1:-1;;;;;22736:9:1::1;22726:20;::::0;;;:9:::1;:20;::::0;;;;;22675:22;;-1:-1:-1;22726:31:1::1;::::0;22751:5;22726:24:::1;:31::i;:::-;22714:9;::::0;-1:-1:-1;;;;;22714:9:1::1;22704:20;::::0;;;:9:::1;:20;::::0;;;;:53;22771:16:::1;:5:::0;22781;22771:9:::1;:16::i;:::-;22832:14;::::0;-1:-1:-1;;;;;22832:14:1::1;22822:25;::::0;;;:9:::1;:25;::::0;;;;;22764:23;;-1:-1:-1;22822:36:1::1;::::0;22852:5;22822:29:::1;:36::i;:::-;22804:14;::::0;-1:-1:-1;;;;;22804:14:1;;::::1;22794:25;::::0;;;:9:::1;:25;::::0;;;;;:64;;;;22899:11:::1;::::0;;;::::1;22889:22:::0;;;;:33:::1;::::0;22916:5;22889:26:::1;:33::i;:::-;22875:11;::::0;-1:-1:-1;;;;;22875:11:1;;::::1;22865:22;::::0;;;:9:::1;:22;::::0;;;;;:57;;;;22950:18;;::::1;::::0;;;;:27:::1;::::0;22973:3;22950:22:::1;:27::i;:::-;-1:-1:-1::0;;;;;22929:18:1;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;:48;;;;23004:9:::1;:18:::0;;;;:27:::1;::::0;23027:3;23004:22:::1;:27::i;:::-;-1:-1:-1::0;;;;;22984:18:1;;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;;:47;;;;23052:11:::1;::::0;23043:33;;9371:25:2;;;22984:18:1;;23052:11;::::1;::::0;-1:-1:-1;;;;;;;;;;;23043:33:1;9344:18:2;23043:33:1::1;;;;;;;23109:9;::::0;23097:11:::1;::::0;23088:37:::1;::::0;9371:25:2;;;-1:-1:-1;;;;;23109:9:1;;::::1;::::0;23097:11;;::::1;::::0;-1:-1:-1;;;;;;;;;;;23088:37:1;9359:2:2;9344:18;23088:37:1::1;;;;;;;23158:14;::::0;23146:11:::1;::::0;23137:42:::1;::::0;9371:25:2;;;-1:-1:-1;;;;;23158:14:1;;::::1;::::0;23146:11;;::::1;::::0;-1:-1:-1;;;;;;;;;;;23137:42:1;9359:2:2;9344:18;23137:42:1::1;;;;;;;23214:11;::::0;23191:41:::1;::::0;9371:25:2;;;-1:-1:-1;;;;;23214:11:1;;::::1;::::0;23208:4:::1;::::0;-1:-1:-1;;;;;;;;;;;23191:41:1;9359:2:2;9344:18;23191:41:1::1;;;;;;;22298:942;;;22284:956;-1:-1:-1::0;;12785:11:0;:18;;-1:-1:-1;;;;12785:18:0;-1:-1:-1;;;12785:18:0;;;22028:1229:1:o;15395:119::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;15496:9:1::1;::::0;15484:22:::1;::::0;15496:9:::1;;15484:2;:22;:::i;:::-;15477:29;::::0;:6;:29:::1;:::i;:::-;15465:9;:41:::0;-1:-1:-1;15395:119:1:o;13673:276::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;13770:9:1::1;::::0;13758:22:::1;::::0;13770:9:::1;;13758:2;:22;:::i;:::-;13751:29;::::0;:6;:29:::1;:::i;:::-;13801:13;::::0;13744:36;;-1:-1:-1;13801:25:1::1;::::0;13744:36;13801:17:::1;:25::i;:::-;13787:13;:39:::0;13867:10:::1;13857:21;::::0;;;:9:::1;:21;::::0;;;;;:33:::1;::::0;13883:6;13857:25:::1;:33::i;:::-;13843:10;13833:21;::::0;;;:9:::1;:21;::::0;;;;;;:57;;;;13902:41;;13919:4:::1;::::0;-1:-1:-1;;;;;;;;;;;13902:41:1;::::1;::::0;13936:6;9371:25:2;;9359:2;9344:18;;9225:177;15166:98:1;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15234:16:1::1;15251:5;15234:16:::0;;;:7:::1;:16;::::0;;;;:22;;-1:-1:-1;;15234:22:1::1;::::0;;15166:98::o;23264:874::-;23322:15;:6;23333:3;23322:10;:15::i;:::-;:18;23314:72;;;;-1:-1:-1;;;23314:72:1;;6839:2:2;23314:72:1;;;6821:21:2;6878:2;6858:18;;;6851:30;6917:34;6897:18;;;6890:62;-1:-1:-1;;;6968:18:2;;;6961:40;7018:19;;23314:72:1;6637:406:2;23314:72:1;23416:1;23401:14;;:16;23393:65;;;;-1:-1:-1;;;23393:65:1;;3397:2:2;23393:65:1;;;3379:21:2;3436:2;3416:18;;;3409:30;3475:34;3455:18;;;3448:62;-1:-1:-1;;;3526:18:2;;;3519:35;3571:19;;23393:65:1;3195:401:2;23393:65:1;23465:18;23486:15;:6;23497:3;23486:10;:15::i;:::-;23542:9;;23465:36;;-1:-1:-1;23508:12:1;;23530:22;;23542:9;;23530:2;:22;:::i;:::-;23523:29;;:6;:29;:::i;:::-;23508:44;-1:-1:-1;23559:13:1;23574:11;23508:44;23583:1;23574:8;:11::i;:::-;23626:10;23616:21;;;;:9;:21;;;;;;23559:26;;-1:-1:-1;23616:31:1;;23642:4;23616:25;:31::i;:::-;23602:10;23592:21;;;;:9;:21;;;;;:55;23661:15;:4;23670:5;23661:8;:15::i;:::-;23718:11;;-1:-1:-1;;;;;23718:11:1;23708:22;;;;:9;:22;;;;;;23654;;-1:-1:-1;23708:33:1;;23735:5;23708:26;:33::i;:::-;23693:11;;-1:-1:-1;;;;;23693:11:1;;;23683:22;;;;:9;:22;;;;;;:58;;;;23780:9;;;;;23770:20;;;;:30;;23795:4;23770:24;:30::i;:::-;23758:9;;-1:-1:-1;;;;;23758:9:1;23748:20;;;;:9;:20;;;;;:52;23822:14;;:30;;23841:10;23822:18;:30::i;:::-;23807:14;:45;23859:36;;-1:-1:-1;;;23859:36:1;;23884:10;23859:36;;;1760:51:2;23859:4:1;;:24;;1733:18:2;;23859:36:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23940:10:1;23928:23;;;;:11;:23;;;;;;:39;;-1:-1:-1;23928:23:1;-1:-1:-1;23956:10:1;23928:27;:39::i;:::-;23914:10;23902:23;;;;:11;:23;;;;;:65;;;;24007:4;;-1:-1:-1;;;;;;;;;;;24013:15:1;:4;24022:5;24013:8;:15::i;:::-;23979:50;;9371:25:2;;;9359:2;9344:18;23979:50:1;;;;;;;24064:11;;24041:41;;9371:25:2;;;-1:-1:-1;;;;;24064:11:1;;;;24058:4;;-1:-1:-1;;;;;;;;;;;24041:41:1;9359:2:2;9344:18;24041:41:1;;;;;;;24117:9;;24094:38;;9371:25:2;;;-1:-1:-1;;;;;24117:9:1;;;;24111:4;;-1:-1:-1;;;;;;;;;;;24094:38:1;9359:2:2;9344:18;24094:38:1;;;;;;;23306:832;;;23264:874;:::o;11019:103:0:-;10336:6;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;11088:28:::1;11107:8;11088:18;:28::i;:::-;11019:103:::0;:::o;5402:130::-;5460:7;5483:43;5487:1;5490;5483:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5476:50;5402:130;-1:-1:-1;;;5402:130:0:o;26264:283:1:-;-1:-1:-1;;;;;26354:19:1;;26346:49;;;;-1:-1:-1;;;26346:49:1;;4566:2:2;26346:49:1;;;4548:21:2;4605:2;4585:18;;;4578:30;-1:-1:-1;;;4624:18:2;;;4617:47;4681:18;;26346:49:1;4364:341:2;26346:49:1;-1:-1:-1;;;;;26410:21:1;;26402:50;;;;-1:-1:-1;;;26402:50:1;;9082:2:2;26402:50:1;;;9064:21:2;9121:2;9101:18;;;9094:30;-1:-1:-1;;;9140:18:2;;;9133:46;9196:18;;26402:50:1;8880:340:2;26402:50:1;-1:-1:-1;;;;;26461:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26509:32;;9371:25:2;;;26509:32:1;;9344:18:2;26509:32:1;9225:177:2;19163:1857:1;-1:-1:-1;;;;;19257:20:1;;19249:49;;;;-1:-1:-1;;;19249:49:1;;8034:2:2;19249:49:1;;;8016:21:2;8073:2;8053:18;;;8046:30;-1:-1:-1;;;8092:18:2;;;8085:46;8148:18;;19249:49:1;7832:340:2;19249:49:1;-1:-1:-1;;;;;19313:23:1;;19305:51;;;;-1:-1:-1;;;19305:51:1;;3053:2:2;19305:51:1;;;3035:21:2;3092:2;3072:18;;;3065:30;-1:-1:-1;;;3111:18:2;;;3104:45;3166:18;;19305:51:1;2851:339:2;19305:51:1;-1:-1:-1;;;;;19372:17:1;;;;;;:9;:17;;;;;;;;19371:18;19363:84;;;;-1:-1:-1;;;19363:84:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;19463:20:1;;;;;;:9;:20;;;;;;;;19462:21;19454:87;;;;-1:-1:-1;;;19454:87:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;19613:15:1;;19562:11;19613:15;;;:7;:15;;;;;;19574:1;;19562:11;19613:15;;;:37;;-1:-1:-1;;;;;;19632:18:1;;;;;;:7;:18;;;;;;;;19613:37;19610:1244;;;-1:-1:-1;;;;;19695:17:1;;;;;;:9;:17;;;;;;:29;;19717:6;19695:21;:29::i;:::-;-1:-1:-1;;;;;19675:17:1;;;;;;;:9;:17;;;;;;:49;;;;19777:20;;;;;;;:32;;19802:6;19777:24;:32::i;:::-;-1:-1:-1;;;;;19754:20:1;;;;;;:9;:20;;;;;:55;19610:1244;;;19886:12;;19878:6;:20;;19870:58;;;;-1:-1:-1;;;19870:58:1;;5727:2:2;19870:58:1;;;5709:21:2;5766:2;5746:18;;;5739:30;5805:28;5785:18;;;5778:56;5851:18;;19870:58:1;5525:350:2;19870:58:1;19966:15;-1:-1:-1;;;;;19950:32:1;:6;-1:-1:-1;;;;;19950:32:1;;;:66;;;;;20002:13;-1:-1:-1;;;;;19986:30:1;:6;-1:-1:-1;;;;;19986:30:1;;;19950:66;:101;;;;-1:-1:-1;20042:9:1;;20030;;-1:-1:-1;;;;;20030:9:1;20020:20;;;;:9;:20;;;;;;:31;;19950:101;19947:158;;;20075:10;:8;:10::i;:::-;20125:23;20151:44;20189:5;20152:31;20172:10;;20152:15;:19;;:31;;;;:::i;20151:44::-;20125:70;;20235:2;20219:15;:18;:52;;;;;20257:13;-1:-1:-1;;;;;20241:30:1;:6;-1:-1:-1;;;;;20241:30:1;;;20219:52;:88;;;;;20291:15;-1:-1:-1;;;;;20275:32:1;:6;-1:-1:-1;;;;;20275:32:1;;;20219:88;20216:171;;;20342:22;:15;20362:1;20342:19;:22::i;:::-;20338:27;;:2;:27;:::i;:::-;20333:32;;20216:171;-1:-1:-1;;;;;20428:17:1;;;;;;:9;:17;;;;;;:29;;20450:6;20428:21;:29::i;:::-;-1:-1:-1;;;;;20409:17:1;;;;;;:9;:17;;;;;:48;20487:26;20509:3;20488:15;:6;20499:3;20488:10;:15::i;20487:26::-;20479:34;-1:-1:-1;20541:17:1;:6;20479:34;20541:10;:17::i;:::-;20534:24;-1:-1:-1;20604:40:1;20631:12;:5;20641:1;20631:9;:12::i;:::-;20614:11;;-1:-1:-1;;;;;20614:11:1;20604:22;;;;:9;:22;;;;;;;:26;:40::i;:::-;20589:11;;-1:-1:-1;;;;;20589:11:1;20579:22;;;;:9;:22;;;;;:65;20671:23;20681:12;:5;20691:1;20681:9;:12::i;:::-;20671:5;;:9;:23::i;:::-;20746:9;;-1:-1:-1;;;;;20746:9:1;20736:20;;;;:9;:20;;;;;;20665:29;;-1:-1:-1;20736:31:1;;20665:29;20736:24;:31::i;:::-;20725:9;;-1:-1:-1;;;;;20725:9:1;;;20715:20;;;;:9;:20;;;;;;:52;;;;20809:20;;;;;;;:32;;20834:6;20809:24;:32::i;:::-;-1:-1:-1;;;;;20788:20:1;;;;;;:9;:20;;;;;:53;-1:-1:-1;19610:1244:1;20900:9;-1:-1:-1;;;;;20883:35:1;20892:6;-1:-1:-1;;;;;20883:35:1;-1:-1:-1;;;;;;;;;;;20911:6:1;20883:35;;;;9371:25:2;;9359:2;9344:18;;9225:177;20883:35:1;;;;;;;;20946:9;;20930:32;;9371:25:2;;;-1:-1:-1;;;;;20946:9:1;;;;20930:32;;;-1:-1:-1;;;;;;;;;;;20930:32:1;9359:2:2;9344:18;20930:32:1;;;;;;;20990:11;;20974:34;;9371:25:2;;;-1:-1:-1;;;;;20990:11:1;;;;20974:34;;;-1:-1:-1;;;;;;;;;;;20974:34:1;9359:2:2;9344:18;20974:34:1;;;;;;;19242:1778;;19163:1857;;;:::o;5807:178:0:-;5893:7;5925:12;5917:6;;;;5909:29;;;;-1:-1:-1;;;5909:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5945:9:0;5957:5;5961:1;5957;:5;:::i;:::-;5945:17;5807:178;-1:-1:-1;;;;;5807:178:0:o;7091:126::-;7149:7;7172:39;7176:1;7179;7172:39;;;;;;;;;;;;;;;;;:3;:39::i;6216:431::-;6274:7;6503:6;6499:37;;-1:-1:-1;6527:1:0;6520:8;;6499:37;6544:9;6556:5;6560:1;6556;:5;:::i;:::-;6544:17;-1:-1:-1;6585:1:0;6576:5;6580:1;6544:17;6576:5;:::i;:::-;:10;6568:56;;;;-1:-1:-1;;;6568:56:0;;6437:2:2;6568:56:0;;;6419:21:2;6476:2;6456:18;;;6449:30;6515:34;6495:18;;;6488:62;-1:-1:-1;;;6566:18:2;;;6559:31;6607:19;;6568:56:0;6235:397:2;4980:167:0;5038:7;;5066:5;5070:1;5066;:5;:::i;:::-;5054:17;;5091:1;5086;:6;;5078:46;;;;-1:-1:-1;;;5078:46:0;;4210:2:2;5078:46:0;;;4192:21:2;4249:2;4229:18;;;4222:30;4288:29;4268:18;;;4261:57;4335:18;;5078:46:0;4008:351:2;25497:350:1;-1:-1:-1;;;;;25569:21:1;;25561:48;;;;-1:-1:-1;;;25561:48:1;;8379:2:2;25561:48:1;;;8361:21:2;8418:2;8398:18;;;8391:30;-1:-1:-1;;;8437:18:2;;;8430:44;8491:18;;25561:48:1;8177:338:2;25561:48:1;25639:47;;;;;;;;;;;-1:-1:-1;;;25639:47:1;;;;;;;;-1:-1:-1;;;;;25639:18:1;;-1:-1:-1;25639:18:1;;;:9;:18;;;;;;;;:47;;25662:6;;25639:22;:47::i;:::-;-1:-1:-1;;;;;25618:18:1;;;;;;;:9;:18;;;;;;;;:68;;;;25728:11;;;;25718:22;;;;:34;;25745:6;25718:26;:34::i;:::-;25703:11;;;-1:-1:-1;;;;;25703:11:1;25693:22;;;;:9;:22;;;;;;:59;25771:9;;:21;;25785:6;25771:13;:21::i;:::-;25759:9;:33;25804:37;;9371:25:2;;;25830:1:1;;-1:-1:-1;;;;;25804:37:1;;;-1:-1:-1;;;;;;;;;;;25804:37:1;9359:2:2;9344:18;25804:37:1;;;;;;;25497:350;;:::o;8437:124:0:-;8495:7;8518:37;8522:1;8525;8518:37;;;;;;;;;;;;;;;;;:3;:37::i;11220:215::-;-1:-1:-1;;;;;11290:22:0;;11282:73;;;;-1:-1:-1;;;11282:73:0;;3803:2:2;11282:73:0;;;3785:21:2;3842:2;3822:18;;;3815:30;3881:34;3861:18;;;3854:62;-1:-1:-1;;;3932:18:2;;;3925:36;3978:19;;11282:73:0;3601:402:2;11282:73:0;11388:6;;;11367:38;;-1:-1:-1;;;;;11367:38:0;;;;11388:6;;;11367:38;;;11412:6;:17;;-1:-1:-1;;;;;;11412:17:0;-1:-1:-1;;;;;11412:17:0;;;;;;;;;;11220:215::o;21148:690:1:-;12480:11:0;;-1:-1:-1;;;12480:11:0;;;;12472:55;;;;-1:-1:-1;;;12472:55:0;;8722:2:2;12472:55:0;;;8704:21:2;8761:2;8741:18;;;8734:30;8800:33;8780:18;;;8773:61;8851:18;;12472:55:0;8520:355:2;12472:55:0;12619:5;12605:19;;-1:-1:-1;;;;12605:19:0;;;21245:9:1::1;::::0;21230::::1;::::0;-1:-1:-1;;;;;21230:9:1::1;21220:20:::0;;12605:19:0;21220:20:1::1;::::0;;;;;;:35:::1;::::0;:24:::1;:35::i;:::-;21207:9;::::0;-1:-1:-1;;;;;21207:9:1::1;21197:20;::::0;;;:9:::1;:20;::::0;;;;;:58;;;;21318:9:::1;::::0;21307:4:::1;21289:24:::0;;;;;;:39:::1;::::0;:28:::1;:39::i;:::-;21280:4;21262:24;::::0;;;:9:::1;:24;::::0;;;;;;;;:66;;;;21351:9:::1;::::0;21375::::1;::::0;21342:43;;9371:25:2;;;21280:4:1;;-1:-1:-1;;;;;21351:9:1;;::::1;::::0;-1:-1:-1;;;;;;;;;;;21342:43:1;9344:18:2;21342:43:1::1;;;;;;;21418:16;::::0;;21432:1:::1;21418:16:::0;;;;;::::1;::::0;;21394:21:::1;::::0;21418:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21418:16:1::1;21394:40;;21463:4;21445;21450:1;21445:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21445:23:1;;::::1;:7;::::0;;::::1;::::0;;;;;:23;21489:4:::1;::::0;21479:7;;21489:4;::::1;::::0;21479;;21489;;21479:7;::::1;;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;21479:14:1::1;;;-1:-1:-1::0;;;;;21479:14:1::1;;;::::0;::::1;21505:60;21522:4;21537:15;21555:9;;21505:8;:60::i;:::-;21692:9;::::0;21780::::1;::::0;21608:222:::1;::::0;-1:-1:-1;;;21608:222:1;;-1:-1:-1;;;;;21608:15:1::1;:69:::0;::::1;::::0;::::1;::::0;:222:::1;::::0;21692:9;;21716:1:::1;::::0;21761:4;;21780:9;;::::1;::::0;21804:15:::1;::::0;21608:222:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;12785:11:0;:18;;-1:-1:-1;;;;12785:18:0;-1:-1:-1;;;12785:18:0;;;-1:-1:-1;;;21148:690:1:o;7681:323:0:-;7767:7;7861:12;7854:5;7846:28;;;;-1:-1:-1;;;7846:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7881:9:0;7893:5;7897:1;7893;:5;:::i;9014:156::-;9100:7;9132:12;9124:6;9116:29;;;;-1:-1:-1;;;9116:29:0;;;;;;;;:::i;:::-;-1:-1:-1;9159:5:0;9163:1;9159;:5;:::i;:::-;9152:12;9014:156;-1:-1:-1;;;;9014:156:0:o;14:173:2:-;82:20;;-1:-1:-1;;;;;131:31:2;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:52;;;1126:1;1123;1116:12;1078:52;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;981:254:2:o;1240:180::-;1299:6;1352:2;1340:9;1331:7;1327:23;1323:32;1320:52;;;1368:1;1365;1358:12;1320:52;-1:-1:-1;1391:23:2;;1240:180;-1:-1:-1;1240:180:2:o;1425:184::-;1495:6;1548:2;1536:9;1527:7;1523:23;1519:32;1516:52;;;1564:1;1561;1554:12;1516:52;-1:-1:-1;1587:16:2;;1425:184;-1:-1:-1;1425:184:2:o;2249:597::-;2361:4;2390:2;2419;2408:9;2401:21;2451:6;2445:13;2494:6;2489:2;2478:9;2474:18;2467:34;2519:1;2529:140;2543:6;2540:1;2537:13;2529:140;;;2638:14;;;2634:23;;2628:30;2604:17;;;2623:2;2600:26;2593:66;2558:10;;2529:140;;;2687:6;2684:1;2681:13;2678:91;;;2757:1;2752:2;2743:6;2732:9;2728:22;2724:31;2717:42;2678:91;-1:-1:-1;2830:2:2;2809:15;-1:-1:-1;;2805:29:2;2790:45;;;;2837:2;2786:54;;2249:597;-1:-1:-1;;;2249:597:2:o;7048:356::-;7250:2;7232:21;;;7269:18;;;7262:30;7328:34;7323:2;7308:18;;7301:62;7395:2;7380:18;;7048:356::o;7409:418::-;7611:2;7593:21;;;7650:2;7630:18;;;7623:30;7689:34;7684:2;7669:18;;7662:62;-1:-1:-1;;;7755:2:2;7740:18;;7733:52;7817:3;7802:19;;7409:418::o;9407:980::-;9669:4;9717:3;9706:9;9702:19;9748:6;9737:9;9730:25;9774:2;9812:6;9807:2;9796:9;9792:18;9785:34;9855:3;9850:2;9839:9;9835:18;9828:31;9879:6;9914;9908:13;9945:6;9937;9930:22;9983:3;9972:9;9968:19;9961:26;;10022:2;10014:6;10010:15;9996:29;;10043:1;10053:195;10067:6;10064:1;10061:13;10053:195;;;10132:13;;-1:-1:-1;;;;;10128:39:2;10116:52;;10223:15;;;;10188:12;;;;10164:1;10082:9;10053:195;;;-1:-1:-1;;;;;;;10304:32:2;;;;10299:2;10284:18;;10277:60;-1:-1:-1;;;10368:3:2;10353:19;10346:35;10265:3;9407:980;-1:-1:-1;;;9407:980:2:o;10581:128::-;10621:3;10652:1;10648:6;10645:1;10642:13;10639:39;;;10658:18;;:::i;:::-;-1:-1:-1;10694:9:2;;10581:128::o;10714:120::-;10754:1;10780;10770:35;;10785:18;;:::i;:::-;-1:-1:-1;10819:9:2;;10714:120::o;10839:422::-;10928:1;10971:5;10928:1;10985:270;11006:7;10996:8;10993:21;10985:270;;;11065:4;11061:1;11057:6;11053:17;11047:4;11044:27;11041:53;;;11074:18;;:::i;:::-;11124:7;11114:8;11110:22;11107:55;;;11144:16;;;;11107:55;11223:22;;;;11183:15;;;;10985:270;;;10989:3;10839:422;;;;;:::o;11266:131::-;11326:5;11355:36;11382:8;11376:4;11451:5;11481:8;11471:80;;-1:-1:-1;11522:1:2;11536:5;;11471:80;11570:4;11560:76;;-1:-1:-1;11607:1:2;11621:5;;11560:76;11652:4;11670:1;11665:59;;;;11738:1;11733:130;;;;11645:218;;11665:59;11695:1;11686:10;;11709:5;;;11733:130;11770:3;11760:8;11757:17;11754:43;;;11777:18;;:::i;:::-;-1:-1:-1;;11833:1:2;11819:16;;11848:5;;11645:218;;11947:2;11937:8;11934:16;11928:3;11922:4;11919:13;11915:36;11909:2;11899:8;11896:16;11891:2;11885:4;11882:12;11878:35;11875:77;11872:159;;;-1:-1:-1;11984:19:2;;;12016:5;;11872:159;12063:34;12088:8;12082:4;12063:34;:::i;:::-;12133:6;12129:1;12125:6;12121:19;12112:7;12109:32;12106:58;;;12144:18;;:::i;:::-;12182:20;;11402:806;-1:-1:-1;;;11402:806:2:o;12213:168::-;12253:7;12319:1;12315;12311:6;12307:14;12304:1;12301:21;12296:1;12289:9;12282:17;12278:45;12275:71;;;12326:18;;:::i;:::-;-1:-1:-1;12366:9:2;;12213:168::o;12386:125::-;12426:4;12454:1;12451;12448:8;12445:34;;;12459:18;;:::i;:::-;-1:-1:-1;12496:9:2;;12386:125::o;12516:380::-;12595:1;12591:12;;;;12638;;;12659:61;;12713:4;12705:6;12701:17;12691:27;;12659:61;12766:2;12758:6;12755:14;12735:18;12732:38;12729:161;;;12812:10;12807:3;12803:20;12800:1;12793:31;12847:4;12844:1;12837:15;12875:4;12872:1;12865:15;12729:161;;12516:380;;;:::o;12901:112::-;12933:1;12959;12949:35;;12964:18;;:::i;:::-;-1:-1:-1;12998:9:2;;12901:112::o;13018:127::-;13079:10;13074:3;13070:20;13067:1;13060:31;13110:4;13107:1;13100:15;13134:4;13131:1;13124:15;13150:127;13211:10;13206:3;13202:20;13199:1;13192:31;13242:4;13239:1;13232:15;13266:4;13263:1;13256:15;13282:127;13343:10;13338:3;13334:20;13331:1;13324:31;13374:4;13371:1;13364:15;13398:4;13395:1;13388:15
Swarm Source
ipfs://2bc84d5d21b64eadbe07eb4bae41aebff837675397b64a82d876f2f2efb99be3