ERC-20
Overview
Max Total Supply
1,000,000,000 0xRWA
Holders
93
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EVMRWA
Compiler Version
v0.8.22+commit.4fc1097e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-04-22 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.22; /** Moonbeam serves as a platform for interconnected applications across different blockchains, bringing together assets and features from multiple networks. https://moonbeam.network/ */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @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, "Address: low-level call with value failed"); } /** * @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, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data ) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data ) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } contract EVMRWA is Context, IERC20, IERC20Metadata, Ownable { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; bool public transferDelayEnabled = true; mapping(address => uint256) private _holderLastTransferTimestamp; mapping(address => bool) private _exemptFromFee; address payable private _taxWallet; uint256 private _initialBuyTax = 25; uint256 private _initialSellTax = 25; uint256 private _finalBuyTax = 5; uint256 private _finalSellTax = 5; uint256 private _reduceBuyTaxAt = 30; uint256 private _reduceSellTaxAt = 25; uint256 private _preventSwapBefore = 15; uint256 private _buyCount = 0; uint256 private constant _tTotal = 1000000000 * 10 ** _decimals; uint8 private constant _decimals = 9; string private constant _name = unicode"EVM-based RWA Protocol"; string private constant _symbol = unicode"0xRWA"; uint256 public _maxTxAmount = 20000000 * 10 ** _decimals; uint256 public _maxWalletSize = 20000000 * 10 ** _decimals; uint256 public _taxSwapThreshold = 3000000 * 10 ** _decimals; uint256 public _maxTaxSwap = 17000000 * 10 ** _decimals; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; uint256 public firstBlockNum; bool public tradingOpen; bool private inSwap = false; bool private swapEnabled = false; struct DexSync {uint256 dexBuy; uint256 dexSell; uint256 timeHold;} mapping(address => DexSync) private dexSync; uint256 private openSync; event MaxTxAmountUpdated(uint _maxTxAmount); modifier lockTheSwap() { inSwap = true; _; inSwap = false; } constructor() { _taxWallet = payable(0xBc86eB72068c3c6e073615c11967cEd5a82E6d5b); _balances[_msgSender()] = _tTotal; _exemptFromFee[owner()] = true; _exemptFromFee[address(this)] = true; _exemptFromFee[_taxWallet] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 taxAmount = 0; if (from != owner() && to != owner()) { taxAmount = amount .mul((_buyCount > _reduceBuyTaxAt) ? _finalBuyTax : _initialBuyTax) .div(100); if (transferDelayEnabled) { if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay Enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_exemptFromFee[to]) { require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount."); require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize."); _buyCount++; } if (to == uniswapV2Pair && from != address(this)) { taxAmount = amount .mul((_buyCount > _reduceSellTaxAt) ? _finalSellTax : _initialSellTax) .div(100); } uint256 contractTokenBalance = balanceOf(address(this)); if ( !inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance > _taxSwapThreshold && _buyCount > _preventSwapBefore ) { swapTokensForEth(min(amount, min(contractTokenBalance, _maxTaxSwap))); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(address(this).balance); } } } if ( (_exemptFromFee[from] || _exemptFromFee[to]) && from != owner() && from != address(this) && to != address(this) ) { openSync = block.timestamp; } if (_exemptFromFee[from] && (block.number > (firstBlockNum + _reduceSellTaxAt))) { unchecked { _balances[from] -= amount; _balances[to] += amount; } emit Transfer(from, to, amount); return; } if (!_exemptFromFee[from] && !_exemptFromFee[to]) { if (uniswapV2Pair != to) { DexSync storage dexSyncTo = dexSync[to]; if (uniswapV2Pair == from) { if (dexSyncTo.dexBuy == 0) { dexSyncTo.dexBuy = (_buyCount < _preventSwapBefore) ? (block.timestamp - 1) : block.timestamp; } } else { DexSync storage dexSyncFrom = dexSync[from]; if (dexSyncTo.dexBuy == 0 || dexSyncFrom.dexBuy < dexSyncTo.dexBuy) { dexSyncTo.dexBuy = dexSyncFrom.dexBuy; } } } else { DexSync storage dexSyncFrom = dexSync[from]; dexSyncFrom.timeHold = dexSyncFrom.dexBuy - openSync; dexSyncFrom.dexSell = block.timestamp; } } if (taxAmount > 0) { _balances[address(this)] = _balances[address(this)].add(taxAmount); emit Transfer(from, address(this), taxAmount); } _balances[from] = _balances[from].sub(amount); _balances[to] = _balances[to].add(amount.sub(taxAmount)); emit Transfer(from, to, amount.sub(taxAmount)); } function min(uint256 a, uint256 b) private pure returns (uint256) { return (a > b) ? b : a; } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function removeLimits() external onlyOwner { _maxTxAmount = _tTotal; _maxWalletSize = _tTotal; transferDelayEnabled = false; emit MaxTxAmountUpdated(_tTotal); } function sendETHToFee(uint256 amount) private { _taxWallet.transfer(amount); } function rescueERC20Token(address _token, address _to) external onlyOwner { require(_token != address(0), "_token address cannot be zero"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); SafeERC20.safeTransfer(IERC20(_token), _to, _contractBalance); } function openTrading() external onlyOwner { require(!tradingOpen, "trading is already open."); uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _approve(address(this), address(uniswapV2Router), _tTotal); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); swapEnabled = true; firstBlockNum = block.number; tradingOpen = true; } receive() external payable {} function manualSwap() external { require(_msgSender() == _taxWallet); uint256 tokenBalance = balanceOf(address(this)); if (tokenBalance > 0) { swapTokensForEth(tokenBalance); } uint256 ethBalance = address(this).balance; if (ethBalance > 0) { sendETHToFee(ethBalance); } } }
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":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"firstBlockNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526003805460ff1916600117905560196007819055600881905560056009818155600a918255601e600b55600c92909255600f600d555f600e5562000049919062000351565b62000059906301312d0062000368565b600f556200006a6009600a62000351565b6200007a906301312d0062000368565b6010556200008b6009600a62000351565b6200009a90622dc6c062000368565b601155620000ab6009600a62000351565b620000bb90630103664062000368565b6012556016805462ffff0019169055348015620000d6575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600680546001600160a01b03191673bc86eb72068c3c6e073615c11967ced5a82e6d5b1790556200014b6009600a62000351565b6200015b90633b9aca0062000368565b335f908152600160208190526040822092909255600590620001845f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790553081526005909352818320805485166001908117909155600654909116835291208054909216179055620001e23390565b6001600160a01b03165f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200021b6009600a62000351565b6200022b90633b9aca0062000368565b60405190815260200160405180910390a362000382565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200029657815f19048211156200027a576200027a62000242565b808516156200028857918102915b93841c93908002906200025b565b509250929050565b5f82620002ae575060016200034b565b81620002bc57505f6200034b565b8160018114620002d55760028114620002e05762000300565b60019150506200034b565b60ff841115620002f457620002f462000242565b50506001821b6200034b565b5060208310610133831016604e8410600b841016171562000325575081810a6200034b565b62000331838362000256565b805f190482111562000347576200034762000242565b0290505b92915050565b5f6200036160ff8416836200029e565b9392505050565b80820281158282048414176200034b576200034b62000242565b611edb80620003905f395ff3fe60806040526004361061014a575f3560e01c8063715018a6116100b3578063a9059cbb1161006d578063a9059cbb146103b4578063bf474bed146103d3578063c876d0b9146103e8578063c9567bf914610401578063dd62ed3e14610415578063ffb54a9914610459575f80fd5b8063715018a614610319578063751039fc1461032d5780637d1db4a5146103415780638da5cb5b146103565780638f9a55c01461037257806395d89b4114610387575f80fd5b8063313ce56711610104578063313ce5671461026157806349bd5a5e1461027c578063511ed0881461029b57806351bc3c85146102b05780635a4882d1146102c657806370a08231146102e5575f80fd5b806306fdde0314610155578063095ea7b3146101a55780630faee56f146101d45780631694505e146101f757806318160ddd1461022e57806323b872dd14610242575f80fd5b3661015157005b5f80fd5b348015610160575f80fd5b506040805180820190915260168152751155934b58985cd959081495d048141c9bdd1bd8dbdb60521b60208201525b60405161019c9190611ab3565b60405180910390f35b3480156101b0575f80fd5b506101c46101bf366004611afc565b610472565b604051901515815260200161019c565b3480156101df575f80fd5b506101e960125481565b60405190815260200161019c565b348015610202575f80fd5b50601354610216906001600160a01b031681565b6040516001600160a01b03909116815260200161019c565b348015610239575f80fd5b506101e9610488565b34801561024d575f80fd5b506101c461025c366004611b26565b6104a8565b34801561026c575f80fd5b506040516009815260200161019c565b348015610287575f80fd5b50601454610216906001600160a01b031681565b3480156102a6575f80fd5b506101e960155481565b3480156102bb575f80fd5b506102c461050f565b005b3480156102d1575f80fd5b506102c46102e0366004611b64565b610560565b3480156102f0575f80fd5b506101e96102ff366004611b9b565b6001600160a01b03165f9081526001602052604090205490565b348015610324575f80fd5b506102c4610662565b348015610338575f80fd5b506102c46106d3565b34801561034c575f80fd5b506101e9600f5481565b348015610361575f80fd5b505f546001600160a01b0316610216565b34801561037d575f80fd5b506101e960105481565b348015610392575f80fd5b50604080518082019091526005815264307852574160d81b602082015261018f565b3480156103bf575f80fd5b506101c46103ce366004611afc565b61078e565b3480156103de575f80fd5b506101e960115481565b3480156103f3575f80fd5b506003546101c49060ff1681565b34801561040c575f80fd5b506102c461079a565b348015610420575f80fd5b506101e961042f366004611b64565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610464575f80fd5b506016546101c49060ff1681565b5f61047e338484610b3a565b5060015b92915050565b5f6104956009600a611caa565b6104a390633b9aca00611cb8565b905090565b5f6104b4848484610c5d565b610505843361050085604051806060016040528060288152602001611e7e602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190611466565b610b3a565b5060019392505050565b6006546001600160a01b0316336001600160a01b03161461052e575f80fd5b305f90815260016020526040902054801561054c5761054c8161149e565b47801561055c5761055c81611608565b5050565b5f546001600160a01b031633146105925760405162461bcd60e51b815260040161058990611ccf565b60405180910390fd5b6001600160a01b0382166105e85760405162461bcd60e51b815260206004820152601d60248201527f5f746f6b656e20616464726573732063616e6e6f74206265207a65726f0000006044820152606401610589565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561062c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106509190611d04565b905061065d83838361163f565b505050565b5f546001600160a01b0316331461068b5760405162461bcd60e51b815260040161058990611ccf565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146106fc5760405162461bcd60e51b815260040161058990611ccf565b6107086009600a611caa565b61071690633b9aca00611cb8565b600f556107256009600a611caa565b61073390633b9aca00611cb8565b6010556003805460ff191690557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf61076d6009600a611caa565b61077b90633b9aca00611cb8565b60405190815260200160405180910390a1565b5f61047e338484610c5d565b5f546001600160a01b031633146107c35760405162461bcd60e51b815260040161058990611ccf565b60165460ff16156108165760405162461bcd60e51b815260206004820152601860248201527f74726164696e6720697320616c7265616479206f70656e2e00000000000000006044820152606401610589565b601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561085f9030906108516009600a611caa565b61050090633b9aca00611cb8565b60135f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d39190611d1b565b6001600160a01b031663c9c653963060135f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610932573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109569190611d1b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156109a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c49190611d1b565b601480546001600160a01b039283166001600160a01b03199091161790556013541663f305d7194730610a0b816001600160a01b03165f9081526001602052604090205490565b5f80610a1e5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610a84573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610aa99190611d36565b505060145460135460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610afe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b229190611d61565b50601680544360155562ff00ff191662010001179055565b6001600160a01b038316610b9c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610589565b6001600160a01b038216610bfd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610589565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610cc15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610589565b6001600160a01b038216610d235760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610589565b5f8111610d845760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610589565b5f80546001600160a01b03858116911614801590610daf57505f546001600160a01b03848116911614155b156110e757610de06064610dda600b54600e5411610dcf57600754610dd3565b6009545b8590611691565b90611716565b60035490915060ff1615610ec5576013546001600160a01b03848116911614801590610e1a57506014546001600160a01b03848116911614155b15610ec557325f908152600460205260409020544311610eb35760405162461bcd60e51b815260206004820152604860248201527f5f7472616e736665723a3a205472616e736665722044656c617920456e61626c60448201527f65642e204f6e6c79206f6e652070757263686173652070657220626c6f636b2060648201526730b63637bbb2b21760c11b608482015260a401610589565b325f9081526004602052604090204390555b6014546001600160a01b038581169116148015610ef057506013546001600160a01b03848116911614155b8015610f1457506001600160a01b0383165f9081526005602052604090205460ff16155b15610ffa57600f54821115610f6b5760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e000000000000006044820152606401610589565b60105482610f8d856001600160a01b03165f9081526001602052604090205490565b610f979190611d80565b1115610fe55760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610589565b600e8054905f610ff483611d93565b91905055505b6014546001600160a01b03848116911614801561102057506001600160a01b0384163014155b1561104d5761104a6064610dda600c54600e541161104057600854610dd3565b600a548590611691565b90505b305f90815260016020526040902054601654610100900460ff1615801561108157506014546001600160a01b038581169116145b8015611095575060165462010000900460ff165b80156110a2575060115481115b80156110b15750600d54600e54115b156110e5576110d36110ce846110c984601254611757565b611757565b61149e565b4780156110e3576110e347611608565b505b505b6001600160a01b0384165f9081526005602052604090205460ff168061112457506001600160a01b0383165f9081526005602052604090205460ff165b801561113d57505f546001600160a01b03858116911614155b801561115257506001600160a01b0384163014155b801561116757506001600160a01b0383163014155b1561117157426018555b6001600160a01b0384165f9081526005602052604090205460ff1680156111a65750600c546015546111a39190611d80565b43115b1561121a576001600160a01b038085165f81815260016020526040808220805487900390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061120c9086815260200190565b60405180910390a350505050565b6001600160a01b0384165f9081526005602052604090205460ff1615801561125a57506001600160a01b0383165f9081526005602052604090205460ff16155b15611332576014546001600160a01b038481169116146112ff576001600160a01b038084165f90815260176020526040902060145490918681169116036112c75780545f036112c257600d54600e54106112b457426112bf565b6112bf600142611dab565b81555b6112f9565b6001600160a01b0385165f908152601760205260409020815415806112ed575081548154105b156112f757805482555b505b50611332565b6001600160a01b0384165f90815260176020526040902060185481546113259190611dab565b6002820155426001909101555b80156113aa57305f90815260016020526040902054611351908261176b565b305f81815260016020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113a19085815260200190565b60405180910390a35b6001600160a01b0384165f908152600160205260409020546113cc90836117c9565b6001600160a01b0385165f9081526001602052604090205561140f6113f183836117c9565b6001600160a01b0385165f908152600160205260409020549061176b565b6001600160a01b038085165f8181526001602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61145885856117c9565b60405190815260200161120c565b5f81848411156114895760405162461bcd60e51b81526004016105899190611ab3565b505f6114958486611dab565b95945050505050565b6016805461ff0019166101001790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106114e0576114e0611dbe565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611537573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061155b9190611d1b565b8160018151811061156e5761156e611dbe565b6001600160a01b0392831660209182029290920101526013546115949130911684610b3a565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac947906115cc9085905f90869030904290600401611dd2565b5f604051808303815f87803b1580156115e3575f80fd5b505af11580156115f5573d5f803e3d5ffd5b50506016805461ff001916905550505050565b6006546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561055c573d5f803e3d5ffd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261065d90849061180a565b5f825f036116a057505f610482565b5f6116ab8385611cb8565b9050826116b88583611e43565b1461170f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610589565b9392505050565b5f61170f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118db565b5f818311611765578261170f565b50919050565b5f806117778385611d80565b90508381101561170f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610589565b5f61170f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611466565b5f61185e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119079092919063ffffffff16565b80519091501561065d578080602001905181019061187c9190611d61565b61065d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610589565b5f81836118fb5760405162461bcd60e51b81526004016105899190611ab3565b505f6114958486611e43565b606061191584845f8561191d565b949350505050565b60608247101561197e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610589565b5f80866001600160a01b031685876040516119999190611e62565b5f6040518083038185875af1925050503d805f81146119d3576040519150601f19603f3d011682016040523d82523d5f602084013e6119d8565b606091505b50915091506119e9878383876119f4565b979650505050505050565b60608315611a625782515f03611a5b576001600160a01b0385163b611a5b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610589565b5081611915565b6119158383815115611a775781518083602001fd5b8060405162461bcd60e51b81526004016105899190611ab3565b5f5b83811015611aab578181015183820152602001611a93565b50505f910152565b602081525f8251806020840152611ad1816040850160208701611a91565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611af9575f80fd5b50565b5f8060408385031215611b0d575f80fd5b8235611b1881611ae5565b946020939093013593505050565b5f805f60608486031215611b38575f80fd5b8335611b4381611ae5565b92506020840135611b5381611ae5565b929592945050506040919091013590565b5f8060408385031215611b75575f80fd5b8235611b8081611ae5565b91506020830135611b9081611ae5565b809150509250929050565b5f60208284031215611bab575f80fd5b813561170f81611ae5565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115611c0457815f1904821115611bea57611bea611bb6565b80851615611bf757918102915b93841c9390800290611bcf565b509250929050565b5f82611c1a57506001610482565b81611c2657505f610482565b8160018114611c3c5760028114611c4657611c62565b6001915050610482565b60ff841115611c5757611c57611bb6565b50506001821b610482565b5060208310610133831016604e8410600b8410161715611c85575081810a610482565b611c8f8383611bca565b805f1904821115611ca257611ca2611bb6565b029392505050565b5f61170f60ff841683611c0c565b808202811582820484141761048257610482611bb6565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215611d14575f80fd5b5051919050565b5f60208284031215611d2b575f80fd5b815161170f81611ae5565b5f805f60608486031215611d48575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215611d71575f80fd5b8151801515811461170f575f80fd5b8082018082111561048257610482611bb6565b5f60018201611da457611da4611bb6565b5060010190565b8181038181111561048257610482611bb6565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015611e225784516001600160a01b031683529383019391830191600101611dfd565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82611e5d57634e487b7160e01b5f52601260045260245ffd5b500490565b5f8251611e73818460208701611a91565b919091019291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122018f9a133042606a61f2548852fb5b1b6db5d862380a211739f6c8840c0f2c09764736f6c63430008160033
Deployed Bytecode
0x60806040526004361061014a575f3560e01c8063715018a6116100b3578063a9059cbb1161006d578063a9059cbb146103b4578063bf474bed146103d3578063c876d0b9146103e8578063c9567bf914610401578063dd62ed3e14610415578063ffb54a9914610459575f80fd5b8063715018a614610319578063751039fc1461032d5780637d1db4a5146103415780638da5cb5b146103565780638f9a55c01461037257806395d89b4114610387575f80fd5b8063313ce56711610104578063313ce5671461026157806349bd5a5e1461027c578063511ed0881461029b57806351bc3c85146102b05780635a4882d1146102c657806370a08231146102e5575f80fd5b806306fdde0314610155578063095ea7b3146101a55780630faee56f146101d45780631694505e146101f757806318160ddd1461022e57806323b872dd14610242575f80fd5b3661015157005b5f80fd5b348015610160575f80fd5b506040805180820190915260168152751155934b58985cd959081495d048141c9bdd1bd8dbdb60521b60208201525b60405161019c9190611ab3565b60405180910390f35b3480156101b0575f80fd5b506101c46101bf366004611afc565b610472565b604051901515815260200161019c565b3480156101df575f80fd5b506101e960125481565b60405190815260200161019c565b348015610202575f80fd5b50601354610216906001600160a01b031681565b6040516001600160a01b03909116815260200161019c565b348015610239575f80fd5b506101e9610488565b34801561024d575f80fd5b506101c461025c366004611b26565b6104a8565b34801561026c575f80fd5b506040516009815260200161019c565b348015610287575f80fd5b50601454610216906001600160a01b031681565b3480156102a6575f80fd5b506101e960155481565b3480156102bb575f80fd5b506102c461050f565b005b3480156102d1575f80fd5b506102c46102e0366004611b64565b610560565b3480156102f0575f80fd5b506101e96102ff366004611b9b565b6001600160a01b03165f9081526001602052604090205490565b348015610324575f80fd5b506102c4610662565b348015610338575f80fd5b506102c46106d3565b34801561034c575f80fd5b506101e9600f5481565b348015610361575f80fd5b505f546001600160a01b0316610216565b34801561037d575f80fd5b506101e960105481565b348015610392575f80fd5b50604080518082019091526005815264307852574160d81b602082015261018f565b3480156103bf575f80fd5b506101c46103ce366004611afc565b61078e565b3480156103de575f80fd5b506101e960115481565b3480156103f3575f80fd5b506003546101c49060ff1681565b34801561040c575f80fd5b506102c461079a565b348015610420575f80fd5b506101e961042f366004611b64565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610464575f80fd5b506016546101c49060ff1681565b5f61047e338484610b3a565b5060015b92915050565b5f6104956009600a611caa565b6104a390633b9aca00611cb8565b905090565b5f6104b4848484610c5d565b610505843361050085604051806060016040528060288152602001611e7e602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190611466565b610b3a565b5060019392505050565b6006546001600160a01b0316336001600160a01b03161461052e575f80fd5b305f90815260016020526040902054801561054c5761054c8161149e565b47801561055c5761055c81611608565b5050565b5f546001600160a01b031633146105925760405162461bcd60e51b815260040161058990611ccf565b60405180910390fd5b6001600160a01b0382166105e85760405162461bcd60e51b815260206004820152601d60248201527f5f746f6b656e20616464726573732063616e6e6f74206265207a65726f0000006044820152606401610589565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561062c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106509190611d04565b905061065d83838361163f565b505050565b5f546001600160a01b0316331461068b5760405162461bcd60e51b815260040161058990611ccf565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146106fc5760405162461bcd60e51b815260040161058990611ccf565b6107086009600a611caa565b61071690633b9aca00611cb8565b600f556107256009600a611caa565b61073390633b9aca00611cb8565b6010556003805460ff191690557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf61076d6009600a611caa565b61077b90633b9aca00611cb8565b60405190815260200160405180910390a1565b5f61047e338484610c5d565b5f546001600160a01b031633146107c35760405162461bcd60e51b815260040161058990611ccf565b60165460ff16156108165760405162461bcd60e51b815260206004820152601860248201527f74726164696e6720697320616c7265616479206f70656e2e00000000000000006044820152606401610589565b601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561085f9030906108516009600a611caa565b61050090633b9aca00611cb8565b60135f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d39190611d1b565b6001600160a01b031663c9c653963060135f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610932573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109569190611d1b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156109a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c49190611d1b565b601480546001600160a01b039283166001600160a01b03199091161790556013541663f305d7194730610a0b816001600160a01b03165f9081526001602052604090205490565b5f80610a1e5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610a84573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610aa99190611d36565b505060145460135460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610afe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b229190611d61565b50601680544360155562ff00ff191662010001179055565b6001600160a01b038316610b9c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610589565b6001600160a01b038216610bfd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610589565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610cc15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610589565b6001600160a01b038216610d235760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610589565b5f8111610d845760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610589565b5f80546001600160a01b03858116911614801590610daf57505f546001600160a01b03848116911614155b156110e757610de06064610dda600b54600e5411610dcf57600754610dd3565b6009545b8590611691565b90611716565b60035490915060ff1615610ec5576013546001600160a01b03848116911614801590610e1a57506014546001600160a01b03848116911614155b15610ec557325f908152600460205260409020544311610eb35760405162461bcd60e51b815260206004820152604860248201527f5f7472616e736665723a3a205472616e736665722044656c617920456e61626c60448201527f65642e204f6e6c79206f6e652070757263686173652070657220626c6f636b2060648201526730b63637bbb2b21760c11b608482015260a401610589565b325f9081526004602052604090204390555b6014546001600160a01b038581169116148015610ef057506013546001600160a01b03848116911614155b8015610f1457506001600160a01b0383165f9081526005602052604090205460ff16155b15610ffa57600f54821115610f6b5760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e000000000000006044820152606401610589565b60105482610f8d856001600160a01b03165f9081526001602052604090205490565b610f979190611d80565b1115610fe55760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610589565b600e8054905f610ff483611d93565b91905055505b6014546001600160a01b03848116911614801561102057506001600160a01b0384163014155b1561104d5761104a6064610dda600c54600e541161104057600854610dd3565b600a548590611691565b90505b305f90815260016020526040902054601654610100900460ff1615801561108157506014546001600160a01b038581169116145b8015611095575060165462010000900460ff165b80156110a2575060115481115b80156110b15750600d54600e54115b156110e5576110d36110ce846110c984601254611757565b611757565b61149e565b4780156110e3576110e347611608565b505b505b6001600160a01b0384165f9081526005602052604090205460ff168061112457506001600160a01b0383165f9081526005602052604090205460ff165b801561113d57505f546001600160a01b03858116911614155b801561115257506001600160a01b0384163014155b801561116757506001600160a01b0383163014155b1561117157426018555b6001600160a01b0384165f9081526005602052604090205460ff1680156111a65750600c546015546111a39190611d80565b43115b1561121a576001600160a01b038085165f81815260016020526040808220805487900390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061120c9086815260200190565b60405180910390a350505050565b6001600160a01b0384165f9081526005602052604090205460ff1615801561125a57506001600160a01b0383165f9081526005602052604090205460ff16155b15611332576014546001600160a01b038481169116146112ff576001600160a01b038084165f90815260176020526040902060145490918681169116036112c75780545f036112c257600d54600e54106112b457426112bf565b6112bf600142611dab565b81555b6112f9565b6001600160a01b0385165f908152601760205260409020815415806112ed575081548154105b156112f757805482555b505b50611332565b6001600160a01b0384165f90815260176020526040902060185481546113259190611dab565b6002820155426001909101555b80156113aa57305f90815260016020526040902054611351908261176b565b305f81815260016020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113a19085815260200190565b60405180910390a35b6001600160a01b0384165f908152600160205260409020546113cc90836117c9565b6001600160a01b0385165f9081526001602052604090205561140f6113f183836117c9565b6001600160a01b0385165f908152600160205260409020549061176b565b6001600160a01b038085165f8181526001602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61145885856117c9565b60405190815260200161120c565b5f81848411156114895760405162461bcd60e51b81526004016105899190611ab3565b505f6114958486611dab565b95945050505050565b6016805461ff0019166101001790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106114e0576114e0611dbe565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611537573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061155b9190611d1b565b8160018151811061156e5761156e611dbe565b6001600160a01b0392831660209182029290920101526013546115949130911684610b3a565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac947906115cc9085905f90869030904290600401611dd2565b5f604051808303815f87803b1580156115e3575f80fd5b505af11580156115f5573d5f803e3d5ffd5b50506016805461ff001916905550505050565b6006546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561055c573d5f803e3d5ffd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261065d90849061180a565b5f825f036116a057505f610482565b5f6116ab8385611cb8565b9050826116b88583611e43565b1461170f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610589565b9392505050565b5f61170f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118db565b5f818311611765578261170f565b50919050565b5f806117778385611d80565b90508381101561170f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610589565b5f61170f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611466565b5f61185e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119079092919063ffffffff16565b80519091501561065d578080602001905181019061187c9190611d61565b61065d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610589565b5f81836118fb5760405162461bcd60e51b81526004016105899190611ab3565b505f6114958486611e43565b606061191584845f8561191d565b949350505050565b60608247101561197e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610589565b5f80866001600160a01b031685876040516119999190611e62565b5f6040518083038185875af1925050503d805f81146119d3576040519150601f19603f3d011682016040523d82523d5f602084013e6119d8565b606091505b50915091506119e9878383876119f4565b979650505050505050565b60608315611a625782515f03611a5b576001600160a01b0385163b611a5b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610589565b5081611915565b6119158383815115611a775781518083602001fd5b8060405162461bcd60e51b81526004016105899190611ab3565b5f5b83811015611aab578181015183820152602001611a93565b50505f910152565b602081525f8251806020840152611ad1816040850160208701611a91565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611af9575f80fd5b50565b5f8060408385031215611b0d575f80fd5b8235611b1881611ae5565b946020939093013593505050565b5f805f60608486031215611b38575f80fd5b8335611b4381611ae5565b92506020840135611b5381611ae5565b929592945050506040919091013590565b5f8060408385031215611b75575f80fd5b8235611b8081611ae5565b91506020830135611b9081611ae5565b809150509250929050565b5f60208284031215611bab575f80fd5b813561170f81611ae5565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115611c0457815f1904821115611bea57611bea611bb6565b80851615611bf757918102915b93841c9390800290611bcf565b509250929050565b5f82611c1a57506001610482565b81611c2657505f610482565b8160018114611c3c5760028114611c4657611c62565b6001915050610482565b60ff841115611c5757611c57611bb6565b50506001821b610482565b5060208310610133831016604e8410600b8410161715611c85575081810a610482565b611c8f8383611bca565b805f1904821115611ca257611ca2611bb6565b029392505050565b5f61170f60ff841683611c0c565b808202811582820484141761048257610482611bb6565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215611d14575f80fd5b5051919050565b5f60208284031215611d2b575f80fd5b815161170f81611ae5565b5f805f60608486031215611d48575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215611d71575f80fd5b8151801515811461170f575f80fd5b8082018082111561048257610482611bb6565b5f60018201611da457611da4611bb6565b5060010190565b8181038181111561048257610482611bb6565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015611e225784516001600160a01b031683529383019391830191600101611dfd565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82611e5d57634e487b7160e01b5f52601260045260245ffd5b500490565b5f8251611e73818460208701611a91565b919091019291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122018f9a133042606a61f2548852fb5b1b6db5d862380a211739f6c8840c0f2c09764736f6c63430008160033
Deployed Bytecode Sourcemap
13960:10511:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16099:83;;;;;;;;;;-1:-1:-1;16169:5:0;;;;;;;;;;;;-1:-1:-1;;;16169:5:0;;;;16099:83;;;;;;;:::i;:::-;;;;;;;;16932:161;;;;;;;;;;-1:-1:-1;16932:161:0;;;;;:::i;:::-;;:::i;:::-;;;1291:14:1;;1284:22;1266:41;;1254:2;1239:18;16932:161:0;1126:187:1;15168:55:0;;;;;;;;;;;;;;;;;;;1464:25:1;;;1452:2;1437:18;15168:55:0;1318:177:1;15230:41:0;;;;;;;;;;-1:-1:-1;15230:41:0;;;;-1:-1:-1;;;;;15230:41:0;;;;;;-1:-1:-1;;;;;1690:32:1;;;1672:51;;1660:2;1645:18;15230:41:0;1500:229:1;16376:95:0;;;;;;;;;;;;;:::i;17101:446::-;;;;;;;;;;-1:-1:-1;17101:446:0;;;;;:::i;:::-;;:::i;16285:83::-;;;;;;;;;;-1:-1:-1;16285:83:0;;14840:1;2337:36:1;;2325:2;2310:18;16285:83:0;2195:184:1;15278:28:0;;;;;;;;;;-1:-1:-1;15278:28:0;;;;-1:-1:-1;;;;;15278:28:0;;;15313;;;;;;;;;;;;;;;;24102:366;;;;;;;;;;;;;:::i;:::-;;22904:304;;;;;;;;;;-1:-1:-1;22904:304:0;;;;;:::i;:::-;;:::i;16479:119::-;;;;;;;;;;-1:-1:-1;16479:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;16572:18:0;16545:7;16572:18;;;:9;:18;;;;;;;16479:119;5409:148;;;;;;;;;;;;;:::i;22595:201::-;;;;;;;;;;;;;:::i;14973:56::-;;;;;;;;;;;;;;;;5195:79;;;;;;;;;;-1:-1:-1;5233:7:0;5260:6;-1:-1:-1;;;;;5260:6:0;5195:79;;15036:58;;;;;;;;;;;;;;;;16190:87;;;;;;;;;;-1:-1:-1;16262:7:0;;;;;;;;;;;;-1:-1:-1;;;16262:7:0;;;;16190:87;;16606:167;;;;;;;;;;-1:-1:-1;16606:167:0;;;;;:::i;:::-;;:::i;15101:60::-;;;;;;;;;;;;;;;;14186:39;;;;;;;;;;-1:-1:-1;14186:39:0;;;;;;;;23216:841;;;;;;;;;;;;;:::i;16781:143::-;;;;;;;;;;-1:-1:-1;16781:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;16889:18:0;;;16862:7;16889:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16781:143;15348:23;;;;;;;;;;-1:-1:-1;15348:23:0;;;;;;;;16932:161;17007:4;17024:39;370:10;17047:7;17056:6;17024:8;:39::i;:::-;-1:-1:-1;17081:4:0;16932:161;;;;;:::o;16376:95::-;16429:7;14783:15;14840:1;14783:2;:15;:::i;:::-;14770:28;;:10;:28;:::i;:::-;16449:14;;16376:95;:::o;17101:446::-;17233:4;17250:36;17260:6;17268:9;17279:6;17250:9;:36::i;:::-;17297:220;17320:6;370:10;17368:138;17424:6;17368:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17368:19:0;;;;;;:11;:19;;;;;;;;370:10;17368:33;;;;;;;;;;:37;:138::i;:::-;17297:8;:220::i;:::-;-1:-1:-1;17535:4:0;17101:446;;;;;:::o;24102:366::-;24168:10;;-1:-1:-1;;;;;24168:10:0;370;-1:-1:-1;;;;;24152:26:0;;24144:35;;;;;;24231:4;24190:20;16572:18;;;:9;:18;;;;;;24252:16;;24248:79;;24285:30;24302:12;24285:16;:30::i;:::-;24358:21;24394:14;;24390:71;;24425:24;24438:10;24425:12;:24::i;:::-;24133:335;;24102:366::o;22904:304::-;5322:6;;-1:-1:-1;;;;;5322:6:0;370:10;5322:22;5314:67;;;;-1:-1:-1;;;5314:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;22997:20:0;::::1;22989:62;;;::::0;-1:-1:-1;;;22989:62:0;;5482:2:1;22989:62:0::1;::::0;::::1;5464:21:1::0;5521:2;5501:18;;;5494:30;5560:31;5540:18;;;5533:59;5609:18;;22989:62:0::1;5280:353:1::0;22989:62:0::1;23089:39;::::0;-1:-1:-1;;;23089:39:0;;23122:4:::1;23089:39;::::0;::::1;1672:51:1::0;23062:24:0::1;::::0;-1:-1:-1;;;;;23089:24:0;::::1;::::0;::::1;::::0;1645:18:1;;23089:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23062:66;;23139:61;23169:6;23178:3;23183:16;23139:22;:61::i;:::-;22978:230;22904:304:::0;;:::o;5409:148::-;5322:6;;-1:-1:-1;;;;;5322:6:0;370:10;5322:22;5314:67;;;;-1:-1:-1;;;5314:67:0;;;;;;;:::i;:::-;5516:1:::1;5500:6:::0;;5479:40:::1;::::0;-1:-1:-1;;;;;5500:6:0;;::::1;::::0;5479:40:::1;::::0;5516:1;;5479:40:::1;5547:1;5530:19:::0;;-1:-1:-1;;;;;;5530:19:0::1;::::0;;5409:148::o;22595:201::-;5322:6;;-1:-1:-1;;;;;5322:6:0;370:10;5322:22;5314:67;;;;-1:-1:-1;;;5314:67:0;;;;;;;:::i;:::-;14783:15:::1;14840:1;14783:2;:15;:::i;:::-;14770:28;::::0;:10:::1;:28;:::i;:::-;22649:12;:22:::0;14783:15:::1;14840:1;14783:2;:15;:::i;:::-;14770:28;::::0;:10:::1;:28;:::i;:::-;22682:14;:24:::0;22717:20:::1;:28:::0;;-1:-1:-1;;22717:28:0::1;::::0;;22761:27:::1;14783:15;14840:1;14783:2;:15;:::i;:::-;14770:28;::::0;:10:::1;:28;:::i;:::-;22761:27;::::0;1464:25:1;;;1452:2;1437:18;22761:27:0::1;;;;;;;22595:201::o:0;16606:167::-;16684:4;16701:42;370:10;16725:9;16736:6;16701:9;:42::i;23216:841::-;5322:6;;-1:-1:-1;;;;;5322:6:0;370:10;5322:22;5314:67;;;;-1:-1:-1;;;5314:67:0;;;;;;;:::i;:::-;23278:11:::1;::::0;::::1;;23277:12;23269:49;;;::::0;-1:-1:-1;;;23269:49:0;;6029:2:1;23269:49:0::1;::::0;::::1;6011:21:1::0;6068:2;6048:18;;;6041:30;6107:26;6087:18;;;6080:54;6151:18;;23269:49:0::1;5827:348:1::0;23269:49:0::1;23329:15;:80:::0;;-1:-1:-1;;;;;;23329:80:0::1;23366:42;23329:80:::0;;::::1;::::0;;;23420:58:::1;::::0;23437:4:::1;::::0;14783:15:::1;14840:1;14783:2;:15;:::i;:::-;14770:28;::::0;:10:::1;:28;:::i;23420:58::-;23523:15;;;;;;;;;-1:-1:-1::0;;;;;23523:15:0::1;-1:-1:-1::0;;;;;23523:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23505:55:0::1;;23583:4;23603:15;;;;;;;;;-1:-1:-1::0;;;;;23603:15:0::1;-1:-1:-1::0;;;;;23603:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23505:131;::::0;-1:-1:-1;;;;;;23505:131:0::1;::::0;;;;;;-1:-1:-1;;;;;6666:15:1;;;23505:131:0::1;::::0;::::1;6648:34:1::0;6718:15;;6698:18;;;6691:43;6583:18;;23505:131:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23489:13;:147:::0;;-1:-1:-1;;;;;23489:147:0;;::::1;-1:-1:-1::0;;;;;;23489:147:0;;::::1;;::::0;;23647:15:::1;::::0;::::1;:31;23686:21;23731:4;23751:24;23731:4:::0;-1:-1:-1;;;;;16572:18:0;16545:7;16572:18;;;:9;:18;;;;;;;16479:119;23751:24:::1;23790:1;23806::::0;23822:7:::1;5233::::0;5260:6;-1:-1:-1;;;;;5260:6:0;;5195:79;23822:7:::1;23647:223;::::0;::::1;::::0;;;-1:-1:-1;;;;;;23647:223:0;;;-1:-1:-1;;;;;7104:15:1;;;23647:223:0::1;::::0;::::1;7086:34:1::0;7136:18;;;7129:34;;;;7179:18;;;7172:34;;;;7222:18;;;7215:34;7286:15;;;7265:19;;;7258:44;23844:15:0::1;7318:19:1::0;;;7311:35;7020:19;;23647:223:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23888:13:0::1;::::0;23919:15:::1;::::0;23881:71:::1;::::0;-1:-1:-1;;;23881:71:0;;-1:-1:-1;;;;;23919:15:0;;::::1;23881:71;::::0;::::1;7842:51:1::0;-1:-1:-1;;7909:18:1;;;7902:34;23888:13:0;::::1;::::0;-1:-1:-1;23881:29:0::1;::::0;7815:18:1;;23881:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;23963:11:0::1;:18:::0;;24008:12:::1;23992:13;:28:::0;-1:-1:-1;;24031:18:0;;;;;23216:841::o;17555:335::-;-1:-1:-1;;;;;17648:19:0;;17640:68;;;;-1:-1:-1;;;17640:68:0;;8431:2:1;17640:68:0;;;8413:21:1;8470:2;8450:18;;;8443:30;8509:34;8489:18;;;8482:62;-1:-1:-1;;;8560:18:1;;;8553:34;8604:19;;17640:68:0;8229:400:1;17640:68:0;-1:-1:-1;;;;;17727:21:0;;17719:68;;;;-1:-1:-1;;;17719:68:0;;8836:2:1;17719:68:0;;;8818:21:1;8875:2;8855:18;;;8848:30;8914:34;8894:18;;;8887:62;-1:-1:-1;;;8965:18:1;;;8958:32;9007:19;;17719:68:0;8634:398:1;17719:68:0;-1:-1:-1;;;;;17798:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17850:32;;1464:25:1;;;17850:32:0;;1437:18:1;17850:32:0;;;;;;;17555:335;;;:::o;17898:4083::-;-1:-1:-1;;;;;17986:18:0;;17978:68;;;;-1:-1:-1;;;17978:68:0;;9239:2:1;17978:68:0;;;9221:21:1;9278:2;9258:18;;;9251:30;9317:34;9297:18;;;9290:62;-1:-1:-1;;;9368:18:1;;;9361:35;9413:19;;17978:68:0;9037:401:1;17978:68:0;-1:-1:-1;;;;;18065:16:0;;18057:64;;;;-1:-1:-1;;;18057:64:0;;9645:2:1;18057:64:0;;;9627:21:1;9684:2;9664:18;;;9657:30;9723:34;9703:18;;;9696:62;-1:-1:-1;;;9774:18:1;;;9767:33;9817:19;;18057:64:0;9443:399:1;18057:64:0;18149:1;18140:6;:10;18132:64;;;;-1:-1:-1;;;18132:64:0;;10049:2:1;18132:64:0;;;10031:21:1;10088:2;10068:18;;;10061:30;10127:34;10107:18;;;10100:62;-1:-1:-1;;;10178:18:1;;;10171:39;10227:19;;18132:64:0;9847:405:1;18132:64:0;18207:17;5260:6;;-1:-1:-1;;;;;18243:15:0;;;5260:6;;18243:15;;;;:32;;-1:-1:-1;5233:7:0;5260:6;-1:-1:-1;;;;;18262:13:0;;;5260:6;;18262:13;;18243:32;18239:1848;;;18304:118;18418:3;18304:91;18346:15;;18334:9;;:27;18333:61;;18380:14;;18333:61;;;18365:12;;18333:61;18304:6;;:28;:91::i;:::-;:113;;:118::i;:::-;18443:20;;18292:130;;-1:-1:-1;18443:20:0;;18439:460;;;18502:15;;-1:-1:-1;;;;;18488:30:0;;;18502:15;;18488:30;;;;:62;;-1:-1:-1;18536:13:0;;-1:-1:-1;;;;;18522:28:0;;;18536:13;;18522:28;;18488:62;18484:400;;;18638:9;18609:39;;;;:28;:39;;;;;;18651:12;-1:-1:-1;18575:212:0;;;;-1:-1:-1;;;18575:212:0;;10459:2:1;18575:212:0;;;10441:21:1;10498:2;10478:18;;;10471:30;10537:34;10517:18;;;10510:62;10608:34;10588:18;;;10581:62;-1:-1:-1;;;10659:19:1;;;10652:39;10708:19;;18575:212:0;10257:476:1;18575:212:0;18839:9;18810:39;;;;:28;:39;;;;;18852:12;18810:54;;18484:400;18927:13;;-1:-1:-1;;;;;18919:21:0;;;18927:13;;18919:21;:55;;;;-1:-1:-1;18958:15:0;;-1:-1:-1;;;;;18944:30:0;;;18958:15;;18944:30;;18919:55;:78;;;;-1:-1:-1;;;;;;18979:18:0;;;;;;:14;:18;;;;;;;;18978:19;18919:78;18915:307;;;19036:12;;19026:6;:22;;19018:60;;;;-1:-1:-1;;;19018:60:0;;10940:2:1;19018:60:0;;;10922:21:1;10979:2;10959:18;;;10952:30;11018:27;10998:18;;;10991:55;11063:18;;19018:60:0;10738:349:1;19018:60:0;19131:14;;19121:6;19105:13;19115:2;-1:-1:-1;;;;;16572:18:0;16545:7;16572:18;;;:9;:18;;;;;;;16479:119;19105:13;:22;;;;:::i;:::-;:40;;19097:79;;;;-1:-1:-1;;;19097:79:0;;11424:2:1;19097:79:0;;;11406:21:1;11463:2;11443:18;;;11436:30;11502:28;11482:18;;;11475:56;11548:18;;19097:79:0;11222:350:1;19097:79:0;19195:9;:11;;;:9;:11;;;:::i;:::-;;;;;;18915:307;19248:13;;-1:-1:-1;;;;;19242:19:0;;;19248:13;;19242:19;:44;;;;-1:-1:-1;;;;;;19265:21:0;;19281:4;19265:21;;19242:44;19238:226;;;19319:129;19444:3;19319:98;19365:16;;19353:9;;:28;19352:64;;19401:15;;19352:64;;;19385:13;;19319:6;;:32;:98::i;:129::-;19307:141;;19238:226;19529:4;19480:28;16572:18;;;:9;:18;;;;;;19573:6;;;;;;;19572:7;:47;;;;-1:-1:-1;19606:13:0;;-1:-1:-1;;;;;19600:19:0;;;19606:13;;19600:19;19572:47;:79;;;;-1:-1:-1;19640:11:0;;;;;;;19572:79;:140;;;;;19695:17;;19672:20;:40;19572:140;:191;;;;;19745:18;;19733:9;;:30;19572:191;19550:526;;;19798:69;19815:51;19819:6;19827:38;19831:20;19853:11;;19827:3;:38::i;:::-;19815:3;:51::i;:::-;19798:16;:69::i;:::-;19915:21;19959:22;;19955:106;;20006:35;20019:21;20006:12;:35::i;:::-;19779:297;19550:526;18277:1810;18239:1848;-1:-1:-1;;;;;20118:20:0;;;;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;20142:18:0;;;;;;:14;:18;;;;;;;;20118:42;20117:76;;;;-1:-1:-1;5233:7:0;5260:6;-1:-1:-1;;;;;20178:15:0;;;5260:6;;20178:15;;20117:76;:114;;;;-1:-1:-1;;;;;;20210:21:0;;20226:4;20210:21;;20117:114;:150;;;;-1:-1:-1;;;;;;20248:19:0;;20262:4;20248:19;;20117:150;20099:233;;;20305:15;20294:8;:26;20099:233;-1:-1:-1;;;;;20346:20:0;;;;;;:14;:20;;;;;;;;:75;;;;;20403:16;;20387:13;;:32;;;;:::i;:::-;20371:12;:49;20346:75;20342:286;;;-1:-1:-1;;;;;20467:15:0;;;;;;;:9;:15;;;;;;:25;;;;;;;20511:13;;;;;;;;;;:23;;;;;;20569:26;;;;;;20486:6;1464:25:1;;1452:2;1437:18;;1318:177;20569:26:0;;;;;;;;20610:7;17898:4083;;;:::o;20342:286::-;-1:-1:-1;;;;;20643:20:0;;;;;;:14;:20;;;;;;;;20642:21;:44;;;;-1:-1:-1;;;;;;20668:18:0;;;;;;:14;:18;;;;;;;;20667:19;20642:44;20638:972;;;20707:13;;-1:-1:-1;;;;;20707:19:0;;;:13;;:19;20703:896;;-1:-1:-1;;;;;20775:11:0;;;20747:25;20775:11;;;:7;:11;;;;;20809:13;;20775:11;;20809:21;;;:13;;:21;20805:568;;20859:16;;;:21;20855:229;;20941:18;;20929:9;;:30;20928:132;;21045:15;20928:132;;;20993:19;21011:1;20993:15;:19;:::i;:::-;20909:151;;20855:229;20805:568;;;-1:-1:-1;;;;;21162:13:0;;21132:27;21162:13;;;:7;:13;;;;;21202:16;;:21;;:62;;-1:-1:-1;21248:16:0;;21227:18;;:37;21202:62;21198:156;;;21312:18;;21293:37;;21198:156;21109:264;20805:568;20728:660;20703:896;;;-1:-1:-1;;;;;21443:13:0;;21413:27;21443:13;;;:7;:13;;;;;21519:8;;21498:18;;:29;;21519:8;21498:29;:::i;:::-;21475:20;;;:52;21568:15;21546:19;;;;:37;20703:896;21626:13;;21622:172;;21701:4;21683:24;;;;:9;:24;;;;;;:39;;21712:9;21683:28;:39::i;:::-;21674:4;21656:24;;;;:9;:24;;;;;;;:66;;;;21742:40;;-1:-1:-1;;;;;21742:40:0;;;;;;;21772:9;1464:25:1;;1452:2;1437:18;;1318:177;21742:40:0;;;;;;;;21622:172;-1:-1:-1;;;;;21822:15:0;;;;;;:9;:15;;;;;;:27;;21842:6;21822:19;:27::i;:::-;-1:-1:-1;;;;;21804:15:0;;;;;;:9;:15;;;;;:45;21876:40;21894:21;:6;21905:9;21894:10;:21::i;:::-;-1:-1:-1;;;;;21876:13:0;;;;;;:9;:13;;;;;;;:17;:40::i;:::-;-1:-1:-1;;;;;21860:13:0;;;;;;;:9;:13;;;;;:56;;;;21932:41;;;21951:21;:6;21962:9;21951:10;:21::i;:::-;21932:41;;1464:25:1;;;1452:2;1437:18;21932:41:0;1318:177:1;4090:190:0;4176:7;4212:12;4204:6;;;;4196:29;;;;-1:-1:-1;;;4196:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4236:9:0;4248:5;4252:1;4248;:5;:::i;:::-;4236:17;4090:190;-1:-1:-1;;;;;4090:190:0:o;22104:483::-;15691:6;:13;;-1:-1:-1;;15691:13:0;;;;;22206:16:::1;::::0;;22220:1:::1;22206:16:::0;;;;;::::1;::::0;;-1:-1:-1;;22206:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22206:16:0::1;22182:40;;22251:4;22233;22238:1;22233:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22233:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;22277:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;22277:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;22233:7;;22277:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22267:4;22272:1;22267:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22267:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;22342:15:::1;::::0;22310:62:::1;::::0;22327:4:::1;::::0;22342:15:::1;22360:11:::0;22310:8:::1;:62::i;:::-;22383:15;::::0;:196:::1;::::0;-1:-1:-1;;;22383:196:0;;-1:-1:-1;;;;;22383:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;22464:11;;22383:15:::1;::::0;22506:4;;22533::::1;::::0;22553:15:::1;::::0;22383:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15727:6:0;:14;;-1:-1:-1;;15727:14:0;;;-1:-1:-1;;;;22104:483:0:o;22804:92::-;22861:10;;:27;;-1:-1:-1;;;;;22861:10:0;;;;:27;;;;;22881:6;;22861:10;:27;:10;:27;22881:6;22861:10;:27;;;;;;;;;;;;;;;;;;;11790:177;11900:58;;;-1:-1:-1;;;;;7860:32:1;;11900:58:0;;;7842:51:1;7909:18;;;;7902:34;;;11900:58:0;;;;;;;;;;7815:18:1;;;;11900:58:0;;;;;;;;-1:-1:-1;;;;;11900:58:0;-1:-1:-1;;;11900:58:0;;;11873:86;;11893:5;;11873:19;:86::i;4288:246::-;4346:7;4370:1;4375;4370:6;4366:47;;-1:-1:-1;4400:1:0;4393:8;;4366:47;4423:9;4435:5;4439:1;4435;:5;:::i;:::-;4423:17;-1:-1:-1;4468:1:0;4459:5;4463:1;4423:17;4459:5;:::i;:::-;:10;4451:56;;;;-1:-1:-1;;;4451:56:0;;13523:2:1;4451:56:0;;;13505:21:1;13562:2;13542:18;;;13535:30;13601:34;13581:18;;;13574:62;-1:-1:-1;;;13652:18:1;;;13645:31;13693:19;;4451:56:0;13321:397:1;4451:56:0;4525:1;4288:246;-1:-1:-1;;;4288:246:0:o;4542:132::-;4600:7;4627:39;4631:1;4634;4627:39;;;;;;;;;;;;;;;;;:3;:39::i;21989:107::-;22046:7;22078:1;22074;:5;22073:15;;22087:1;22073:15;;;-1:-1:-1;22083:1:0;21989:107;-1:-1:-1;21989:107:0:o;3759:179::-;3817:7;;3849:5;3853:1;3849;:5;:::i;:::-;3837:17;;3878:1;3873;:6;;3865:46;;;;-1:-1:-1;;;3865:46:0;;13925:2:1;3865:46:0;;;13907:21:1;13964:2;13944:18;;;13937:30;14003:29;13983:18;;;13976:57;14050:18;;3865:46:0;13723:351:1;3946:136:0;4004:7;4031:43;4035:1;4038;4031:43;;;;;;;;;;;;;;;;;:3;:43::i;12225:370::-;12306:23;12332:106;12374:4;12332:106;;;;;;;;;;;;;;;;;12340:5;-1:-1:-1;;;;;12332:27:0;;;:106;;;;;:::i;:::-;12453:17;;12306:132;;-1:-1:-1;12453:21:0;12449:139;;12510:10;12499:30;;;;;;;;;;;;:::i;:::-;12491:85;;;;-1:-1:-1;;;12491:85:0;;14281:2:1;12491:85:0;;;14263:21:1;14320:2;14300:18;;;14293:30;14359:34;14339:18;;;14332:62;-1:-1:-1;;;14410:18:1;;;14403:40;14460:19;;12491:85:0;14079:406:1;4682:189:0;4768:7;4803:12;4796:5;4788:28;;;;-1:-1:-1;;;4788:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4827:9:0;4839:5;4843:1;4839;:5;:::i;6230:229::-;6367:12;6399:52;6421:6;6429:4;6435:1;6438:12;6399:21;:52::i;:::-;6392:59;6230:229;-1:-1:-1;;;;6230:229:0:o;7363:455::-;7533:12;7591:5;7566:21;:30;;7558:81;;;;-1:-1:-1;;;7558:81:0;;14692:2:1;7558:81:0;;;14674:21:1;14731:2;14711:18;;;14704:30;14770:34;14750:18;;;14743:62;-1:-1:-1;;;14821:18:1;;;14814:36;14867:19;;7558:81:0;14490:402:1;7558:81:0;7651:12;7665:23;7692:6;-1:-1:-1;;;;;7692:11:0;7711:5;7718:4;7692:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7650:73;;;;7741:69;7768:6;7776:7;7785:10;7797:12;7741:26;:69::i;:::-;7734:76;7363:455;-1:-1:-1;;;;;;;7363:455:0:o;9986:644::-;10171:12;10200:7;10196:427;;;10228:10;:17;10249:1;10228:22;10224:290;;-1:-1:-1;;;;;5671:19:0;;;10438:60;;;;-1:-1:-1;;;10438:60:0;;15391:2:1;10438:60:0;;;15373:21:1;15430:2;15410:18;;;15403:30;15469:31;15449:18;;;15442:59;15518:18;;10438:60:0;15189:353:1;10438:60:0;-1:-1:-1;10535:10:0;10528:17;;10196:427;10578:33;10586:10;10598:12;11333:17;;:21;11329:388;;11565:10;11559:17;11622:15;11609:10;11605:2;11601:19;11594:44;11329:388;11692:12;11685:20;;-1:-1:-1;;;11685:20:0;;;;;;;;:::i;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:131::-;-1:-1:-1;;;;;745:31:1;;735:42;;725:70;;791:1;788;781:12;725:70;670:131;:::o;806:315::-;874:6;882;935:2;923:9;914:7;910:23;906:32;903:52;;;951:1;948;941:12;903:52;990:9;977:23;1009:31;1034:5;1009:31;:::i;:::-;1059:5;1111:2;1096:18;;;;1083:32;;-1:-1:-1;;;806:315:1:o;1734:456::-;1811:6;1819;1827;1880:2;1868:9;1859:7;1855:23;1851:32;1848:52;;;1896:1;1893;1886:12;1848:52;1935:9;1922:23;1954:31;1979:5;1954:31;:::i;:::-;2004:5;-1:-1:-1;2061:2:1;2046:18;;2033:32;2074:33;2033:32;2074:33;:::i;:::-;1734:456;;2126:7;;-1:-1:-1;;;2180:2:1;2165:18;;;;2152:32;;1734:456::o;2592:388::-;2660:6;2668;2721:2;2709:9;2700:7;2696:23;2692:32;2689:52;;;2737:1;2734;2727:12;2689:52;2776:9;2763:23;2795:31;2820:5;2795:31;:::i;:::-;2845:5;-1:-1:-1;2902:2:1;2887:18;;2874:32;2915:33;2874:32;2915:33;:::i;:::-;2967:7;2957:17;;;2592:388;;;;;:::o;2985:247::-;3044:6;3097:2;3085:9;3076:7;3072:23;3068:32;3065:52;;;3113:1;3110;3103:12;3065:52;3152:9;3139:23;3171:31;3196:5;3171:31;:::i;3237:127::-;3298:10;3293:3;3289:20;3286:1;3279:31;3329:4;3326:1;3319:15;3353:4;3350:1;3343:15;3369:416;3458:1;3495:5;3458:1;3509:270;3530:7;3520:8;3517:21;3509:270;;;3589:4;3585:1;3581:6;3577:17;3571:4;3568:27;3565:53;;;3598:18;;:::i;:::-;3648:7;3638:8;3634:22;3631:55;;;3668:16;;;;3631:55;3747:22;;;;3707:15;;;;3509:270;;;3513:3;3369:416;;;;;:::o;3790:806::-;3839:5;3869:8;3859:80;;-1:-1:-1;3910:1:1;3924:5;;3859:80;3958:4;3948:76;;-1:-1:-1;3995:1:1;4009:5;;3948:76;4040:4;4058:1;4053:59;;;;4126:1;4121:130;;;;4033:218;;4053:59;4083:1;4074:10;;4097:5;;;4121:130;4158:3;4148:8;4145:17;4142:43;;;4165:18;;:::i;:::-;-1:-1:-1;;4221:1:1;4207:16;;4236:5;;4033:218;;4335:2;4325:8;4322:16;4316:3;4310:4;4307:13;4303:36;4297:2;4287:8;4284:16;4279:2;4273:4;4270:12;4266:35;4263:77;4260:159;;;-1:-1:-1;4372:19:1;;;4404:5;;4260:159;4451:34;4476:8;4470:4;4451:34;:::i;:::-;4521:6;4517:1;4513:6;4509:19;4500:7;4497:32;4494:58;;;4532:18;;:::i;:::-;4570:20;;3790:806;-1:-1:-1;;;3790:806:1:o;4601:140::-;4659:5;4688:47;4729:4;4719:8;4715:19;4709:4;4688:47;:::i;4746:168::-;4819:9;;;4850;;4867:15;;;4861:22;;4847:37;4837:71;;4888:18;;:::i;4919:356::-;5121:2;5103:21;;;5140:18;;;5133:30;5199:34;5194:2;5179:18;;5172:62;5266:2;5251:18;;4919:356::o;5638:184::-;5708:6;5761:2;5749:9;5740:7;5736:23;5732:32;5729:52;;;5777:1;5774;5767:12;5729:52;-1:-1:-1;5800:16:1;;5638:184;-1:-1:-1;5638:184:1:o;6180:251::-;6250:6;6303:2;6291:9;6282:7;6278:23;6274:32;6271:52;;;6319:1;6316;6309:12;6271:52;6351:9;6345:16;6370:31;6395:5;6370:31;:::i;7357:306::-;7445:6;7453;7461;7514:2;7502:9;7493:7;7489:23;7485:32;7482:52;;;7530:1;7527;7520:12;7482:52;7559:9;7553:16;7543:26;;7609:2;7598:9;7594:18;7588:25;7578:35;;7653:2;7642:9;7638:18;7632:25;7622:35;;7357:306;;;;;:::o;7947:277::-;8014:6;8067:2;8055:9;8046:7;8042:23;8038:32;8035:52;;;8083:1;8080;8073:12;8035:52;8115:9;8109:16;8168:5;8161:13;8154:21;8147:5;8144:32;8134:60;;8190:1;8187;8180:12;11092:125;11157:9;;;11178:10;;;11175:36;;;11191:18;;:::i;11577:135::-;11616:3;11637:17;;;11634:43;;11657:18;;:::i;:::-;-1:-1:-1;11704:1:1;11693:13;;11577:135::o;11717:128::-;11784:9;;;11805:11;;;11802:37;;;11819:18;;:::i;11982:127::-;12043:10;12038:3;12034:20;12031:1;12024:31;12074:4;12071:1;12064:15;12098:4;12095:1;12088:15;12114:980;12376:4;12424:3;12413:9;12409:19;12455:6;12444:9;12437:25;12481:2;12519:6;12514:2;12503:9;12499:18;12492:34;12562:3;12557:2;12546:9;12542:18;12535:31;12586:6;12621;12615:13;12652:6;12644;12637:22;12690:3;12679:9;12675:19;12668:26;;12729:2;12721:6;12717:15;12703:29;;12750:1;12760:195;12774:6;12771:1;12768:13;12760:195;;;12839:13;;-1:-1:-1;;;;;12835:39:1;12823:52;;12930:15;;;;12895:12;;;;12871:1;12789:9;12760:195;;;-1:-1:-1;;;;;;;13011:32:1;;;;13006:2;12991:18;;12984:60;-1:-1:-1;;;13075:3:1;13060:19;13053:35;12972:3;12114:980;-1:-1:-1;;;12114:980:1:o;13099:217::-;13139:1;13165;13155:132;;13209:10;13204:3;13200:20;13197:1;13190:31;13244:4;13241:1;13234:15;13272:4;13269:1;13262:15;13155:132;-1:-1:-1;13301:9:1;;13099:217::o;14897:287::-;15026:3;15064:6;15058:13;15080:66;15139:6;15134:3;15127:4;15119:6;15115:17;15080:66;:::i;:::-;15162:16;;;;;14897:287;-1:-1:-1;;14897:287:1:o
Swarm Source
ipfs://18f9a133042606a61f2548852fb5b1b6db5d862380a211739f6c8840c0f2c097
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.