More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
Contract Name:
BRNx
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } abstract contract Ownable is Context { address private _owner; error OwnableUnauthorizedAccount(address account); error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } abstract contract ReentrancyGuard { uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface IERC20Errors { error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); error ERC20InvalidSender(address sender); error ERC20InvalidReceiver(address receiver); error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); error ERC20InvalidApprover(address approver); error ERC20InvalidSpender(address spender); } abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 18; } function totalSupply() public view virtual returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } interface IV3SwapRouter { struct ExactInputSingleParams { address tokenIn; address tokenOut; address recipient; uint256 amountIn; uint256 amountOutMinimum; uint160 limitSqrtPrice; } function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut); } interface INonfungiblePositionManager { function createAndInitializePoolIfNecessary( address token0, address token1, uint160 sqrtPriceX96 ) external payable returns (address pool); struct MintParams { address token0; address token1; int24 tickLower; int24 tickUpper; uint256 amount0Desired; uint256 amount1Desired; uint256 amount0Min; uint256 amount1Min; address recipient; uint256 deadline; } function mint(MintParams calldata params) external payable returns ( uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1 ); } contract BRNx is ERC20, Ownable, ReentrancyGuard { // CONSTANT VARIABLES IV3SwapRouter public constant SWAP_ROUTER = IV3SwapRouter(0xA047e2AbF8263FcA7c368F43e2f960A06FD9949f); INonfungiblePositionManager public constant NONFUNGIBLE_POSITION_MANAGER = INonfungiblePositionManager(0xd82Fe82244ad01AaD671576202F9b46b76fAdFE2); address public constant TOKEN_PAIR_ADDRESS = 0xA04BC7140c26fc9BB1F36B1A604C7A5a88fb0E70; //SWPx uint16 public constant BUY_FEES = 600; //6% uint16 public constant BURN_SHARE = 400; //4% uint16 public constant TREASURY_SHARE = 175; //1.75% uint16 public constant CALLER_SHARE = 25; //0.25% address private constant DEAD_ADDRESS = address(0xdead); // OTHER VARIABLES bool private swapping; address public treasuryWallet; address public devWallet; address public algebraV3Pair; uint256 public minimumBalanceBB; uint40 public cooldownPeriodBB; bool private limitsInEffect; uint256 private maxW; // MAPPINGS mapping(address => bool) public isExcludedFromFees; mapping(address => bool) public automatedMarketMakerPairs; mapping(address => uint256) public lastBBCalledTime; // DEVWALLET CHANGE TIMELOCK VARIABLES struct DevWalletChange { address newDevWallet; uint256 effectiveTime; bool pending; } DevWalletChange public pendingDevWalletChange; uint256 public constant DEV_WALLET_TIMELOCK = 2 days; event ChangeDevWallet(address indexed newDevWallet, address oldDevWallet); // TREASURYWALLET CHANGE TIMELOCK VARIABLES struct TreasuryWalletChange { address newTreasuryWallet; uint256 effectiveTime; bool pending; } TreasuryWalletChange public pendingTreasuryWalletChange; uint256 public constant TREASURY_WALLET_TIMELOCK = 1 days; event ChangeTreasuryWallet(address indexed newTreasuryWallet, address oldTreasuryWallet); // EVENTS event ExcludeFromFees(address indexed account, bool isExcluded); event ChangeAutomatedMarketMakerPairs(address indexed automatedMarketMakerPairs, bool isAutomatedMarketMakerPairs); event ChangeMinimumBalanceBB(uint256 newMinimumBalanceBB, uint256 oldMinimumBalanceBB); event ChangeCooldownPeriodBB(uint40 newCooldownPeriodBB, uint40 oldCooldownPeriodBB); event BuyAndBurn(address indexed caller, uint256 amountToBurn, uint256 amountToTreasury, uint256 amountToCaller); // MODIFIERS modifier onlyDev() { require(msg.sender == devWallet, "Only the dev can run this function"); _; } constructor( ) ERC20("BurnX", "BRNx") Ownable(msg.sender) { devWallet = msg.sender; treasuryWallet = 0xF7f259F157481365ba2Eee1B692D29C876180fE2; minimumBalanceBB = 1000 * 10**18; // 1000 BRNx cooldownPeriodBB = 8 hours; uint256 _totalSupply = 50_000_000 * 10**18; // 50M BRNx maxW = _totalSupply * 2 / 100; limitsInEffect = true; // exclude from paying fees isExcludedFromFees[address(this)] = true; isExcludedFromFees[DEAD_ADDRESS] = true; isExcludedFromFees[address(NONFUNGIBLE_POSITION_MANAGER)] = true; isExcludedFromFees[treasuryWallet] = true; _mint(address(this), _totalSupply); } // OWNER FUNCTIONS function mintAndRenounce(uint160 _sqrtPriceX96, int24 _tickLower, int24 _tickUpper) public onlyOwner { address token0; address token1; uint256 amount0Desired; uint256 amount1Desired; // create a new pair and initialize at a certain price if (address(this) < TOKEN_PAIR_ADDRESS) { algebraV3Pair = NONFUNGIBLE_POSITION_MANAGER.createAndInitializePoolIfNecessary(address(this), TOKEN_PAIR_ADDRESS, _sqrtPriceX96); token0 = address(this); token1 = TOKEN_PAIR_ADDRESS; amount0Desired = balanceOf(address(this)); amount1Desired = 0; } else { algebraV3Pair = NONFUNGIBLE_POSITION_MANAGER.createAndInitializePoolIfNecessary(TOKEN_PAIR_ADDRESS, address(this), _sqrtPriceX96); token0 = TOKEN_PAIR_ADDRESS; token1 = address(this); amount0Desired = 0; amount1Desired = balanceOf(address(this)); } automatedMarketMakerPairs[algebraV3Pair] = true; //addLP automatically _approve(address(this), address(NONFUNGIBLE_POSITION_MANAGER), balanceOf(address(this))); // build the params to mint INonfungiblePositionManager.MintParams memory params; params = INonfungiblePositionManager.MintParams({ token0: token0, token1: token1, tickLower: _tickLower, tickUpper: _tickUpper, amount0Desired: amount0Desired, amount1Desired: amount1Desired, amount0Min: 0, amount1Min: 0, recipient: devWallet, deadline: block.timestamp }); // mint the position NONFUNGIBLE_POSITION_MANAGER.mint(params); // renounce ownership renounceOwnership(); } // DEV FUNCTIONS -> can be run by the dev after renounce in order to manage the project even after the contract is renounced function removeLimits() public onlyDev { require(limitsInEffect, "Limits were removed already"); limitsInEffect = false; // it's gonna call the buyAndBurn function first and send the caller's share to the treasury _buyAndBurn(treasuryWallet); } function excludeFromFees(address _account, bool _excluded) public onlyDev nonReentrant { require(!automatedMarketMakerPairs[_account], "Pool addresses cannot be excluded from fees!"); isExcludedFromFees[_account] = _excluded; emit ExcludeFromFees(_account, _excluded); } function changeAutomatedMarketMakerPairs(address _automatedMarketMakerPairs, bool _isAutomatedMarketMakerPairs) public onlyDev nonReentrant { require(_automatedMarketMakerPairs != address(0), "Automated Market Maker Pair must be a valid address"); require(_automatedMarketMakerPairs != algebraV3Pair, "Can't remove algebraV3Pair from the Automated Market Maker Pairs!"); automatedMarketMakerPairs[_automatedMarketMakerPairs] = _isAutomatedMarketMakerPairs; emit ChangeAutomatedMarketMakerPairs(_automatedMarketMakerPairs, _isAutomatedMarketMakerPairs); } function changeMinimumBalanceBB(uint256 _newMinimumBalanceBB) public onlyDev nonReentrant { require(_newMinimumBalanceBB > 1 * 10**18, "Cannot set the minimumBalanceBB to lower than 1 BRNx"); uint256 oldMinimumBalanceBB = minimumBalanceBB; minimumBalanceBB = _newMinimumBalanceBB; emit ChangeMinimumBalanceBB(_newMinimumBalanceBB, oldMinimumBalanceBB); } function changeCooldownPeriodBB(uint40 _newCooldownPeriodBB) public onlyDev nonReentrant { require( _newCooldownPeriodBB >= 1 minutes && _newCooldownPeriodBB <= 24 hours, "cooldownPeriodBB must be between 1 minute and 24 hours" ); uint40 oldCooldownPeriodBB = cooldownPeriodBB; cooldownPeriodBB = _newCooldownPeriodBB; emit ChangeCooldownPeriodBB(_newCooldownPeriodBB, oldCooldownPeriodBB); } // DEVWALLET CHANGE -> will be subject to a timelock as a measure of security function initiateDevWalletChange(address _newDevWallet) public onlyDev nonReentrant { require(_newDevWallet != address(0), "New Dev Wallet must be a valid address"); require(!pendingDevWalletChange.pending, "Dev Wallet change already pending"); pendingDevWalletChange = DevWalletChange({ newDevWallet: _newDevWallet, effectiveTime: block.timestamp + DEV_WALLET_TIMELOCK, pending: true }); } function executeDevWalletChange() public onlyDev nonReentrant { require(pendingDevWalletChange.pending, "No Dev Wallet change pending"); require(block.timestamp >= pendingDevWalletChange.effectiveTime, "Timelock not expired"); address oldDevWallet = devWallet; devWallet = pendingDevWalletChange.newDevWallet; // Reset the pending change pendingDevWalletChange.pending = false; emit ChangeDevWallet(pendingDevWalletChange.newDevWallet, oldDevWallet); } function cancelDevWalletChange() public onlyDev nonReentrant { require(pendingDevWalletChange.pending, "No Dev Wallet change pending"); pendingDevWalletChange.pending = false; } // TREASURYWALLET CHANGE -> will be subject to a timelock as a measure of security function initiateTreasuryWalletChange(address _newTreasuryWallet) public onlyDev nonReentrant { require(_newTreasuryWallet != address(0), "New Treasury Wallet must be a valid address"); require(!pendingTreasuryWalletChange.pending, "Treasury Wallet change already pending"); pendingTreasuryWalletChange = TreasuryWalletChange({ newTreasuryWallet: _newTreasuryWallet, effectiveTime: block.timestamp + TREASURY_WALLET_TIMELOCK, pending: true }); } function executeTreasuryWalletChange() public onlyDev nonReentrant { require(pendingTreasuryWalletChange.pending, "No Treasury Wallet change pending"); require(block.timestamp >= pendingTreasuryWalletChange.effectiveTime, "Timelock not expired"); address oldTreasuryWallet = treasuryWallet; treasuryWallet = pendingTreasuryWalletChange.newTreasuryWallet; // Reset the pending change pendingTreasuryWalletChange.pending = false; emit ChangeTreasuryWallet(pendingTreasuryWalletChange.newTreasuryWallet, oldTreasuryWallet); } function cancelTreasuryWalletChange() public onlyDev nonReentrant { require(pendingTreasuryWalletChange.pending, "No Treasury Wallet change pending"); pendingTreasuryWalletChange.pending = false; } // PRIVATE FUNCTIONS function _tokenTransfer(address from, address to, uint256 amount) private { if ( amount == 0 || isExcludedFromFees[from] || isExcludedFromFees[to] || (_isEOA(from) && _isEOA(to)) || swapping ) { _transfer(from, to, amount); return; } //when buy, charge tax if (automatedMarketMakerPairs[from]) { //apply an anti-snipe limit if (limitsInEffect) { require(amount + balanceOf(to) <= maxW, "Max wallet exceeded"); } // calculate the fees and send them to this address uint256 fees = amount * BUY_FEES / 10000; amount -= fees; _transfer(from, address(this), fees); } //when sell, do nothing and continue as normal else if (automatedMarketMakerPairs[to]) {} //can't be done else { revert("Can't buy, sell or add LP on another pool"); } //in the end, it'll make the swap of the tokens as requested _transfer(from, to, amount); } function _swapTokensForTokens(uint256 tokenAmount) private { // generate the algebra pair path of token -> TOKEN_PAIR_ADDRESS address tokenIn = address(this); address tokenOut = address(TOKEN_PAIR_ADDRESS); _approve(address(this), address(SWAP_ROUTER), tokenAmount); // build the params to swap IV3SwapRouter.ExactInputSingleParams memory params = IV3SwapRouter.ExactInputSingleParams({ tokenIn: tokenIn, tokenOut: tokenOut, recipient: address(this), amountIn: tokenAmount, amountOutMinimum: 0, limitSqrtPrice: 0 }); // make the swap SWAP_ROUTER.exactInputSingle(params); } function _buyAndBurn(address caller) private { // make sure there's something to swap and that it follows the rules uint256 contractBalance = balanceOf(address(this)); require(contractBalance >= minimumBalanceBB, "Can only call the buyAndBurn function when BRNx balance of the contract is over the minimumBalanceBB"); require( block.timestamp >= lastBBCalledTime[caller] + cooldownPeriodBB, "Can only call the buyAndBurn function after the cooldownPeriodBB is over" ); // update last called time lastBBCalledTime[caller] = block.timestamp; // swap the tokens to the TOKEN_PAIR_ADDRESS swapping = true; _swapTokensForTokens(contractBalance); swapping = false; // calculate amounts IERC20 token = IERC20(TOKEN_PAIR_ADDRESS); uint256 tokenContractBalance = token.balanceOf(address(this)); uint256 amountToBurn = tokenContractBalance * BURN_SHARE / BUY_FEES; uint256 amountToTreasury = tokenContractBalance * TREASURY_SHARE / BUY_FEES; uint256 amountToCaller = tokenContractBalance - amountToBurn - amountToTreasury; //remaining balance goes to the caller // distribute amounts token.transfer(DEAD_ADDRESS, amountToBurn); //burn token.transfer(treasuryWallet, amountToTreasury); //treasury token.transfer(caller, amountToCaller); //caller emit BuyAndBurn(caller, amountToBurn, amountToTreasury, amountToCaller); } function _isEOA(address contractAddress) private view returns (bool) { uint256 size; assembly { size := extcodesize(contractAddress) } return size == 0; } // PUBLIC FUNCTIONS function transfer(address to, uint256 value) public virtual override returns (bool) { address owner = _msgSender(); _tokenTransfer(owner, to, value); return true; } function transferFrom(address from, address to, uint256 value) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _tokenTransfer(from, to, value); return true; } // COMMUNITY FUNCTIONS function buyAndBurn() external { require(!limitsInEffect, "Can't call buyAndBurn while limits are in effect"); _buyAndBurn(msg.sender); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "viaIR": true, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris" }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"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":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountToBurn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToTreasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToCaller","type":"uint256"}],"name":"BuyAndBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"automatedMarketMakerPairs","type":"address"},{"indexed":false,"internalType":"bool","name":"isAutomatedMarketMakerPairs","type":"bool"}],"name":"ChangeAutomatedMarketMakerPairs","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint40","name":"newCooldownPeriodBB","type":"uint40"},{"indexed":false,"internalType":"uint40","name":"oldCooldownPeriodBB","type":"uint40"}],"name":"ChangeCooldownPeriodBB","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newDevWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldDevWallet","type":"address"}],"name":"ChangeDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinimumBalanceBB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMinimumBalanceBB","type":"uint256"}],"name":"ChangeMinimumBalanceBB","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newTreasuryWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldTreasuryWallet","type":"address"}],"name":"ChangeTreasuryWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"BURN_SHARE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUY_FEES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_SHARE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEV_WALLET_TIMELOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NONFUNGIBLE_POSITION_MANAGER","outputs":[{"internalType":"contract INonfungiblePositionManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_ROUTER","outputs":[{"internalType":"contract IV3SwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_PAIR_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_SHARE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_WALLET_TIMELOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"algebraV3Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAndBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelDevWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelTreasuryWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_automatedMarketMakerPairs","type":"address"},{"internalType":"bool","name":"_isAutomatedMarketMakerPairs","type":"bool"}],"name":"changeAutomatedMarketMakerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint40","name":"_newCooldownPeriodBB","type":"uint40"}],"name":"changeCooldownPeriodBB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMinimumBalanceBB","type":"uint256"}],"name":"changeMinimumBalanceBB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownPeriodBB","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeDevWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeTreasuryWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDevWallet","type":"address"}],"name":"initiateDevWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newTreasuryWallet","type":"address"}],"name":"initiateTreasuryWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBBCalledTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBalanceBB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint160","name":"_sqrtPriceX96","type":"uint160"},{"internalType":"int24","name":"_tickLower","type":"int24"},{"internalType":"int24","name":"_tickUpper","type":"int24"}],"name":"mintAndRenounce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDevWalletChange","outputs":[{"internalType":"address","name":"newDevWallet","type":"address"},{"internalType":"uint256","name":"effectiveTime","type":"uint256"},{"internalType":"bool","name":"pending","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingTreasuryWalletChange","outputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"},{"internalType":"uint256","name":"effectiveTime","type":"uint256"},{"internalType":"bool","name":"pending","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"}]
Contract Creation Code
608034620004fd576040906001600160401b039080830182811182821017620004e7578352600580825260209164084eae4dcb60db1b8382015284519385850185811082821117620004e757865260049485815263084a49cf60e31b858201528251828111620004d2576003918254916001958684811c94168015620004c7575b89851014620004b2578190601f948581116200045e575b508990858311600114620003f757600092620003eb575b505060001982861b1c191690861b1783555b8051938411620003d65787548581811c91168015620003cb575b88821014620003b65790818386959493116200035e575b5087918411600114620002f357600093620002e7575b505082841b92600019911b1c19161784555b3315620002d05781546001600160a01b0319808216339081179094558651936001600160a01b03939284167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3816006553390600854161760085574f7f259f157481365ba2eee1b692d29c876180fe200610100600160a81b03196007541617600755683635c9adc5dea00000600a5565010000007080600b5469d3c21bcecceda1000000600c5565ffffffffffff191617600b5530600052600d8452856000209160ff1992828482541617905561dead60005286600020828482541617905573d82fe82244ad01aad671576202f9b46b76fadfe260005286600020828482541617905560075460081c1660005285600020918254161790553015620002bb57506002546a295be96e6406697200000092838201809211620002a657506000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9160025530835282815284832084815401905584519384523093a3516124059081620005038239f35b601190634e487b7160e01b6000525260246000fd5b63ec442f0560e01b8152600083820152602490fd5b8451631e4fbdf760e01b8152600081860152602490fd5b01519150388062000107565b9190859450601f1984169289600052886000209360005b8a8282106200034757505085116200032c575b50505050811b01845562000119565b01519060f884600019921b161c19169055388080806200031d565b83850151875589989096019593840193016200030a565b9091929350886000528760002083808701891c8201928a8810620003ac575b918891889796959493018a1c01915b8281106200039c575050620000f1565b600081558796508891016200038c565b925081926200037d565b602289634e487b7160e01b6000525260246000fd5b90607f1690620000da565b604188634e487b7160e01b6000525260246000fd5b015190503880620000ae565b90889350601f19831691876000528b6000209260005b8d8282106200044757505084116200042e575b505050811b018355620000c0565b015160001983881b60f8161c1916905538808062000420565b8385015186558c979095019493840193016200040d565b9091508560005289600020858085018b1c8201928c8610620004a8575b918a9186959493018c1c01915b8281106200049857505062000097565b600081558594508a910162000488565b925081926200047b565b60228a634e487b7160e01b6000525260246000fd5b93607f169362000080565b604187634e487b7160e01b6000525260246000fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c90816306fdde031461178c57508063095ea7b3146116d957806318160ddd146116bb57806323b872dd146115ce578063313ce567146115b25780633269617414611596578063344341ba1461157a578063377ebe59146115395780633cd6cfb5146114575780634626402b1461142a5780634e967fef146113fb5780634fbee193146113bc578063656fac0f1461137b5780636dbeaa051461132f57806370a08231146112f7578063715018a6146112de578063751039fc14611243578063817dab5514610e3a5780638208619a14610e115780638da5cb5b14610de85780638ea5220f14610dbf578063930978ed14610d1957806393b998fb14610cfc57806395d89b4114610bfa5780639a9f1ade14610abc5780639c467b7e14610a9f5780639e7d1281146109e5578063a9059cbb146109b3578063aa6df2991461092b578063ab165d0e1461081a578063b50d1fd9146107eb578063b62496f5146107ac578063bda635d01461064e578063c024666814610557578063c04d20a614610539578063c60058931461050a578063d17eed09146103c2578063dd62ed3e14610377578063e6182bf81461033e578063e99ac80b14610319578063ee6e8b1c146102fb578063ef5d9caf146102dd578063f2fde38b146102535763f456ecaf1461020557600080fd5b3461025057806003193601126102505761022a60018060a01b036008541633146119ee565b610232611a45565b60155461024160ff8216611b1a565b60ff1916601555600160065580f35b80fd5b50346102505760203660031901126102505761026d61188e565b6102756118ee565b6001600160a01b039081169081156102c457600554826001600160601b0360a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b604051631e4fbdf760e01b815260048101849052602490fd5b50346102505780600319360112610250576020604051620151808152f35b503461025057806003193601126102505760206040516202a3008152f35b5034610250578060031936011261025057602064ffffffffff600b5416604051908152f35b5034610250576020366003190112610250576020906040906001600160a01b0361036661188e565b168152600f83522054604051908152f35b503461025057604036600319011261025057604060209161039661188e565b61039e6118a9565b6001600160a01b039182168352600185528383209116825283522054604051908152f35b5034610250576020366003190112610250576103dc61188e565b6008546001600160a01b0391906103f690831633146119ee565b6103fe611a45565b169081156104b65760125460ff8116610467576202a3004201804211610453576001929361042d604051611991565b6001600160601b0360a01b601054161760105560115560ff191617601255600160065580f35b634e487b7160e01b83526011600452602483fd5b60405162461bcd60e51b815260206004820152602160248201527f4465762057616c6c6574206368616e676520616c72656164792070656e64696e6044820152606760f81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602660248201527f4e6577204465762057616c6c6574206d75737420626520612076616c6964206160448201526564647265737360d01b6064820152608490fd5b5034610250578060031936011261025057602060405173a047e2abf8263fca7c368f43e2f960a06fd9949f8152f35b50346102505780600319360112610250576020600a54604051908152f35b503461025057610566366118bf565b60085490916001600160a01b039161058190831633146119ee565b610589611a45565b1690818352600e60205260ff6040842054166105f45760207f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791838552600d82526105e381604087209060ff801983541691151516179055565b6040519015158152a2600160065580f35b60405162461bcd60e51b815260206004820152602c60248201527f506f6f6c206164647265737365732063616e6e6f74206265206578636c75646560448201526b642066726f6d20666565732160a01b6064820152608490fd5b50346102505761065d366118bf565b6008546001600160a01b0392839161067890831633146119ee565b610680611a45565b1691821561074b576009541682146106d65760207ff6ded336129da9f6b9bd640fa7fc062ccdc399b4eb86efbc8ca064c1489fa0fc91838552600e82526105e381604087209060ff801983541691151516179055565b60405162461bcd60e51b815260206004820152604160248201527f43616e27742072656d6f766520616c67656272615633506169722066726f6d2060448201527f746865204175746f6d61746564204d61726b6574204d616b65722050616972736064820152602160f81b608482015260a490fd5b60405162461bcd60e51b815260206004820152603360248201527f4175746f6d61746564204d61726b6574204d616b65722050616972206d75737460448201527220626520612076616c6964206164647265737360681b6064820152608490fd5b50346102505760203660031901126102505760209060ff906040906001600160a01b036107d761188e565b168152600e84522054166040519015158152f35b5034610250578060031936011261025057602060405173a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e708152f35b50346102505760203660031901126102505760043564ffffffffff8082168092036109275761085460018060a01b036008541633146119ee565b61085c611a45565b603c8210158061091a575b156108b6577f346c096852f7b9dc33224c9ff605f07a9c6f592988a8a2eef82ccad46eaadb8a91604091600b548264ffffffffff19821617600b558351928352166020820152a1600160065580f35b60405162461bcd60e51b815260206004820152603660248201527f636f6f6c646f776e506572696f644242206d757374206265206265747765656e6044820152752031206d696e75746520616e6420323420686f75727360501b6064820152608490fd5b5062015180821115610867565b8280fd5b503461025057806003193601126102505760ff600b5460281c166109555761095233611b95565b80f35b60405162461bcd60e51b815260206004820152603060248201527f43616e27742063616c6c20627579416e644275726e207768696c65206c696d6960448201526f1d1cc8185c99481a5b881959999958dd60821b6064820152608490fd5b5034610250576040366003190112610250576109da6109d061188e565b6024359033612108565b602060405160018152f35b50346102505780600319360112610250576008546001600160a01b0390610a0f90821633146119ee565b610a17611a45565b7fdf4b361a1fafeb8deb9a0f6eaacf67a9c8407f9af7eaebb00a77ece36e727046602060155492610a4a60ff8516611b1a565b610a58601454421015611ad7565b60078054601354610100600160a81b03198216600882811b610100600160a81b03169190911790935560ff19909616601555604051911c82168152931692a2600160065580f35b503461025057806003193601126102505760206040516102588152f35b503461025057602036600319011261025057610ad661188e565b6008546001600160a01b039190610af090831633146119ee565b610af8611a45565b16908115610ba15760155460ff8116610b4d576201518042018042116104535760019293610b27604051611991565b6001600160601b0360a01b601354161760135560145560ff191617601555600160065580f35b60405162461bcd60e51b815260206004820152602660248201527f54726561737572792057616c6c6574206368616e676520616c72656164792070604482015265656e64696e6760d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f4e65772054726561737572792057616c6c6574206d757374206265206120766160448201526a6c6964206164647265737360a81b6064820152608490fd5b50346102505780600319360112610250576040518160045490600182811c91818416938415610cf2575b6020948585108114610cde57848752908115610cbc5750600114610c63575b610c5f85610c53818903826119ad565b60405191829182611845565b0390f35b929450600483527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610ca95750505081610c5f93610c53928201019338610c43565b8054858501870152928501928101610c8c565b60ff191686860152505050151560051b8201019150610c5381610c5f38610c43565b634e487b7160e01b83526022600452602483fd5b92607f1692610c24565b503461025057806003193601126102505760206040516101908152f35b50346102505780600319360112610250576008546001600160a01b0390610d4390821633146119ee565b610d4b611a45565b7fb7b8d751f756e5e473e00a6fe528f2e3d5e6bc2928b5744165d831c56af0650c602060125492610d7e60ff8516611a8b565b610d8c601154421015611ad7565b60085490806010541694856001600160601b0360a01b84161760085560ff191660125560405191168152a2600160065580f35b50346102505780600319360112610250576008546040516001600160a01b039091168152602090f35b50346102505780600319360112610250576005546040516001600160a01b039091168152602090f35b50346102505780600319360112610250576009546040516001600160a01b039091168152602090f35b5034610250576060366003190112610250576004356001600160a01b0381169081900361123f576024358060020b809103610927576044358060020b80910361123b57610e856118ee565b73a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e709283301060001461119d576040519063289236b760e11b825230600483015284602483015260448201526020816064818873d82fe82244ad01aad671576202f9b46b76fadfe25af1908115611192578591611164575b5060018060a01b03166001600160601b0360a01b60095416176009553080855284602052604085205493855b60018060a01b03600954168752602095600e875260408820600160ff198254161790553088528787526040882054301561114b5773d82fe82244ad01aad671576202f9b46b76fadfe290308a526001895260408a20828b5289528060408b20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925893092a360405194610fb48661195e565b88865288888701528860408701528860608701528860808701528860a08701528860c08701528860e0870152610100968988880152896101208098015260018060a01b0360085416946040519661100a8861195e565b6001600160a01b0390811688529081168a88019081526040808901938452606089019485526080808a0196875260a08a0197885260c08a018e815260e08b018f81529c8b01998a52429b8b019b8c529151639cc1a28360e01b81529951841660048b01529151831660248a01529251600290810b60448a0152935190930b606488015292516084870152925160a4860152915160c4850152945160e4840152905190931661010482015290516101248201529081610144818673d82fe82244ad01aad671576202f9b46b76fadfe25af18015611140576110f6575b826110ee6118ee565b61095261191a565b6080813d608011611138575b8161110f608093836119ad565b810103126109275701516fffffffffffffffffffffffffffffffff8116036102505738806110e5565b3d9150611102565b6040513d85823e3d90fd5b60405163e602df0560e01b8152600481018a9052602490fd5b611185915060203d811161118b575b61117d81836119ad565b8101906119cf565b38610ef0565b503d611173565b6040513d87823e3d90fd5b6040939193519063289236b760e11b825282600483015230602483015260448201526020816064818873d82fe82244ad01aad671576202f9b46b76fadfe25af190811561119257859161121d575b5060018060a01b03166001600160601b0360a01b60095416176009559130928493808652856020526040862054610f1c565b611235915060203d811161118b5761117d81836119ad565b386111eb565b8380fd5b5080fd5b50346102505780600319360112610250576008546001600160a01b039061126d90821633146119ee565b600b549060ff8260281c1615611299576109529165ff00000000001916600b5560075460081c16611b95565b60405162461bcd60e51b815260206004820152601b60248201527f4c696d69747320776572652072656d6f76656420616c726561647900000000006044820152606490fd5b50346102505780600319360112610250576110ee6118ee565b5034610250576020366003190112610250576020906040906001600160a01b0361131f61188e565b1681528083522054604051908152f35b503461025057806003193601126102505761135560018060a01b036008541633146119ee565b61135d611a45565b60125461136c60ff8216611a8b565b60ff1916601255600160065580f35b5034610250578060031936011261025057601054601154601254604080516001600160a01b039094168452602084019290925260ff16151590820152606090f35b50346102505760203660031901126102505760209060ff906040906001600160a01b036113e761188e565b168152600d84522054166040519015158152f35b5034610250578060031936011261025057602060405173d82fe82244ad01aad671576202f9b46b76fadfe28152f35b503461025057806003193601126102505760075460405160089190911c6001600160a01b03168152602090f35b50346102505760203660031901126102505760043561148160018060a01b036008541633146119ee565b611489611a45565b670de0b6b3a76400008111156114d75760407fa201f2fe8dea5312ae3d5efd56bae300f09d43248e22dd7eef6d4f314ac4a1be91600a5481600a5582519182526020820152a1600160065580f35b60405162461bcd60e51b815260206004820152603460248201527f43616e6e6f742073657420746865206d696e696d756d42616c616e63654242206044820152730e8de40d8deeecae440e8d0c2dc40624084a49cf60631b6064820152608490fd5b5034610250578060031936011261025057601354601454601554604080516001600160a01b039094168452602084019290925260ff16151590820152606090f35b5034610250578060031936011261025057602060405160198152f35b5034610250578060031936011261025057602060405160af8152f35b5034610250578060031936011261025057602060405160128152f35b5034610250576060366003190112610250576115e861188e565b6115f06118a9565b6001600160a01b03821680845260016020818152604080872033885290915285205460443594929091820161162c575b50506109da9350612108565b84821061169557801561167c573315611663578486926040926109da98526001602052828420338552602052039120553880611620565b604051634a1406b160e11b815260048101879052602490fd5b60405163e602df0560e01b815260048101879052602490fd5b604051637dc7a0d960e11b81523360048201526024810183905260448101869052606490fd5b50346102505780600319360112610250576020600254604051908152f35b5034610250576040366003190112610250576116f361188e565b602435903315611773576001600160a01b031691821561175b5760408291338152600160205281812085825260205220556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b60249060405190634a1406b160e11b82526004820152fd5b60405163e602df0560e01b815260048101849052602490fd5b90503461123f578160031936011261123f578160035490600182811c9181841693841561183b575b6020948585108114610cde57848752908115610cbc57506001146117e257610c5f85610c53818903826119ad565b929450600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8284106118285750505081610c5f93610c53928201019338610c43565b805485850187015292850192810161180b565b92607f16926117b4565b6020808252825181830181905290939260005b82811061187a57505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611858565b600435906001600160a01b03821682036118a457565b600080fd5b602435906001600160a01b03821682036118a457565b60409060031901126118a4576004356001600160a01b03811681036118a4579060243580151581036118a45790565b6005546001600160a01b0316330361190257565b60405163118cdaa760e01b8152336004820152602490fd5b600580546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3565b610140810190811067ffffffffffffffff82111761197b57604052565b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff82111761197b57604052565b90601f8019910116810190811067ffffffffffffffff82111761197b57604052565b908160209103126118a457516001600160a01b03811681036118a45790565b156119f557565b60405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920746865206465762063616e2072756e20746869732066756e63746960448201526137b760f11b6064820152608490fd5b600260065414611a56576002600655565b604051633ee5aeb560e01b8152600490fd5b91908201809211611a7557565b634e487b7160e01b600052601160045260246000fd5b15611a9257565b60405162461bcd60e51b815260206004820152601c60248201527f4e6f204465762057616c6c6574206368616e67652070656e64696e67000000006044820152606490fd5b15611ade57565b60405162461bcd60e51b8152602060048201526014602482015273151a5b595b1bd8dac81b9bdd08195e1c1a5c995960621b6044820152606490fd5b15611b2157565b60405162461bcd60e51b815260206004820152602160248201527f4e6f2054726561737572792057616c6c6574206368616e67652070656e64696e6044820152606760f81b6064820152608490fd5b91908203918211611a7557565b908160209103126118a4575180151581036118a45790565b30600052600060205260406000205490600a54821061206b5760018060a01b0381169182600052600f602052611bda60406000205464ffffffffff600b541690611a68565b4210611fef5782600052600f60205242604060002055600160ff1960075416176007553015611fd657306000526001602052604060002073a047e2abf8263fca7c368f43e2f960a06fd9949f6000526020528060406000205573a047e2abf8263fca7c368f43e2f960a06fd9949f6040518281527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203092a36040519060c0820182811067ffffffffffffffff82111761197b5760409081523080845273a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e7060208086019182528584019283526060860194855260006080870181815260a088018281529551635d590a0760e11b815297516001600160a01b0390811660048a01529351841660248901529351831660448801529451606487015291516084860152915190911660a484015290829060c490829073a047e2abf8263fca7c368f43e2f960a06fd9949f5af18015611f3157611fab575b506007805460ff191690556040516370a0823160e01b815230600482015260208160248173a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705afa908115611f3157600091611f79575b5061019080820282159183820414821715611a75576102588091049260af81029281840460af141715611a7557611dcd611dd292859404948592611b70565b611b70565b926040519063a9059cbb60e01b9081835261dead6004840152836024840152602083604481600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1928315611f3157611e5493611f5a575b5060075460405183815260089190911c6001600160a01b031660048201526024810186905292602090849081906044820190565b0381600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1918215611f31578693602093611f3d575b506040519081526001600160a01b03919091166004820152602481019590955284604481600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1928315611f31577f0f960106459651f5920865daf08e328c57639961da0b3ea82d647c11ee0ec88294606094611f02575b5060405192835260208301526040820152a2565b611f239060203d602011611f2a575b611f1b81836119ad565b810190611b7d565b5038611eee565b503d611f11565b6040513d6000823e3d90fd5b611f5390843d8611611f2a57611f1b81836119ad565b5038611e80565b611f729060203d602011611f2a57611f1b81836119ad565b5038611e20565b90506020813d602011611fa3575b81611f94602093836119ad565b810103126118a4575138611d8e565b3d9150611f87565b602090813d8311611fcf575b611fc181836119ad565b810103126118a45738611d44565b503d611fb7565b60405163e602df0560e01b815260006004820152602490fd5b60405162461bcd60e51b815260206004820152604860248201527f43616e206f6e6c792063616c6c2074686520627579416e644275726e2066756e60448201527f6374696f6e2061667465722074686520636f6f6c646f776e506572696f6442426064820152671034b99037bb32b960c11b608482015260a490fd5b60c460405162461bcd60e51b815260206004820152606460248201527f43616e206f6e6c792063616c6c2074686520627579416e644275726e2066756e60448201527f6374696f6e207768656e2042524e782062616c616e6365206f6620746865206360648201527f6f6e7472616374206973206f76657220746865206d696e696d756d42616c616e60848201526331b2a12160e11b60a4820152fd5b9291908115938480156122cf575b80156122ad575b801561229a575b801561228e575b612283576001600160a01b038181166000908152600e602052604081205490919060ff161561220e5760ff600b5460281c166121af575b50610258958685029685880414171561219b575061219461218c6127106121999697048095611b70565b9330836122f1565b6122f1565b565b634e487b7160e01b81526011600452602490fd5b83168152806020526121c5604082205485611a68565b600c54106121d35738612162565b60405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606490fd5b8316815260409020549394509260ff161561222c57612199926122f1565b60405162461bcd60e51b815260206004820152602960248201527f43616e2774206275792c2073656c6c206f7220616464204c50206f6e20616e6f6044820152681d1a195c881c1bdbdb60ba1b6064820152608490fd5b6121999394506122f1565b5060ff6007541661212b565b50803b1580156121245750813b15612124565b506001600160a01b0382166000908152600d602052604090205460ff1661211d565b506001600160a01b0381166000908152600d602052604090205460ff16612116565b916001600160a01b038084169283156123b6571692831561239d576000908382528160205260408220549083821061236b575091604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815220818154019055604051908152a3565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101839052606490fd5b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fdfea2646970667358221220b921394d5b6dbfc2000f3611a7a53bca4f79452c6ee08ffac3f2c02fcd8ad2de64736f6c63430008140033
Deployed Bytecode
0x608080604052600436101561001357600080fd5b600090813560e01c90816306fdde031461178c57508063095ea7b3146116d957806318160ddd146116bb57806323b872dd146115ce578063313ce567146115b25780633269617414611596578063344341ba1461157a578063377ebe59146115395780633cd6cfb5146114575780634626402b1461142a5780634e967fef146113fb5780634fbee193146113bc578063656fac0f1461137b5780636dbeaa051461132f57806370a08231146112f7578063715018a6146112de578063751039fc14611243578063817dab5514610e3a5780638208619a14610e115780638da5cb5b14610de85780638ea5220f14610dbf578063930978ed14610d1957806393b998fb14610cfc57806395d89b4114610bfa5780639a9f1ade14610abc5780639c467b7e14610a9f5780639e7d1281146109e5578063a9059cbb146109b3578063aa6df2991461092b578063ab165d0e1461081a578063b50d1fd9146107eb578063b62496f5146107ac578063bda635d01461064e578063c024666814610557578063c04d20a614610539578063c60058931461050a578063d17eed09146103c2578063dd62ed3e14610377578063e6182bf81461033e578063e99ac80b14610319578063ee6e8b1c146102fb578063ef5d9caf146102dd578063f2fde38b146102535763f456ecaf1461020557600080fd5b3461025057806003193601126102505761022a60018060a01b036008541633146119ee565b610232611a45565b60155461024160ff8216611b1a565b60ff1916601555600160065580f35b80fd5b50346102505760203660031901126102505761026d61188e565b6102756118ee565b6001600160a01b039081169081156102c457600554826001600160601b0360a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b604051631e4fbdf760e01b815260048101849052602490fd5b50346102505780600319360112610250576020604051620151808152f35b503461025057806003193601126102505760206040516202a3008152f35b5034610250578060031936011261025057602064ffffffffff600b5416604051908152f35b5034610250576020366003190112610250576020906040906001600160a01b0361036661188e565b168152600f83522054604051908152f35b503461025057604036600319011261025057604060209161039661188e565b61039e6118a9565b6001600160a01b039182168352600185528383209116825283522054604051908152f35b5034610250576020366003190112610250576103dc61188e565b6008546001600160a01b0391906103f690831633146119ee565b6103fe611a45565b169081156104b65760125460ff8116610467576202a3004201804211610453576001929361042d604051611991565b6001600160601b0360a01b601054161760105560115560ff191617601255600160065580f35b634e487b7160e01b83526011600452602483fd5b60405162461bcd60e51b815260206004820152602160248201527f4465762057616c6c6574206368616e676520616c72656164792070656e64696e6044820152606760f81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602660248201527f4e6577204465762057616c6c6574206d75737420626520612076616c6964206160448201526564647265737360d01b6064820152608490fd5b5034610250578060031936011261025057602060405173a047e2abf8263fca7c368f43e2f960a06fd9949f8152f35b50346102505780600319360112610250576020600a54604051908152f35b503461025057610566366118bf565b60085490916001600160a01b039161058190831633146119ee565b610589611a45565b1690818352600e60205260ff6040842054166105f45760207f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791838552600d82526105e381604087209060ff801983541691151516179055565b6040519015158152a2600160065580f35b60405162461bcd60e51b815260206004820152602c60248201527f506f6f6c206164647265737365732063616e6e6f74206265206578636c75646560448201526b642066726f6d20666565732160a01b6064820152608490fd5b50346102505761065d366118bf565b6008546001600160a01b0392839161067890831633146119ee565b610680611a45565b1691821561074b576009541682146106d65760207ff6ded336129da9f6b9bd640fa7fc062ccdc399b4eb86efbc8ca064c1489fa0fc91838552600e82526105e381604087209060ff801983541691151516179055565b60405162461bcd60e51b815260206004820152604160248201527f43616e27742072656d6f766520616c67656272615633506169722066726f6d2060448201527f746865204175746f6d61746564204d61726b6574204d616b65722050616972736064820152602160f81b608482015260a490fd5b60405162461bcd60e51b815260206004820152603360248201527f4175746f6d61746564204d61726b6574204d616b65722050616972206d75737460448201527220626520612076616c6964206164647265737360681b6064820152608490fd5b50346102505760203660031901126102505760209060ff906040906001600160a01b036107d761188e565b168152600e84522054166040519015158152f35b5034610250578060031936011261025057602060405173a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e708152f35b50346102505760203660031901126102505760043564ffffffffff8082168092036109275761085460018060a01b036008541633146119ee565b61085c611a45565b603c8210158061091a575b156108b6577f346c096852f7b9dc33224c9ff605f07a9c6f592988a8a2eef82ccad46eaadb8a91604091600b548264ffffffffff19821617600b558351928352166020820152a1600160065580f35b60405162461bcd60e51b815260206004820152603660248201527f636f6f6c646f776e506572696f644242206d757374206265206265747765656e6044820152752031206d696e75746520616e6420323420686f75727360501b6064820152608490fd5b5062015180821115610867565b8280fd5b503461025057806003193601126102505760ff600b5460281c166109555761095233611b95565b80f35b60405162461bcd60e51b815260206004820152603060248201527f43616e27742063616c6c20627579416e644275726e207768696c65206c696d6960448201526f1d1cc8185c99481a5b881959999958dd60821b6064820152608490fd5b5034610250576040366003190112610250576109da6109d061188e565b6024359033612108565b602060405160018152f35b50346102505780600319360112610250576008546001600160a01b0390610a0f90821633146119ee565b610a17611a45565b7fdf4b361a1fafeb8deb9a0f6eaacf67a9c8407f9af7eaebb00a77ece36e727046602060155492610a4a60ff8516611b1a565b610a58601454421015611ad7565b60078054601354610100600160a81b03198216600882811b610100600160a81b03169190911790935560ff19909616601555604051911c82168152931692a2600160065580f35b503461025057806003193601126102505760206040516102588152f35b503461025057602036600319011261025057610ad661188e565b6008546001600160a01b039190610af090831633146119ee565b610af8611a45565b16908115610ba15760155460ff8116610b4d576201518042018042116104535760019293610b27604051611991565b6001600160601b0360a01b601354161760135560145560ff191617601555600160065580f35b60405162461bcd60e51b815260206004820152602660248201527f54726561737572792057616c6c6574206368616e676520616c72656164792070604482015265656e64696e6760d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f4e65772054726561737572792057616c6c6574206d757374206265206120766160448201526a6c6964206164647265737360a81b6064820152608490fd5b50346102505780600319360112610250576040518160045490600182811c91818416938415610cf2575b6020948585108114610cde57848752908115610cbc5750600114610c63575b610c5f85610c53818903826119ad565b60405191829182611845565b0390f35b929450600483527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610ca95750505081610c5f93610c53928201019338610c43565b8054858501870152928501928101610c8c565b60ff191686860152505050151560051b8201019150610c5381610c5f38610c43565b634e487b7160e01b83526022600452602483fd5b92607f1692610c24565b503461025057806003193601126102505760206040516101908152f35b50346102505780600319360112610250576008546001600160a01b0390610d4390821633146119ee565b610d4b611a45565b7fb7b8d751f756e5e473e00a6fe528f2e3d5e6bc2928b5744165d831c56af0650c602060125492610d7e60ff8516611a8b565b610d8c601154421015611ad7565b60085490806010541694856001600160601b0360a01b84161760085560ff191660125560405191168152a2600160065580f35b50346102505780600319360112610250576008546040516001600160a01b039091168152602090f35b50346102505780600319360112610250576005546040516001600160a01b039091168152602090f35b50346102505780600319360112610250576009546040516001600160a01b039091168152602090f35b5034610250576060366003190112610250576004356001600160a01b0381169081900361123f576024358060020b809103610927576044358060020b80910361123b57610e856118ee565b73a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e709283301060001461119d576040519063289236b760e11b825230600483015284602483015260448201526020816064818873d82fe82244ad01aad671576202f9b46b76fadfe25af1908115611192578591611164575b5060018060a01b03166001600160601b0360a01b60095416176009553080855284602052604085205493855b60018060a01b03600954168752602095600e875260408820600160ff198254161790553088528787526040882054301561114b5773d82fe82244ad01aad671576202f9b46b76fadfe290308a526001895260408a20828b5289528060408b20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925893092a360405194610fb48661195e565b88865288888701528860408701528860608701528860808701528860a08701528860c08701528860e0870152610100968988880152896101208098015260018060a01b0360085416946040519661100a8861195e565b6001600160a01b0390811688529081168a88019081526040808901938452606089019485526080808a0196875260a08a0197885260c08a018e815260e08b018f81529c8b01998a52429b8b019b8c529151639cc1a28360e01b81529951841660048b01529151831660248a01529251600290810b60448a0152935190930b606488015292516084870152925160a4860152915160c4850152945160e4840152905190931661010482015290516101248201529081610144818673d82fe82244ad01aad671576202f9b46b76fadfe25af18015611140576110f6575b826110ee6118ee565b61095261191a565b6080813d608011611138575b8161110f608093836119ad565b810103126109275701516fffffffffffffffffffffffffffffffff8116036102505738806110e5565b3d9150611102565b6040513d85823e3d90fd5b60405163e602df0560e01b8152600481018a9052602490fd5b611185915060203d811161118b575b61117d81836119ad565b8101906119cf565b38610ef0565b503d611173565b6040513d87823e3d90fd5b6040939193519063289236b760e11b825282600483015230602483015260448201526020816064818873d82fe82244ad01aad671576202f9b46b76fadfe25af190811561119257859161121d575b5060018060a01b03166001600160601b0360a01b60095416176009559130928493808652856020526040862054610f1c565b611235915060203d811161118b5761117d81836119ad565b386111eb565b8380fd5b5080fd5b50346102505780600319360112610250576008546001600160a01b039061126d90821633146119ee565b600b549060ff8260281c1615611299576109529165ff00000000001916600b5560075460081c16611b95565b60405162461bcd60e51b815260206004820152601b60248201527f4c696d69747320776572652072656d6f76656420616c726561647900000000006044820152606490fd5b50346102505780600319360112610250576110ee6118ee565b5034610250576020366003190112610250576020906040906001600160a01b0361131f61188e565b1681528083522054604051908152f35b503461025057806003193601126102505761135560018060a01b036008541633146119ee565b61135d611a45565b60125461136c60ff8216611a8b565b60ff1916601255600160065580f35b5034610250578060031936011261025057601054601154601254604080516001600160a01b039094168452602084019290925260ff16151590820152606090f35b50346102505760203660031901126102505760209060ff906040906001600160a01b036113e761188e565b168152600d84522054166040519015158152f35b5034610250578060031936011261025057602060405173d82fe82244ad01aad671576202f9b46b76fadfe28152f35b503461025057806003193601126102505760075460405160089190911c6001600160a01b03168152602090f35b50346102505760203660031901126102505760043561148160018060a01b036008541633146119ee565b611489611a45565b670de0b6b3a76400008111156114d75760407fa201f2fe8dea5312ae3d5efd56bae300f09d43248e22dd7eef6d4f314ac4a1be91600a5481600a5582519182526020820152a1600160065580f35b60405162461bcd60e51b815260206004820152603460248201527f43616e6e6f742073657420746865206d696e696d756d42616c616e63654242206044820152730e8de40d8deeecae440e8d0c2dc40624084a49cf60631b6064820152608490fd5b5034610250578060031936011261025057601354601454601554604080516001600160a01b039094168452602084019290925260ff16151590820152606090f35b5034610250578060031936011261025057602060405160198152f35b5034610250578060031936011261025057602060405160af8152f35b5034610250578060031936011261025057602060405160128152f35b5034610250576060366003190112610250576115e861188e565b6115f06118a9565b6001600160a01b03821680845260016020818152604080872033885290915285205460443594929091820161162c575b50506109da9350612108565b84821061169557801561167c573315611663578486926040926109da98526001602052828420338552602052039120553880611620565b604051634a1406b160e11b815260048101879052602490fd5b60405163e602df0560e01b815260048101879052602490fd5b604051637dc7a0d960e11b81523360048201526024810183905260448101869052606490fd5b50346102505780600319360112610250576020600254604051908152f35b5034610250576040366003190112610250576116f361188e565b602435903315611773576001600160a01b031691821561175b5760408291338152600160205281812085825260205220556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b60249060405190634a1406b160e11b82526004820152fd5b60405163e602df0560e01b815260048101849052602490fd5b90503461123f578160031936011261123f578160035490600182811c9181841693841561183b575b6020948585108114610cde57848752908115610cbc57506001146117e257610c5f85610c53818903826119ad565b929450600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8284106118285750505081610c5f93610c53928201019338610c43565b805485850187015292850192810161180b565b92607f16926117b4565b6020808252825181830181905290939260005b82811061187a57505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611858565b600435906001600160a01b03821682036118a457565b600080fd5b602435906001600160a01b03821682036118a457565b60409060031901126118a4576004356001600160a01b03811681036118a4579060243580151581036118a45790565b6005546001600160a01b0316330361190257565b60405163118cdaa760e01b8152336004820152602490fd5b600580546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3565b610140810190811067ffffffffffffffff82111761197b57604052565b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff82111761197b57604052565b90601f8019910116810190811067ffffffffffffffff82111761197b57604052565b908160209103126118a457516001600160a01b03811681036118a45790565b156119f557565b60405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920746865206465762063616e2072756e20746869732066756e63746960448201526137b760f11b6064820152608490fd5b600260065414611a56576002600655565b604051633ee5aeb560e01b8152600490fd5b91908201809211611a7557565b634e487b7160e01b600052601160045260246000fd5b15611a9257565b60405162461bcd60e51b815260206004820152601c60248201527f4e6f204465762057616c6c6574206368616e67652070656e64696e67000000006044820152606490fd5b15611ade57565b60405162461bcd60e51b8152602060048201526014602482015273151a5b595b1bd8dac81b9bdd08195e1c1a5c995960621b6044820152606490fd5b15611b2157565b60405162461bcd60e51b815260206004820152602160248201527f4e6f2054726561737572792057616c6c6574206368616e67652070656e64696e6044820152606760f81b6064820152608490fd5b91908203918211611a7557565b908160209103126118a4575180151581036118a45790565b30600052600060205260406000205490600a54821061206b5760018060a01b0381169182600052600f602052611bda60406000205464ffffffffff600b541690611a68565b4210611fef5782600052600f60205242604060002055600160ff1960075416176007553015611fd657306000526001602052604060002073a047e2abf8263fca7c368f43e2f960a06fd9949f6000526020528060406000205573a047e2abf8263fca7c368f43e2f960a06fd9949f6040518281527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203092a36040519060c0820182811067ffffffffffffffff82111761197b5760409081523080845273a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e7060208086019182528584019283526060860194855260006080870181815260a088018281529551635d590a0760e11b815297516001600160a01b0390811660048a01529351841660248901529351831660448801529451606487015291516084860152915190911660a484015290829060c490829073a047e2abf8263fca7c368f43e2f960a06fd9949f5af18015611f3157611fab575b506007805460ff191690556040516370a0823160e01b815230600482015260208160248173a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705afa908115611f3157600091611f79575b5061019080820282159183820414821715611a75576102588091049260af81029281840460af141715611a7557611dcd611dd292859404948592611b70565b611b70565b926040519063a9059cbb60e01b9081835261dead6004840152836024840152602083604481600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1928315611f3157611e5493611f5a575b5060075460405183815260089190911c6001600160a01b031660048201526024810186905292602090849081906044820190565b0381600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1918215611f31578693602093611f3d575b506040519081526001600160a01b03919091166004820152602481019590955284604481600073a04bc7140c26fc9bb1f36b1a604c7a5a88fb0e705af1928315611f31577f0f960106459651f5920865daf08e328c57639961da0b3ea82d647c11ee0ec88294606094611f02575b5060405192835260208301526040820152a2565b611f239060203d602011611f2a575b611f1b81836119ad565b810190611b7d565b5038611eee565b503d611f11565b6040513d6000823e3d90fd5b611f5390843d8611611f2a57611f1b81836119ad565b5038611e80565b611f729060203d602011611f2a57611f1b81836119ad565b5038611e20565b90506020813d602011611fa3575b81611f94602093836119ad565b810103126118a4575138611d8e565b3d9150611f87565b602090813d8311611fcf575b611fc181836119ad565b810103126118a45738611d44565b503d611fb7565b60405163e602df0560e01b815260006004820152602490fd5b60405162461bcd60e51b815260206004820152604860248201527f43616e206f6e6c792063616c6c2074686520627579416e644275726e2066756e60448201527f6374696f6e2061667465722074686520636f6f6c646f776e506572696f6442426064820152671034b99037bb32b960c11b608482015260a490fd5b60c460405162461bcd60e51b815260206004820152606460248201527f43616e206f6e6c792063616c6c2074686520627579416e644275726e2066756e60448201527f6374696f6e207768656e2042524e782062616c616e6365206f6620746865206360648201527f6f6e7472616374206973206f76657220746865206d696e696d756d42616c616e60848201526331b2a12160e11b60a4820152fd5b9291908115938480156122cf575b80156122ad575b801561229a575b801561228e575b612283576001600160a01b038181166000908152600e602052604081205490919060ff161561220e5760ff600b5460281c166121af575b50610258958685029685880414171561219b575061219461218c6127106121999697048095611b70565b9330836122f1565b6122f1565b565b634e487b7160e01b81526011600452602490fd5b83168152806020526121c5604082205485611a68565b600c54106121d35738612162565b60405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606490fd5b8316815260409020549394509260ff161561222c57612199926122f1565b60405162461bcd60e51b815260206004820152602960248201527f43616e2774206275792c2073656c6c206f7220616464204c50206f6e20616e6f6044820152681d1a195c881c1bdbdb60ba1b6064820152608490fd5b6121999394506122f1565b5060ff6007541661212b565b50803b1580156121245750813b15612124565b506001600160a01b0382166000908152600d602052604090205460ff1661211d565b506001600160a01b0381166000908152600d602052604090205460ff16612116565b916001600160a01b038084169283156123b6571692831561239d576000908382528160205260408220549083821061236b575091604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815220818154019055604051908152a3565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101839052606490fd5b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fdfea2646970667358221220b921394d5b6dbfc2000f3611a7a53bca4f79452c6ee08ffac3f2c02fcd8ad2de64736f6c63430008140033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.