Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 13173703 | 1041 days ago | IN | Create: ADAPAD | 0 ETH | 0.28866723 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ADAPAD
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-06 */ // File: @openzeppelin/contracts-ethereum-package/contracts/utils/SafeCast.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's uintXX casting operators with added overflow * checks. * * Downcasting from uint256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such an operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. * * Can be combined with {SafeMath} to extend it to smaller types, by performing * all math on `uint256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { require(value < 2**255, "SafeCast: value doesn't fit in an int256"); return int256(value); } } // File: @openzeppelin/contracts-ethereum-package/contracts/Initializable.sol pragma solidity >=0.4.24 <0.7.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract ContextUpgradeSafe is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } } // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract LGEWhitelisted is ContextUpgradeSafe { using SafeMath for uint256; struct WhitelistRound { uint256 duration; uint256 amountMax; mapping(address => bool) addresses; mapping(address => uint256) purchased; } WhitelistRound[] public _lgeWhitelistRounds; uint256 public _lgeTimestamp; address public _lgePairAddress; address public _whitelister; event WhitelisterTransferred(address indexed previousWhitelister, address indexed newWhitelister); function __LGEWhitelisted_init() internal initializer { __Context_init_unchained(); __LGEWhitelisted_init_unchained(); } function __LGEWhitelisted_init_unchained() internal initializer { _whitelister = _msgSender(); } modifier onlyWhitelister() { require(_whitelister == _msgSender(), "Caller is not the whitelister"); _; } function renounceWhitelister() external onlyWhitelister { emit WhitelisterTransferred(_whitelister, address(0)); _whitelister = address(0); } function transferWhitelister(address newWhitelister) external onlyWhitelister { _transferWhitelister(newWhitelister); } function _transferWhitelister(address newWhitelister) internal { require(newWhitelister != address(0), "New whitelister is the zero address"); emit WhitelisterTransferred(_whitelister, newWhitelister); _whitelister = newWhitelister; } /* * createLGEWhitelist - Call this after initial Token Generation Event (TGE) * * pairAddress - address generated from createPair() event on DEX * durations - array of durations (seconds) for each whitelist rounds * amountsMax - array of max amounts (TOKEN decimals) for each whitelist round * */ function createLGEWhitelist(address pairAddress, uint256[] calldata durations, uint256[] calldata amountsMax) external onlyWhitelister() { require(durations.length == amountsMax.length, "Invalid whitelist(s)"); _lgePairAddress = pairAddress; if(durations.length > 0) { delete _lgeWhitelistRounds; for (uint256 i = 0; i < durations.length; i++) { _lgeWhitelistRounds.push(WhitelistRound(durations[i], amountsMax[i])); } } } /* * modifyLGEWhitelistAddresses - Define what addresses are included/excluded from a whitelist round * * index - 0-based index of round to modify whitelist * duration - period in seconds from LGE event or previous whitelist round * amountMax - max amount (TOKEN decimals) for each whitelist round * */ function modifyLGEWhitelist(uint256 index, uint256 duration, uint256 amountMax, address[] calldata addresses, bool enabled) external onlyWhitelister() { require(index < _lgeWhitelistRounds.length, "Invalid index"); require(amountMax > 0, "Invalid amountMax"); if(duration != _lgeWhitelistRounds[index].duration) _lgeWhitelistRounds[index].duration = duration; if(amountMax != _lgeWhitelistRounds[index].amountMax) _lgeWhitelistRounds[index].amountMax = amountMax; for (uint256 i = 0; i < addresses.length; i++) { _lgeWhitelistRounds[index].addresses[addresses[i]] = enabled; } } /* * getLGEWhitelistRound * * returns: * * 1. whitelist round number ( 0 = no active round now ) * 2. duration, in seconds, current whitelist round is active for * 3. timestamp current whitelist round closes at * 4. maximum amount a whitelister can purchase in this round * 5. is caller whitelisted * 6. how much caller has purchased in current whitelist round * */ function getLGEWhitelistRound() public view returns (uint256, uint256, uint256, uint256, bool, uint256) { if(_lgeTimestamp > 0) { uint256 wlCloseTimestampLast = _lgeTimestamp; for (uint256 i = 0; i < _lgeWhitelistRounds.length; i++) { WhitelistRound storage wlRound = _lgeWhitelistRounds[i]; wlCloseTimestampLast = wlCloseTimestampLast.add(wlRound.duration); if(now <= wlCloseTimestampLast) return (i.add(1), wlRound.duration, wlCloseTimestampLast, wlRound.amountMax, wlRound.addresses[_msgSender()], wlRound.purchased[_msgSender()]); } } return (0, 0, 0, 0, false, 0); } /* * _applyLGEWhitelist - internal function to be called initially before any transfers * */ function _applyLGEWhitelist(address sender, address recipient, uint256 amount) internal { if(_lgePairAddress == address(0) || _lgeWhitelistRounds.length == 0) return; if(_lgeTimestamp == 0 && sender != _lgePairAddress && recipient == _lgePairAddress && amount > 0) _lgeTimestamp = now; if(sender == _lgePairAddress && recipient != _lgePairAddress) { //buying (uint256 wlRoundNumber,,,,,) = getLGEWhitelistRound(); if(wlRoundNumber > 0) { WhitelistRound storage wlRound = _lgeWhitelistRounds[wlRoundNumber.sub(1)]; require(wlRound.addresses[recipient], "LGE - Buyer is not whitelisted"); uint256 amountRemaining = 0; if(wlRound.purchased[recipient] < wlRound.amountMax) amountRemaining = wlRound.amountMax.sub(wlRound.purchased[recipient]); require(amount <= amountRemaining, "LGE - Amount exceeds whitelist maximum"); wlRound.purchased[recipient] = wlRound.purchased[recipient].add(amount); } } } } contract ADAPAD is IERC20, OwnableUpgradeSafe, LGEWhitelisted { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; uint256 private _cap; string private _name; string private _symbol; uint8 private _decimals; mapping(address => bool) public _feeExcluded; uint256 public _feeBurnPct; uint256 public _feeRewardPct; address public _feeRewardAddress; mapping(address => bool) public _pair; address public _router; address[] public _feeRewardSwapPath; function initialize(uint256 cap, uint256 feeBurnPct, uint256 feeRewardPct, address feeRewardAddress, address router) public initializer { require(cap > 0, "ERC20Capped: cap is 0"); _name = "ADAPAD.io"; _symbol = "ADAPAD"; _decimals = 18; _cap = cap; __Ownable_init(); __LGEWhitelisted_init(); IUniswapV2Router02 r = IUniswapV2Router02(router); IUniswapV2Factory f = IUniswapV2Factory(r.factory()); setPair(f.createPair(address(this), r.WETH()), true); address[] memory feeRewardSwapPath = new address[](2); feeRewardSwapPath[0] = address(this); feeRewardSwapPath[1] = r.WETH(); setFees(feeBurnPct, feeRewardPct, feeRewardSwapPath, feeRewardAddress); _router = router; setFeeExcluded(_msgSender(), true); setFeeExcluded(address(this), true); } function setRouter(address r) public onlyOwner { _router = r; } function setFees(uint256 feeBurnPct, uint256 feeRewardPct, address[] memory feeRewardSwapPath, address feeRewardAddress) public onlyOwner { require(feeBurnPct.add(feeRewardPct) <= 10000, "Fees must not total more than 100%"); require(feeRewardSwapPath.length > 1, "Invalid path"); require(feeRewardAddress != address(0), "Fee reward address must not be zero address"); _feeBurnPct = feeBurnPct; _feeRewardPct = feeRewardPct; _feeRewardSwapPath = feeRewardSwapPath; _feeRewardAddress = feeRewardAddress; } function setPair(address a, bool pair) public onlyOwner { _pair[a] = pair; } function setFeeExcluded(address a, bool excluded) public onlyOwner { _feeExcluded[a] = excluded; } function mint(address _to, uint256 _amount) public onlyOwner { _mint(_to, _amount); } function _beforeTokenTransfer(address sender, address recipient, uint256 amount) internal { LGEWhitelisted._applyLGEWhitelist(sender, recipient, amount); if (sender == address(0)) { // When minting tokens require(totalSupply().add(amount) <= _cap, "ERC20Capped: cap exceeded"); } } function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); if(_pair[recipient] && !_feeExcluded[sender]) { uint256 feeBurnAmount = 0; if(_feeBurnPct > 0) { feeBurnAmount = amount.mul(_feeBurnPct).div(10000); _cap = _cap.sub(feeBurnAmount); _totalSupply = _totalSupply.sub(feeBurnAmount); emit Transfer(sender, address(0), feeBurnAmount); } uint256 feeRewardAmount = 0; if(_feeRewardPct > 0 && _feeRewardAddress != address(0)) { feeRewardAmount = amount.mul(_feeRewardPct).div(10000); if(_router != address(0)) { _balances[address(this)] = _balances[address(this)].add(feeRewardAmount); emit Transfer(sender, address(this), feeRewardAmount); IUniswapV2Router02 r = IUniswapV2Router02(_router); _approve(address(this), _router, feeRewardAmount); r.swapExactTokensForTokensSupportingFeeOnTransferTokens( feeRewardAmount, 0, _feeRewardSwapPath, _feeRewardAddress, block.timestamp ); } else { _balances[_feeRewardAddress] = _balances[_feeRewardAddress].add(feeRewardAmount); emit Transfer(sender, _feeRewardAddress, feeRewardAmount); } } amount = amount.sub(feeBurnAmount).sub(feeRewardAmount); } _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function burn(uint256 amount) external { _cap=_cap.sub(amount); _burn(_msgSender(), amount); } function name() public view override returns (string memory) { return _name; } function symbol() public view override returns (string memory) { return _symbol; } function cap() public view returns (uint256) { return _cap; } function decimals() public view override returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousWhitelister","type":"address"},{"indexed":true,"internalType":"address","name":"newWhitelister","type":"address"}],"name":"WhitelisterTransferred","type":"event"},{"inputs":[],"name":"_feeBurnPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeRewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeRewardPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_feeRewardSwapPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lgePairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lgeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_lgeWhitelistRounds","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_pair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_whitelister","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":"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"},{"internalType":"uint256[]","name":"durations","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsMax","type":"uint256[]"}],"name":"createLGEWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLGEWhitelistRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cap","type":"uint256"},{"internalType":"uint256","name":"feeBurnPct","type":"uint256"},{"internalType":"uint256","name":"feeRewardPct","type":"uint256"},{"internalType":"address","name":"feeRewardAddress","type":"address"},{"internalType":"address","name":"router","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"modifyLGEWhitelist","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceWhitelister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setFeeExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeBurnPct","type":"uint256"},{"internalType":"uint256","name":"feeRewardPct","type":"uint256"},{"internalType":"address[]","name":"feeRewardSwapPath","type":"address[]"},{"internalType":"address","name":"feeRewardAddress","type":"address"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"pair","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWhitelister","type":"address"}],"name":"transferWhitelister","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50612f88806100206000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063771a0b2811610130578063c0d78655116100b8578063e3f4f30c1161007c578063e3f4f30c146107e0578063eba116d814610898578063edae876f146108be578063f2fde38b146108c6578063ffc877d8146108ec57610232565b8063c0d786551461074e578063c9f1f47f14610774578063d5215d11146107a2578063da91b76e146107aa578063dd62ed3e146107b257610232565b80639ad3a7ba116100ff5780639ad3a7ba14610678578063a457c2d714610680578063a77cac7a146106ac578063a9059cbb146106e2578063aab954d01461070e57610232565b8063771a0b281461063257806386a22eff1461063a5780638da5cb5b1461066857806395d89b411461067057610232565b806340c10f19116101be57806363c6b3d71161018257806363c6b3d7146105b9578063688a0942146105d657806370a08231146105de57806371088c6d14610604578063715018a61461062a57610232565b806340c10f19146103fb57806342966c681461042757806344ade3c51461044457806349448898146104c7578063532f1fed146104eb57610232565b806323b872dd1161020557806323b872dd1461034b5780632e15e5c714610381578063313ce567146103a9578063355274ea146103c757806339509351146103cf57610232565b806306fdde0314610237578063095ea7b3146102b457806318160ddd146102f45780631b29b0cd1461030e575b600080fd5b61023f6108f4565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360408110156102ca57600080fd5b506001600160a01b03813516906020013561098a565b604080519115158252519081900360200190f35b6102fc6109a8565b60408051918252519081900360200190f35b6103166109ae565b6040805196875260208701959095528585019390935260608501919091521515608084015260a0830152519081900360c00190f35b6102e06004803603606081101561036157600080fd5b506001600160a01b03813581169160208101359091169060400135610abc565b6103a76004803603602081101561039757600080fd5b50356001600160a01b0316610b43565b005b6103b1610ba7565b6040805160ff9092168252519081900360200190f35b6102fc610bb0565b6102e0600480360360408110156103e557600080fd5b506001600160a01b038135169060200135610bb6565b6103a76004803603604081101561041157600080fd5b506001600160a01b038135169060200135610c04565b6103a76004803603602081101561043d57600080fd5b5035610c6a565b6103a7600480360360a081101561045a57600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561048757600080fd5b82018360208201111561049957600080fd5b803590602001918460208302840111600160201b831117156104ba57600080fd5b9193509150351515610c8b565b6104cf610e7a565b604080516001600160a01b039092168252519081900360200190f35b6103a76004803603606081101561050157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561052b57600080fd5b82018360208201111561053d57600080fd5b803590602001918460208302840111600160201b8311171561055e57600080fd5b919390929091602081019035600160201b81111561057b57600080fd5b82018360208201111561058d57600080fd5b803590602001918460208302840111600160201b831117156105ae57600080fd5b509092509050610e89565b6104cf600480360360208110156105cf57600080fd5b5035610fd9565b6102fc611000565b6102fc600480360360208110156105f457600080fd5b50356001600160a01b0316611006565b6102e06004803603602081101561061a57600080fd5b50356001600160a01b0316611021565b6103a7611036565b6102fc6110d8565b6103a76004803603604081101561065057600080fd5b506001600160a01b03813516906020013515156110de565b6104cf611161565b61023f611170565b6103a76111d1565b6102e06004803603604081101561069657600080fd5b506001600160a01b038135169060200135611273565b6106c9600480360360208110156106c257600080fd5b50356112db565b6040805192835260208301919091528051918290030190f35b6102e0600480360360408110156106f857600080fd5b506001600160a01b038135169060200135611306565b6103a7600480360360a081101561072457600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661131a565b6103a76004803603602081101561076457600080fd5b50356001600160a01b0316611725565b6103a76004803603604081101561078a57600080fd5b506001600160a01b038135169060200135151561179f565b6104cf611822565b6102fc611831565b6102fc600480360360408110156107c857600080fd5b506001600160a01b0381358116916020013516611837565b6103a7600480360360808110156107f657600080fd5b813591602081013591810190606081016040820135600160201b81111561081c57600080fd5b82018360208201111561082e57600080fd5b803590602001918460208302840111600160201b8311171561084f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505090356001600160a01b031691506118629050565b6102e0600480360360208110156108ae57600080fd5b50356001600160a01b03166119d1565b6104cf6119e6565b6103a7600480360360208110156108dc57600080fd5b50356001600160a01b03166119f5565b6104cf611aee565b609f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109805780601f1061095557610100808354040283529160200191610980565b820191906000526020600020905b81548152906001019060200180831161096357829003601f168201915b5050505050905090565b600061099e610997611afd565b8484611b01565b5060015b92915050565b609d5490565b60008060008060008060006098541115610aa15760985460005b609754811015610a9e576000609782815481106109e157fe5b90600052602060002090600402019050610a08816000015484611bed90919063ffffffff16565b9250824211610a9557610a1c826001611bed565b815460018301548590600285016000610a33611afd565b6001600160a01b03168152602081019190915260400160009081205460ff16906003870190610a60611afd565b6001600160a01b03166001600160a01b0316815260200190815260200160002054985098509850985098509850505050610ab4565b506001016109c8565b50505b5060009450849350839250829150819050805b909192939495565b6000610ac9848484611c4e565b610b3984610ad5611afd565b610b3485604051806060016040528060288152602001612de9602891396001600160a01b038a166000908152609c6020526040812090610b13611afd565b6001600160a01b0316815260208101919091526040016000205491906120a2565b611b01565b5060019392505050565b610b4b611afd565b609a546001600160a01b03908116911614610b9b576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d82833981519152604482015290519081900360640190fd5b610ba481612139565b50565b60a15460ff1690565b609e5490565b600061099e610bc3611afd565b84610b3485609c6000610bd4611afd565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611bed565b610c0c611afd565b6065546001600160a01b03908116911614610c5c576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b610c6682826121da565b5050565b609e54610c7790826122ba565b609e55610ba4610c85611afd565b826122fc565b610c93611afd565b609a546001600160a01b03908116911614610ce3576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d82833981519152604482015290519081900360640190fd5b6097548610610d29576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015290519081900360640190fd5b60008411610d72576040805162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840c2dadeeadce89ac2f607b1b604482015290519081900360640190fd5b60978681548110610d7f57fe5b9060005260206000209060040201600001548514610db7578460978781548110610da557fe5b60009182526020909120600490910201555b60978681548110610dc457fe5b9060005260206000209060040201600101548414610e00578360978781548110610dea57fe5b9060005260206000209060040201600101819055505b60005b82811015610e71578160978881548110610e1957fe5b90600052602060002090600402016002016000868685818110610e3857fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610e03565b50505050505050565b6099546001600160a01b031681565b610e91611afd565b609a546001600160a01b03908116911614610ee1576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d82833981519152604482015290519081900360640190fd5b828114610f2c576040805162461bcd60e51b8152602060048201526014602482015273496e76616c69642077686974656c69737428732960601b604482015290519081900360640190fd5b609980546001600160a01b0319166001600160a01b0387161790558215610fd257610f5960976000612b54565b60005b83811015610fd05760976040518060400160405280878785818110610f7d57fe5b905060200201358152602001858585818110610f9557fe5b602090810292909201359092528354600181810186556000958652948290208451600490920201908155920151918301919091555001610f5c565b505b5050505050565b60a88181548110610fe657fe5b6000918252602090912001546001600160a01b0316905081565b60a45481565b6001600160a01b03166000908152609b602052604090205490565b60a26020526000908152604090205460ff1681565b61103e611afd565b6065546001600160a01b0390811691161461108e576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b60a35481565b6110e6611afd565b6065546001600160a01b03908116911614611136576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a660205260409020805460ff1916911515919091179055565b6065546001600160a01b031690565b60a08054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109805780601f1061095557610100808354040283529160200191610980565b6111d9611afd565b609a546001600160a01b03908116911614611229576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d82833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b4908390a3609a80546001600160a01b0319169055565b600061099e611280611afd565b84610b3485604051806060016040528060258152602001612f2e60259139609c60006112aa611afd565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906120a2565b609781815481106112e857fe5b60009182526020909120600490910201805460019091015490915082565b600061099e611313611afd565b8484611c4e565b600054610100900460ff168061133357506113336123e6565b80611341575060005460ff16155b61137c5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff161580156113a7576000805460ff1961ff0019909116610100171660011790555b600086116113f4576040805162461bcd60e51b8152602060048201526015602482015274045524332304361707065643a20636170206973203605c1b604482015290519081900360640190fd5b604080518082019091526009808252684144415041442e696f60b81b602090920191825261142491609f91612b75565b506040805180820190915260068082526510511054105160d21b60209092019182526114529160a091612b75565b5060a1805460ff19166012179055609e86905561146d6123ec565b61147561249d565b60008290506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114b557600080fd5b505afa1580156114c9573d6000803e3d6000fd5b505050506040513d60208110156114df57600080fd5b5051604080516315ab88c960e31b815290519192506115e3916001600160a01b038085169263c9c6539692309288169163ad5c4648916004808301926020929190829003018186803b15801561153457600080fd5b505afa158015611548573d6000803e3d6000fd5b505050506040513d602081101561155e57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156115b057600080fd5b505af11580156115c4573d6000803e3d6000fd5b505050506040513d60208110156115da57600080fd5b505160016110de565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061161157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050826001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561166a57600080fd5b505afa15801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b50518151829060019081106116a557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116d188888389611862565b60a780546001600160a01b0319166001600160a01b0387161790556116fe6116f7611afd565b600161179f565b61170930600161179f565b5050508015610fd0576000805461ff0019169055505050505050565b61172d611afd565b6065546001600160a01b0390811691161461177d576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b60a780546001600160a01b0319166001600160a01b0392909216919091179055565b6117a7611afd565b6065546001600160a01b039081169116146117f7576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a260205260409020805460ff1916911515919091179055565b609a546001600160a01b031681565b60985481565b6001600160a01b039182166000908152609c6020908152604080832093909416825291909152205490565b61186a611afd565b6065546001600160a01b039081169116146118ba576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b6127106118c78585611bed565b11156119045760405162461bcd60e51b8152600401808060200182810382526022815260200180612f0c6022913960400191505060405180910390fd5b6001825111611949576040805162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b604482015290519081900360640190fd5b6001600160a01b03811661198e5760405162461bcd60e51b815260040180806020018281038252602b815260200180612d31602b913960400191505060405180910390fd5b60a384905560a483905581516119ab9060a8906020850190612bf3565b5060a580546001600160a01b0319166001600160a01b0392909216919091179055505050565b60a66020526000908152604090205460ff1681565b60a7546001600160a01b031681565b6119fd611afd565b6065546001600160a01b03908116911614611a4d576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b6001600160a01b038116611a925760405162461bcd60e51b8152600401808060200182810382526026815260200180612ce96026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60a5546001600160a01b031681565b3390565b6001600160a01b038316611b465760405162461bcd60e51b8152600401808060200182810382526024815260200180612ee86024913960400191505060405180910390fd5b6001600160a01b038216611b8b5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d0f6022913960400191505060405180910390fd5b6001600160a01b038084166000818152609c6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015611c47576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038316611c935760405162461bcd60e51b8152600401808060200182810382526025815260200180612ea06025913960400191505060405180910390fd5b6001600160a01b038216611cd85760405162461bcd60e51b8152600401808060200182810382526023815260200180612ca46023913960400191505060405180910390fd5b611ce383838361253a565b611d2081604051806060016040528060268152602001612d5c602691396001600160a01b0386166000908152609b602052604090205491906120a2565b6001600160a01b038085166000908152609b6020908152604080832094909455918516815260a6909152205460ff168015611d7457506001600160a01b038316600090815260a2602052604090205460ff16155b156120355760a35460009015611df857611da5612710611d9f60a354856125c090919063ffffffff16565b90612619565b609e54909150611db590826122ba565b609e55609d54611dc590826122ba565b609d556040805182815290516000916001600160a01b03871691600080516020612e5f8339815191529181900360200190a35b60008060a454118015611e15575060a5546001600160a01b031615155b1561201c57611e35612710611d9f60a454866125c090919063ffffffff16565b60a7549091506001600160a01b031615611fa957306000908152609b6020526040902054611e639082611bed565b306000818152609b6020908152604091829020939093558051848152905191926001600160a01b03891692600080516020612e5f8339815191529281900390910190a360a7546001600160a01b0316611ebd308284611b01565b806001600160a01b0316635c11d79583600060a860a560009054906101000a90046001600160a01b0316426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b031681526020018381526020018281038252858181548152602001915080548015611f6757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f49575b50509650505050505050600060405180830381600087803b158015611f8b57600080fd5b505af1158015611f9f573d6000803e3d6000fd5b505050505061201c565b60a5546001600160a01b03166000908152609b6020526040902054611fce9082611bed565b60a580546001600160a01b039081166000908152609b6020908152604091829020949094559154825185815292519082169391891692600080516020612e5f83398151915292908290030190a35b6120308161202a85856122ba565b906122ba565b925050505b6001600160a01b0382166000908152609b60205260409020546120589082611bed565b6001600160a01b038084166000818152609b60209081526040918290209490945580518581529051919392871692600080516020612e5f83398151915292918290030190a3505050565b600081848411156121315760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120f65781810151838201526020016120de565b50505050905090810190601f1680156121235780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03811661217e5760405162461bcd60e51b8152600401808060200182810382526023815260200180612ec56023913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b490600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216612235576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6122416000838361253a565b609d5461224e9082611bed565b609d556001600160a01b0382166000908152609b60205260409020546122749082611bed565b6001600160a01b0383166000818152609b60209081526040808320949094558351858152935192939192600080516020612e5f8339815191529281900390910190a35050565b6000611c4783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120a2565b6001600160a01b0382166123415760405162461bcd60e51b8152600401808060200182810382526021815260200180612e7f6021913960400191505060405180910390fd5b61234d8260008361253a565b61238a81604051806060016040528060228152602001612cc7602291396001600160a01b0385166000908152609b602052604090205491906120a2565b6001600160a01b0383166000908152609b6020526040902055609d546123b090826122ba565b609d556040805182815290516000916001600160a01b03851691600080516020612e5f8339815191529181900360200190a35050565b303b1590565b600054610100900460ff168061240557506124056123e6565b80612413575060005460ff16155b61244e5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff16158015612479576000805460ff1961ff0019909116610100171660011790555b61248161265b565b6124896126fb565b8015610ba4576000805461ff001916905550565b600054610100900460ff16806124b657506124b66123e6565b806124c4575060005460ff16155b6124ff5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff1615801561252a576000805460ff1961ff0019909116610100171660011790555b61253261265b565b6124896127f4565b6125458383836128bd565b6001600160a01b0383166125bb57609e54612568826125626109a8565b90611bed565b11156125bb576040805162461bcd60e51b815260206004820152601960248201527f45524332304361707065643a2063617020657863656564656400000000000000604482015290519081900360640190fd5b505050565b6000826125cf575060006109a2565b828202828482816125dc57fe5b0414611c475760405162461bcd60e51b8152600401808060200182810382526021815260200180612dc86021913960400191505060405180910390fd5b6000611c4783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612aef565b600054610100900460ff168061267457506126746123e6565b80612682575060005460ff16155b6126bd5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff16158015612489576000805460ff1961ff0019909116610100171660011790558015610ba4576000805461ff001916905550565b600054610100900460ff168061271457506127146123e6565b80612722575060005460ff16155b61275d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff16158015612788576000805460ff1961ff0019909116610100171660011790555b6000612792611afd565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ba4576000805461ff001916905550565b600054610100900460ff168061280d575061280d6123e6565b8061281b575060005460ff16155b6128565760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff16158015612881576000805460ff1961ff0019909116610100171660011790555b612889611afd565b609a80546001600160a01b0319166001600160a01b03929092169190911790558015610ba4576000805461ff001916905550565b6099546001600160a01b031615806128d55750609754155b156128df576125bb565b6098541580156128fd57506099546001600160a01b03848116911614155b801561291657506099546001600160a01b038381169116145b80156129225750600081115b1561292c57426098555b6099546001600160a01b03848116911614801561295757506099546001600160a01b03838116911614155b156125bb5760006129666109ae565b505050505090506000811115612ae957600060976129858360016122ba565b8154811061298f57fe5b600091825260208083206001600160a01b03881684526002600490930201918201905260409091205490915060ff16612a0f576040805162461bcd60e51b815260206004820152601e60248201527f4c4745202d204275796572206973206e6f742077686974656c69737465640000604482015290519081900360640190fd5b60018101546001600160a01b038516600090815260038301602052604081205490911115612a63576001600160a01b03851660009081526003830160205260409020546001830154612a60916122ba565b90505b80841115612aa25760405162461bcd60e51b8152600401808060200182810382526026815260200180612da26026913960400191505060405180910390fd5b6001600160a01b0385166000908152600383016020526040902054612ac79085611bed565b6001600160a01b03861660009081526003909301602052604090922091909155505b50505050565b60008183612b3e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120f65781810151838201526020016120de565b506000838581612b4a57fe5b0495945050505050565b5080546000825560040290600052602060002090810190610ba49190612c54565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612bb657805160ff1916838001178555612be3565b82800160010185558215612be3579182015b82811115612be3578251825591602001919060010190612bc8565b50612bef929150612c6f565b5090565b828054828255906000526020600020908101928215612c48579160200282015b82811115612c4857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612c13565b50612bef929150612c84565b5b80821115612bef5760008082556001820155600401612c55565b5b80821115612bef5760008155600101612c70565b5b80821115612bef5780546001600160a01b0319168155600101612c8556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373466565207265776172642061646472657373206d757374206e6f74206265207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636543616c6c6572206973206e6f74207468652077686974656c69737465720000004c4745202d20416d6f756e7420657863656564732077686974656c697374206d6178696d756d536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e65772077686974656c697374657220697320746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737346656573206d757374206e6f7420746f74616c206d6f7265207468616e203130302545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d452c38e8d09fe54c3a51b80931239949a43ce4d66ae8e3f374743348258311864736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102325760003560e01c8063771a0b2811610130578063c0d78655116100b8578063e3f4f30c1161007c578063e3f4f30c146107e0578063eba116d814610898578063edae876f146108be578063f2fde38b146108c6578063ffc877d8146108ec57610232565b8063c0d786551461074e578063c9f1f47f14610774578063d5215d11146107a2578063da91b76e146107aa578063dd62ed3e146107b257610232565b80639ad3a7ba116100ff5780639ad3a7ba14610678578063a457c2d714610680578063a77cac7a146106ac578063a9059cbb146106e2578063aab954d01461070e57610232565b8063771a0b281461063257806386a22eff1461063a5780638da5cb5b1461066857806395d89b411461067057610232565b806340c10f19116101be57806363c6b3d71161018257806363c6b3d7146105b9578063688a0942146105d657806370a08231146105de57806371088c6d14610604578063715018a61461062a57610232565b806340c10f19146103fb57806342966c681461042757806344ade3c51461044457806349448898146104c7578063532f1fed146104eb57610232565b806323b872dd1161020557806323b872dd1461034b5780632e15e5c714610381578063313ce567146103a9578063355274ea146103c757806339509351146103cf57610232565b806306fdde0314610237578063095ea7b3146102b457806318160ddd146102f45780631b29b0cd1461030e575b600080fd5b61023f6108f4565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360408110156102ca57600080fd5b506001600160a01b03813516906020013561098a565b604080519115158252519081900360200190f35b6102fc6109a8565b60408051918252519081900360200190f35b6103166109ae565b6040805196875260208701959095528585019390935260608501919091521515608084015260a0830152519081900360c00190f35b6102e06004803603606081101561036157600080fd5b506001600160a01b03813581169160208101359091169060400135610abc565b6103a76004803603602081101561039757600080fd5b50356001600160a01b0316610b43565b005b6103b1610ba7565b6040805160ff9092168252519081900360200190f35b6102fc610bb0565b6102e0600480360360408110156103e557600080fd5b506001600160a01b038135169060200135610bb6565b6103a76004803603604081101561041157600080fd5b506001600160a01b038135169060200135610c04565b6103a76004803603602081101561043d57600080fd5b5035610c6a565b6103a7600480360360a081101561045a57600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561048757600080fd5b82018360208201111561049957600080fd5b803590602001918460208302840111600160201b831117156104ba57600080fd5b9193509150351515610c8b565b6104cf610e7a565b604080516001600160a01b039092168252519081900360200190f35b6103a76004803603606081101561050157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561052b57600080fd5b82018360208201111561053d57600080fd5b803590602001918460208302840111600160201b8311171561055e57600080fd5b919390929091602081019035600160201b81111561057b57600080fd5b82018360208201111561058d57600080fd5b803590602001918460208302840111600160201b831117156105ae57600080fd5b509092509050610e89565b6104cf600480360360208110156105cf57600080fd5b5035610fd9565b6102fc611000565b6102fc600480360360208110156105f457600080fd5b50356001600160a01b0316611006565b6102e06004803603602081101561061a57600080fd5b50356001600160a01b0316611021565b6103a7611036565b6102fc6110d8565b6103a76004803603604081101561065057600080fd5b506001600160a01b03813516906020013515156110de565b6104cf611161565b61023f611170565b6103a76111d1565b6102e06004803603604081101561069657600080fd5b506001600160a01b038135169060200135611273565b6106c9600480360360208110156106c257600080fd5b50356112db565b6040805192835260208301919091528051918290030190f35b6102e0600480360360408110156106f857600080fd5b506001600160a01b038135169060200135611306565b6103a7600480360360a081101561072457600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661131a565b6103a76004803603602081101561076457600080fd5b50356001600160a01b0316611725565b6103a76004803603604081101561078a57600080fd5b506001600160a01b038135169060200135151561179f565b6104cf611822565b6102fc611831565b6102fc600480360360408110156107c857600080fd5b506001600160a01b0381358116916020013516611837565b6103a7600480360360808110156107f657600080fd5b813591602081013591810190606081016040820135600160201b81111561081c57600080fd5b82018360208201111561082e57600080fd5b803590602001918460208302840111600160201b8311171561084f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505090356001600160a01b031691506118629050565b6102e0600480360360208110156108ae57600080fd5b50356001600160a01b03166119d1565b6104cf6119e6565b6103a7600480360360208110156108dc57600080fd5b50356001600160a01b03166119f5565b6104cf611aee565b609f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109805780601f1061095557610100808354040283529160200191610980565b820191906000526020600020905b81548152906001019060200180831161096357829003601f168201915b5050505050905090565b600061099e610997611afd565b8484611b01565b5060015b92915050565b609d5490565b60008060008060008060006098541115610aa15760985460005b609754811015610a9e576000609782815481106109e157fe5b90600052602060002090600402019050610a08816000015484611bed90919063ffffffff16565b9250824211610a9557610a1c826001611bed565b815460018301548590600285016000610a33611afd565b6001600160a01b03168152602081019190915260400160009081205460ff16906003870190610a60611afd565b6001600160a01b03166001600160a01b0316815260200190815260200160002054985098509850985098509850505050610ab4565b506001016109c8565b50505b5060009450849350839250829150819050805b909192939495565b6000610ac9848484611c4e565b610b3984610ad5611afd565b610b3485604051806060016040528060288152602001612de9602891396001600160a01b038a166000908152609c6020526040812090610b13611afd565b6001600160a01b0316815260208101919091526040016000205491906120a2565b611b01565b5060019392505050565b610b4b611afd565b609a546001600160a01b03908116911614610b9b576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d82833981519152604482015290519081900360640190fd5b610ba481612139565b50565b60a15460ff1690565b609e5490565b600061099e610bc3611afd565b84610b3485609c6000610bd4611afd565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611bed565b610c0c611afd565b6065546001600160a01b03908116911614610c5c576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b610c6682826121da565b5050565b609e54610c7790826122ba565b609e55610ba4610c85611afd565b826122fc565b610c93611afd565b609a546001600160a01b03908116911614610ce3576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d82833981519152604482015290519081900360640190fd5b6097548610610d29576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015290519081900360640190fd5b60008411610d72576040805162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840c2dadeeadce89ac2f607b1b604482015290519081900360640190fd5b60978681548110610d7f57fe5b9060005260206000209060040201600001548514610db7578460978781548110610da557fe5b60009182526020909120600490910201555b60978681548110610dc457fe5b9060005260206000209060040201600101548414610e00578360978781548110610dea57fe5b9060005260206000209060040201600101819055505b60005b82811015610e71578160978881548110610e1957fe5b90600052602060002090600402016002016000868685818110610e3857fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610e03565b50505050505050565b6099546001600160a01b031681565b610e91611afd565b609a546001600160a01b03908116911614610ee1576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d82833981519152604482015290519081900360640190fd5b828114610f2c576040805162461bcd60e51b8152602060048201526014602482015273496e76616c69642077686974656c69737428732960601b604482015290519081900360640190fd5b609980546001600160a01b0319166001600160a01b0387161790558215610fd257610f5960976000612b54565b60005b83811015610fd05760976040518060400160405280878785818110610f7d57fe5b905060200201358152602001858585818110610f9557fe5b602090810292909201359092528354600181810186556000958652948290208451600490920201908155920151918301919091555001610f5c565b505b5050505050565b60a88181548110610fe657fe5b6000918252602090912001546001600160a01b0316905081565b60a45481565b6001600160a01b03166000908152609b602052604090205490565b60a26020526000908152604090205460ff1681565b61103e611afd565b6065546001600160a01b0390811691161461108e576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b60a35481565b6110e6611afd565b6065546001600160a01b03908116911614611136576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a660205260409020805460ff1916911515919091179055565b6065546001600160a01b031690565b60a08054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109805780601f1061095557610100808354040283529160200191610980565b6111d9611afd565b609a546001600160a01b03908116911614611229576040805162461bcd60e51b815260206004820152601d6024820152600080516020612d82833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b4908390a3609a80546001600160a01b0319169055565b600061099e611280611afd565b84610b3485604051806060016040528060258152602001612f2e60259139609c60006112aa611afd565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906120a2565b609781815481106112e857fe5b60009182526020909120600490910201805460019091015490915082565b600061099e611313611afd565b8484611c4e565b600054610100900460ff168061133357506113336123e6565b80611341575060005460ff16155b61137c5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff161580156113a7576000805460ff1961ff0019909116610100171660011790555b600086116113f4576040805162461bcd60e51b8152602060048201526015602482015274045524332304361707065643a20636170206973203605c1b604482015290519081900360640190fd5b604080518082019091526009808252684144415041442e696f60b81b602090920191825261142491609f91612b75565b506040805180820190915260068082526510511054105160d21b60209092019182526114529160a091612b75565b5060a1805460ff19166012179055609e86905561146d6123ec565b61147561249d565b60008290506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114b557600080fd5b505afa1580156114c9573d6000803e3d6000fd5b505050506040513d60208110156114df57600080fd5b5051604080516315ab88c960e31b815290519192506115e3916001600160a01b038085169263c9c6539692309288169163ad5c4648916004808301926020929190829003018186803b15801561153457600080fd5b505afa158015611548573d6000803e3d6000fd5b505050506040513d602081101561155e57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156115b057600080fd5b505af11580156115c4573d6000803e3d6000fd5b505050506040513d60208110156115da57600080fd5b505160016110de565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061161157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050826001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561166a57600080fd5b505afa15801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b50518151829060019081106116a557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116d188888389611862565b60a780546001600160a01b0319166001600160a01b0387161790556116fe6116f7611afd565b600161179f565b61170930600161179f565b5050508015610fd0576000805461ff0019169055505050505050565b61172d611afd565b6065546001600160a01b0390811691161461177d576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b60a780546001600160a01b0319166001600160a01b0392909216919091179055565b6117a7611afd565b6065546001600160a01b039081169116146117f7576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a260205260409020805460ff1916911515919091179055565b609a546001600160a01b031681565b60985481565b6001600160a01b039182166000908152609c6020908152604080832093909416825291909152205490565b61186a611afd565b6065546001600160a01b039081169116146118ba576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b6127106118c78585611bed565b11156119045760405162461bcd60e51b8152600401808060200182810382526022815260200180612f0c6022913960400191505060405180910390fd5b6001825111611949576040805162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b604482015290519081900360640190fd5b6001600160a01b03811661198e5760405162461bcd60e51b815260040180806020018281038252602b815260200180612d31602b913960400191505060405180910390fd5b60a384905560a483905581516119ab9060a8906020850190612bf3565b5060a580546001600160a01b0319166001600160a01b0392909216919091179055505050565b60a66020526000908152604090205460ff1681565b60a7546001600160a01b031681565b6119fd611afd565b6065546001600160a01b03908116911614611a4d576040805162461bcd60e51b81526020600482018190526024820152600080516020612e11833981519152604482015290519081900360640190fd5b6001600160a01b038116611a925760405162461bcd60e51b8152600401808060200182810382526026815260200180612ce96026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60a5546001600160a01b031681565b3390565b6001600160a01b038316611b465760405162461bcd60e51b8152600401808060200182810382526024815260200180612ee86024913960400191505060405180910390fd5b6001600160a01b038216611b8b5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d0f6022913960400191505060405180910390fd5b6001600160a01b038084166000818152609c6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015611c47576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038316611c935760405162461bcd60e51b8152600401808060200182810382526025815260200180612ea06025913960400191505060405180910390fd5b6001600160a01b038216611cd85760405162461bcd60e51b8152600401808060200182810382526023815260200180612ca46023913960400191505060405180910390fd5b611ce383838361253a565b611d2081604051806060016040528060268152602001612d5c602691396001600160a01b0386166000908152609b602052604090205491906120a2565b6001600160a01b038085166000908152609b6020908152604080832094909455918516815260a6909152205460ff168015611d7457506001600160a01b038316600090815260a2602052604090205460ff16155b156120355760a35460009015611df857611da5612710611d9f60a354856125c090919063ffffffff16565b90612619565b609e54909150611db590826122ba565b609e55609d54611dc590826122ba565b609d556040805182815290516000916001600160a01b03871691600080516020612e5f8339815191529181900360200190a35b60008060a454118015611e15575060a5546001600160a01b031615155b1561201c57611e35612710611d9f60a454866125c090919063ffffffff16565b60a7549091506001600160a01b031615611fa957306000908152609b6020526040902054611e639082611bed565b306000818152609b6020908152604091829020939093558051848152905191926001600160a01b03891692600080516020612e5f8339815191529281900390910190a360a7546001600160a01b0316611ebd308284611b01565b806001600160a01b0316635c11d79583600060a860a560009054906101000a90046001600160a01b0316426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b031681526020018381526020018281038252858181548152602001915080548015611f6757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f49575b50509650505050505050600060405180830381600087803b158015611f8b57600080fd5b505af1158015611f9f573d6000803e3d6000fd5b505050505061201c565b60a5546001600160a01b03166000908152609b6020526040902054611fce9082611bed565b60a580546001600160a01b039081166000908152609b6020908152604091829020949094559154825185815292519082169391891692600080516020612e5f83398151915292908290030190a35b6120308161202a85856122ba565b906122ba565b925050505b6001600160a01b0382166000908152609b60205260409020546120589082611bed565b6001600160a01b038084166000818152609b60209081526040918290209490945580518581529051919392871692600080516020612e5f83398151915292918290030190a3505050565b600081848411156121315760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120f65781810151838201526020016120de565b50505050905090810190601f1680156121235780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03811661217e5760405162461bcd60e51b8152600401808060200182810382526023815260200180612ec56023913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b490600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216612235576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6122416000838361253a565b609d5461224e9082611bed565b609d556001600160a01b0382166000908152609b60205260409020546122749082611bed565b6001600160a01b0383166000818152609b60209081526040808320949094558351858152935192939192600080516020612e5f8339815191529281900390910190a35050565b6000611c4783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120a2565b6001600160a01b0382166123415760405162461bcd60e51b8152600401808060200182810382526021815260200180612e7f6021913960400191505060405180910390fd5b61234d8260008361253a565b61238a81604051806060016040528060228152602001612cc7602291396001600160a01b0385166000908152609b602052604090205491906120a2565b6001600160a01b0383166000908152609b6020526040902055609d546123b090826122ba565b609d556040805182815290516000916001600160a01b03851691600080516020612e5f8339815191529181900360200190a35050565b303b1590565b600054610100900460ff168061240557506124056123e6565b80612413575060005460ff16155b61244e5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff16158015612479576000805460ff1961ff0019909116610100171660011790555b61248161265b565b6124896126fb565b8015610ba4576000805461ff001916905550565b600054610100900460ff16806124b657506124b66123e6565b806124c4575060005460ff16155b6124ff5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff1615801561252a576000805460ff1961ff0019909116610100171660011790555b61253261265b565b6124896127f4565b6125458383836128bd565b6001600160a01b0383166125bb57609e54612568826125626109a8565b90611bed565b11156125bb576040805162461bcd60e51b815260206004820152601960248201527f45524332304361707065643a2063617020657863656564656400000000000000604482015290519081900360640190fd5b505050565b6000826125cf575060006109a2565b828202828482816125dc57fe5b0414611c475760405162461bcd60e51b8152600401808060200182810382526021815260200180612dc86021913960400191505060405180910390fd5b6000611c4783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612aef565b600054610100900460ff168061267457506126746123e6565b80612682575060005460ff16155b6126bd5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff16158015612489576000805460ff1961ff0019909116610100171660011790558015610ba4576000805461ff001916905550565b600054610100900460ff168061271457506127146123e6565b80612722575060005460ff16155b61275d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff16158015612788576000805460ff1961ff0019909116610100171660011790555b6000612792611afd565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ba4576000805461ff001916905550565b600054610100900460ff168061280d575061280d6123e6565b8061281b575060005460ff16155b6128565760405162461bcd60e51b815260040180806020018281038252602e815260200180612e31602e913960400191505060405180910390fd5b600054610100900460ff16158015612881576000805460ff1961ff0019909116610100171660011790555b612889611afd565b609a80546001600160a01b0319166001600160a01b03929092169190911790558015610ba4576000805461ff001916905550565b6099546001600160a01b031615806128d55750609754155b156128df576125bb565b6098541580156128fd57506099546001600160a01b03848116911614155b801561291657506099546001600160a01b038381169116145b80156129225750600081115b1561292c57426098555b6099546001600160a01b03848116911614801561295757506099546001600160a01b03838116911614155b156125bb5760006129666109ae565b505050505090506000811115612ae957600060976129858360016122ba565b8154811061298f57fe5b600091825260208083206001600160a01b03881684526002600490930201918201905260409091205490915060ff16612a0f576040805162461bcd60e51b815260206004820152601e60248201527f4c4745202d204275796572206973206e6f742077686974656c69737465640000604482015290519081900360640190fd5b60018101546001600160a01b038516600090815260038301602052604081205490911115612a63576001600160a01b03851660009081526003830160205260409020546001830154612a60916122ba565b90505b80841115612aa25760405162461bcd60e51b8152600401808060200182810382526026815260200180612da26026913960400191505060405180910390fd5b6001600160a01b0385166000908152600383016020526040902054612ac79085611bed565b6001600160a01b03861660009081526003909301602052604090922091909155505b50505050565b60008183612b3e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120f65781810151838201526020016120de565b506000838581612b4a57fe5b0495945050505050565b5080546000825560040290600052602060002090810190610ba49190612c54565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612bb657805160ff1916838001178555612be3565b82800160010185558215612be3579182015b82811115612be3578251825591602001919060010190612bc8565b50612bef929150612c6f565b5090565b828054828255906000526020600020908101928215612c48579160200282015b82811115612c4857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612c13565b50612bef929150612c84565b5b80821115612bef5760008082556001820155600401612c55565b5b80821115612bef5760008155600101612c70565b5b80821115612bef5780546001600160a01b0319168155600101612c8556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373466565207265776172642061646472657373206d757374206e6f74206265207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636543616c6c6572206973206e6f74207468652077686974656c69737465720000004c4745202d20416d6f756e7420657863656564732077686974656c697374206d6178696d756d536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e65772077686974656c697374657220697320746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737346656573206d757374206e6f7420746f74616c206d6f7265207468616e203130302545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d452c38e8d09fe54c3a51b80931239949a43ce4d66ae8e3f374743348258311864736f6c634300060c0033
Deployed Bytecode Sourcemap
30937:8276:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36076:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37040:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37040:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;36463:100;;;:::i;:::-;;;;;;;;;;;;;;;;28673:804;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37217:321;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37217:321:0;;;;;;;;;;;;;;;;;:::i;25786:133::-;;;;;;;;;;;;;;;;-1:-1:-1;25786:133:0;-1:-1:-1;;;;;25786:133:0;;:::i;:::-;;36363:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36280:75;;;:::i;37546:218::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37546:218:0;;;;;;;;:::i;33474:99::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33474:99:0;;;;;;;;:::i;35951:117::-;;;;;;;;;;;;;;;;-1:-1:-1;35951:117:0;;:::i;27504:700::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27504:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27504:700:0;;;;;;;;;;;;-1:-1:-1;27504:700:0;-1:-1:-1;27504:700:0;;;;:::i;25013:30::-;;;:::i;:::-;;;;-1:-1:-1;;;;;25013:30:0;;;;;;;;;;;;;;26561:573;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26561:573:0;;;;;;;;;;;;;;;-1:-1:-1;;;26561:573:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26561:573:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26561:573:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26561:573:0;;;;;;;;;;-1:-1:-1;26561:573:0;;-1:-1:-1;26561:573:0;-1:-1:-1;26561:573:0;:::i;31600:35::-;;;;;;;;;;;;;;;;-1:-1:-1;31600:35:0;;:::i;31454:28::-;;;:::i;36571:119::-;;;;;;;;;;;;;;;;-1:-1:-1;36571:119:0;-1:-1:-1;;;;;36571:119:0;;:::i;31374:44::-;;;;;;;;;;;;;;;;-1:-1:-1;31374:44:0;-1:-1:-1;;;;;31374:44:0;;:::i;9455:148::-;;;:::i;31424:26::-;;;:::i;33255:90::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33255:90:0;;;;;;;;;;:::i;8813:79::-;;;:::i;36176:96::-;;;:::i;25610:164::-;;;:::i;37772:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37772:269:0;;;;;;;;:::i;24922:43::-;;;;;;;;;;;;;;;;-1:-1:-1;24922:43:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36698:175;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36698:175:0;;;;;;;;:::i;31648:955::-;;;;;;;;;;;;;;;;-1:-1:-1;31648:955:0;;;;;;;;;;;;;-1:-1:-1;;;;;31648:955:0;;;;;;;;;;;;:::i;32611:77::-;;;;;;;;;;;;;;;;-1:-1:-1;32611:77:0;-1:-1:-1;;;;;32611:77:0;;:::i;33350:112::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33350:112:0;;;;;;;;;;:::i;25056:27::-;;;:::i;24978:28::-;;;:::i;36881:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36881:151:0;;;;;;;;;;:::i;32700:550::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32700:550:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32700:550:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32700:550:0;;-1:-1:-1;;;32700:550:0;;-1:-1:-1;;;;;32700:550:0;;-1:-1:-1;32700:550:0;;-1:-1:-1;32700:550:0:i;31527:37::-;;;;;;;;;;;;;;;;-1:-1:-1;31527:37:0;-1:-1:-1;;;;;31527:37:0;;:::i;31571:22::-;;;:::i;9758:244::-;;;;;;;;;;;;;;;;-1:-1:-1;9758:244:0;-1:-1:-1;;;;;9758:244:0;;:::i;31489:32::-;;;:::i;36076:92::-;36155:5;36148:12;;;;;;;;-1:-1:-1;;36148:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36122:13;;36148:12;;36155:5;;36148:12;;36155:5;36148:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36076:92;:::o;37040:169::-;37123:4;37140:39;37149:12;:10;:12::i;:::-;37163:7;37172:6;37140:8;:39::i;:::-;-1:-1:-1;37197:4:0;37040:169;;;;;:::o;36463:100::-;36543:12;;36463:100;:::o;28673:804::-;28726:7;28735;28744;28753;28762:4;28768:7;28817:1;28801:13;;:17;28798:622;;;28880:13;;28849:28;28918:481;28942:19;:26;28938:30;;28918:481;;;29012:30;29045:19;29065:1;29045:22;;;;;;;;;;;;;;;;;;29012:55;;29127:42;29152:7;:16;;;29127:20;:24;;:42;;;;:::i;:::-;29104:65;;29198:20;29191:3;:27;29188:195;;29249:8;:1;29255;29249:5;:8::i;:::-;29259:16;;29299:17;;;;29277:20;;29318:17;;;29259:16;29336:12;:10;:12::i;:::-;-1:-1:-1;;;;;29318:31:0;;;;;;;;;;;;-1:-1:-1;29318:31:0;;;;;;;29351:17;;;;29369:12;:10;:12::i;:::-;-1:-1:-1;;;;;29351:31:0;-1:-1:-1;;;;;29351:31:0;;;;;;;;;;;;;29241:142;;;;;;;;;;;;;;;;;29188:195;-1:-1:-1;28970:3:0;;28918:481;;;;28798:622;;-1:-1:-1;29448:1:0;;-1:-1:-1;29448:1:0;;-1:-1:-1;29448:1:0;;-1:-1:-1;29448:1:0;;-1:-1:-1;29448:1:0;;-1:-1:-1;29448:1:0;28673:804;;;;;;;:::o;37217:321::-;37323:4;37340:36;37350:6;37358:9;37369:6;37340:9;:36::i;:::-;37387:121;37396:6;37404:12;:10;:12::i;:::-;37418:89;37456:6;37418:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37418:19:0;;;;;;:11;:19;;;;;;37438:12;:10;:12::i;:::-;-1:-1:-1;;;;;37418:33:0;;;;;;;;;;;;-1:-1:-1;37418:33:0;;;:89;:37;:89::i;:::-;37387:8;:121::i;:::-;-1:-1:-1;37526:4:0;37217:321;;;;;:::o;25786:133::-;25532:12;:10;:12::i;:::-;25516;;-1:-1:-1;;;;;25516:12:0;;;:28;;;25508:70;;;;;-1:-1:-1;;;25508:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25508:70:0;;;;;;;;;;;;;;;25875:36:::1;25896:14;25875:20;:36::i;:::-;25786:133:::0;:::o;36363:92::-;36438:9;;;;36363:92;:::o;36280:75::-;36343:4;;36280:75;:::o;37546:218::-;37634:4;37651:83;37660:12;:10;:12::i;:::-;37674:7;37683:50;37722:10;37683:11;:25;37695:12;:10;:12::i;:::-;-1:-1:-1;;;;;37683:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;37683:25:0;;;:34;;;;;;;;;;;:38;:50::i;33474:99::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;33546:19:::1;33552:3;33557:7;33546:5;:19::i;:::-;33474:99:::0;;:::o;35951:117::-;36006:4;;:16;;36015:6;36006:8;:16::i;:::-;36001:4;:21;36033:27;36039:12;:10;:12::i;:::-;36053:6;36033:5;:27::i;27504:700::-;25532:12;:10;:12::i;:::-;25516;;-1:-1:-1;;;;;25516:12:0;;;:28;;;25508:70;;;;;-1:-1:-1;;;25508:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25508:70:0;;;;;;;;;;;;;;;27682:19:::1;:26:::0;27674:34;::::1;27666:60;;;::::0;;-1:-1:-1;;;27666:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27666:60:0;;;;;;;;;;;;;::::1;;27757:1;27745:9;:13;27737:43;;;::::0;;-1:-1:-1;;;27737:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27737:43:0;;;;;;;;;;;;;::::1;;27808:19;27828:5;27808:26;;;;;;;;;;;;;;;;;;:35;;;27796:8;:47;27793:111;;27896:8;27858:19;27878:5;27858:26;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:46:::0;27793:111:::1;27941:19;27961:5;27941:26;;;;;;;;;;;;;;;;;;:36;;;27928:9;:49;27925:117;;28033:9;27994:19;28014:5;27994:26;;;;;;;;;;;;;;;;;;:36;;:48;;;;27925:117;28068:9;28063:134;28083:20:::0;;::::1;28063:134;;;28178:7;28125:19;28145:5;28125:26;;;;;;;;;;;;;;;;;;:36;;:50;28162:9;;28172:1;28162:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;28162:12:0::1;28125:50:::0;;-1:-1:-1;28125:50:0;::::1;::::0;;;;;;-1:-1:-1;28125:50:0;:60;;-1:-1:-1;;28125:60:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;28105:3:0::1;28063:134;;;;27504:700:::0;;;;;;:::o;25013:30::-;;;-1:-1:-1;;;;;25013:30:0;;:::o;26561:573::-;25532:12;:10;:12::i;:::-;25516;;-1:-1:-1;;;;;25516:12:0;;;:28;;;25508:70;;;;;-1:-1:-1;;;25508:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25508:70:0;;;;;;;;;;;;;;;26717:37;;::::1;26709:70;;;::::0;;-1:-1:-1;;;26709:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26709:70:0;;;;;;;;;;;;;::::1;;26800:15;:29:::0;;-1:-1:-1;;;;;;26800:29:0::1;-1:-1:-1::0;;;;;26800:29:0;::::1;;::::0;;26853:20;;26850:277:::1;;26904:26;26911:19;;26904:26;:::i;:::-;26960:9;26955:151;26975:20:::0;;::::1;26955:151;;;27021:19;27046:43;;;;;;;;27061:9;;27071:1;27061:12;;;;;;;;;;;;;27046:43;;;;27075:10;;27086:1;27075:13;;;;;;;;::::0;;::::1;::::0;;;::::1;;27046:43:::0;;;27021:69;;::::1;::::0;;::::1;::::0;;-1:-1:-1;27021:69:0;;;;;;;;;::::1;::::0;;::::1;;::::0;;;;::::1;::::0;;;::::1;::::0;;;;-1:-1:-1;26997:3:0::1;26955:151;;;;26850:277;26561:573:::0;;;;;:::o;31600:35::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31600:35:0;;-1:-1:-1;31600:35:0;:::o;31454:28::-;;;;:::o;36571:119::-;-1:-1:-1;;;;;36664:18:0;36637:7;36664:18;;;:9;:18;;;;;;;36571:119::o;31374:44::-;;;;;;;;;;;;;;;:::o;9455:148::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;9546:6:::1;::::0;9525:40:::1;::::0;9562:1:::1;::::0;-1:-1:-1;;;;;9546:6:0::1;::::0;9525:40:::1;::::0;9562:1;;9525:40:::1;9576:6;:19:::0;;-1:-1:-1;;;;;;9576:19:0::1;::::0;;9455:148::o;31424:26::-;;;;:::o;33255:90::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33322:8:0;;;::::1;;::::0;;;:5:::1;:8;::::0;;;;:15;;-1:-1:-1;;33322:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33255:90::o;8813:79::-;8878:6;;-1:-1:-1;;;;;8878:6:0;8813:79;:::o;36176:96::-;36257:7;36250:14;;;;;;;;-1:-1:-1;;36250:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36224:13;;36250:14;;36257:7;;36250:14;;36257:7;36250:14;;;;;;;;;;;;;;;;;;;;;;;;25610:164;25532:12;:10;:12::i;:::-;25516;;-1:-1:-1;;;;;25516:12:0;;;:28;;;25508:70;;;;;-1:-1:-1;;;25508:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25508:70:0;;;;;;;;;;;;;;;25705:12:::1;::::0;25682:48:::1;::::0;25727:1:::1;::::0;-1:-1:-1;;;;;25705:12:0::1;::::0;25682:48:::1;::::0;25727:1;;25682:48:::1;25741:12;:25:::0;;-1:-1:-1;;;;;;25741:25:0::1;::::0;;25610:164::o;37772:269::-;37865:4;37882:129;37891:12;:10;:12::i;:::-;37905:7;37914:96;37953:15;37914:96;;;;;;;;;;;;;;;;;:11;:25;37926:12;:10;:12::i;:::-;-1:-1:-1;;;;;37914:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;37914:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;24922:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24922:43:0;:::o;36698:175::-;36784:4;36801:42;36811:12;:10;:12::i;:::-;36825:9;36836:6;36801:9;:42::i;31648:955::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;31832:1:::1;31826:3;:7;31818:41;;;::::0;;-1:-1:-1;;;31818:41:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31818:41:0;;;;;;;;;;;;;::::1;;31880:19;::::0;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;31880:19:0::1;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:19:::1;:::i;:::-;-1:-1:-1::0;31910:18:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;31910:18:0::1;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:18:::1;:::i;:::-;-1:-1:-1::0;31939:9:0::1;:14:::0;;-1:-1:-1;;31939:14:0::1;31951:2;31939:14;::::0;;31974:4:::1;:10:::0;;;32005:16:::1;:14;:16::i;:::-;32026:23;:21;:23::i;:::-;32058:20;32100:6;32058:49;;32112:19;32152:1;-1:-1:-1::0;;;;;32152:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32152:11:0;32215:8:::1;::::0;;-1:-1:-1;;;32215:8:0;;;;32152:11;;-1:-1:-1;32179:52:0::1;::::0;-1:-1:-1;;;;;32187:12:0;;::::1;::::0;::::1;::::0;32208:4:::1;::::0;32215:6;::::1;::::0;::::1;::::0;:8:::1;::::0;;::::1;::::0;32152:11:::1;::::0;32215:8;;;;;;;:6;:8;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32215:8:0;32187:37:::1;::::0;;-1:-1:-1;;;;;;32187:37:0::1;::::0;;;;;;-1:-1:-1;;;;;32187:37:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;32215:8:::1;::::0;32187:37;;;;;;;-1:-1:-1;32187:37:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32187:37:0;32226:4:::1;32179:7;:52::i;:::-;32289:16;::::0;;32303:1:::1;32289:16:::0;;;32252:34:::1;32289:16:::0;;::::1;::::0;;32252:34;32289:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;32289:16:0::1;32252:53;;32361:4;32330:17;32348:1;32330:20;;;;;;;;;;;;;:36;-1:-1:-1::0;;;;;32330:36:0::1;;;-1:-1:-1::0;;;;;32330:36:0::1;;;::::0;::::1;32400:1;-1:-1:-1::0;;;;;32400:6:0::1;;:8;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32400:8:0;32377:20;;:17;;32395:1:::1;::::0;32377:20;::::1;;;;;;;;;;:31;-1:-1:-1::0;;;;;32377:31:0::1;;;-1:-1:-1::0;;;;;32377:31:0::1;;;::::0;::::1;32417:70;32425:10;32437:12;32451:17;32470:16;32417:7;:70::i;:::-;32496:7;:16:::0;;-1:-1:-1;;;;;;32496:16:0::1;-1:-1:-1::0;;;;;32496:16:0;::::1;;::::0;;32521:34:::1;32536:12;:10;:12::i;:::-;32550:4;32521:14;:34::i;:::-;32560:35;32583:4;32590;32560:14;:35::i;:::-;5298:1;;;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;31648:955;;;;;;:::o;32611:77::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;32669:7:::1;:11:::0;;-1:-1:-1;;;;;;32669:11:0::1;-1:-1:-1::0;;;;;32669:11:0;;;::::1;::::0;;;::::1;::::0;;32611:77::o;33350:112::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33428:15:0;;;::::1;;::::0;;;:12:::1;:15;::::0;;;;:26;;-1:-1:-1;;33428:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33350:112::o;25056:27::-;;;-1:-1:-1;;;;;25056:27:0;;:::o;24978:28::-;;;;:::o;36881:151::-;-1:-1:-1;;;;;36997:18:0;;;36970:7;36997:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;36881:151::o;32700:550::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;32889:5:::1;32857:28;:10:::0;32872:12;32857:14:::1;:28::i;:::-;:37;;32849:84;;;;-1:-1:-1::0;;;32849:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32979:1;32952:17;:24;:28;32944:53;;;::::0;;-1:-1:-1;;;32944:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32944:53:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;33010:30:0;::::1;33002:86;;;;-1:-1:-1::0;;;33002:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33097:11;:24:::0;;;33126:13:::1;:28:::0;;;33159:38;;::::1;::::0;:18:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;33202:17:0::1;:36:::0;;-1:-1:-1;;;;;;33202:36:0::1;-1:-1:-1::0;;;;;33202:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;32700:550:0:o;31527:37::-;;;;;;;;;;;;;;;:::o;31571:22::-;;;-1:-1:-1;;;;;31571:22:0;;:::o;9758:244::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9847:22:0;::::1;9839:73;;;;-1:-1:-1::0;;;9839:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9949:6;::::0;9928:38:::1;::::0;-1:-1:-1;;;;;9928:38:0;;::::1;::::0;9949:6:::1;::::0;9928:38:::1;::::0;9949:6:::1;::::0;9928:38:::1;9977:6;:17:::0;;-1:-1:-1;;;;;;9977:17:0::1;-1:-1:-1::0;;;;;9977:17:0;;;::::1;::::0;;;::::1;::::0;;9758:244::o;31489:32::-;;;-1:-1:-1;;;;;31489:32:0;;:::o;7089:106::-;7177:10;7089:106;:::o;38861:346::-;-1:-1:-1;;;;;38963:19:0;;38955:68;;;;-1:-1:-1;;;38955:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39042:21:0;;39034:68;;;;-1:-1:-1;;;39034:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39115:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;39167:32;;;;;;;;;;;;;;;;;38861:346;;;:::o;10983:181::-;11041:7;11073:5;;;11097:6;;;;11089:46;;;;;-1:-1:-1;;;11089:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11155:1;10983:181;-1:-1:-1;;;10983:181:0:o;33925:2020::-;-1:-1:-1;;;;;34023:20:0;;34015:70;;;;-1:-1:-1;;;34015:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34104:23:0;;34096:71;;;;-1:-1:-1;;;34096:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34182:47;34203:6;34211:9;34222:6;34182:20;:47::i;:::-;34258:71;34280:6;34258:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34258:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;34238:17:0;;;;;;;:9;:17;;;;;;;;:91;;;;34341:16;;;;;:5;:16;;;;;;;:41;;;;-1:-1:-1;;;;;;34362:20:0;;;;;;:12;:20;;;;;;;;34361:21;34341:41;34338:1481;;;34434:11;;34395:21;;34434:15;34431:246;;34479:34;34507:5;34479:23;34490:11;;34479:6;:10;;:23;;;;:::i;:::-;:27;;:34::i;:::-;34533:4;;34463:50;;-1:-1:-1;34533:23:0;;34463:50;34533:8;:23::i;:::-;34526:4;:30;34578:12;;:31;;34595:13;34578:16;:31::i;:::-;34563:12;:46;34621:43;;;;;;;;34646:1;;-1:-1:-1;;;;;34621:43:0;;;-1:-1:-1;;;;;;;;;;;34621:43:0;;;;;;;;34431:246;34687:23;34744:1;34728:13;;:17;:52;;;;-1:-1:-1;34749:17:0;;-1:-1:-1;;;;;34749:17:0;:31;;34728:52;34725:1018;;;34817:36;34847:5;34817:25;34828:13;;34817:6;:10;;:25;;;;:::i;:36::-;34869:7;;34799:54;;-1:-1:-1;;;;;;34869:7:0;:21;34866:865;;34958:4;34940:24;;;;:9;:24;;;;;;:45;;34969:15;34940:28;:45::i;:::-;34931:4;34913:24;;;;:9;:24;;;;;;;;;:72;;;;35011:48;;;;;;;34931:4;;-1:-1:-1;;;;;35011:48:0;;;-1:-1:-1;;;;;;;;;;;35011:48:0;;;;;;;;;35122:7;;-1:-1:-1;;;;;35122:7:0;35175:49;35192:4;35122:7;35208:15;35175:8;:49::i;:::-;35253:1;-1:-1:-1;;;;;35253:55:0;;35335:15;35377:1;35405:18;35450:17;;;;;;;;;-1:-1:-1;;;;;35450:17:0;35494:15;35253:279;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35253:279:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35253:279:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34866:865;;;;35616:17;;-1:-1:-1;;;;;35616:17:0;35606:28;;;;:9;:28;;;;;;:49;;35639:15;35606:32;:49::i;:::-;35585:17;;;-1:-1:-1;;;;;35585:17:0;;;35575:28;;;;:9;:28;;;;;;;;;:80;;;;35688:17;;35671:52;;;;;;;35688:17;;;;35671:52;;;;-1:-1:-1;;;;;;;;;;;35671:52:0;;;;;;;;34866:865;35762:46;35792:15;35762:25;:6;35773:13;35762:10;:25::i;:::-;:29;;:46::i;:::-;35753:55;;34338:1481;;;-1:-1:-1;;;;;35854:20:0;;;;;;:9;:20;;;;;;:32;;35879:6;35854:24;:32::i;:::-;-1:-1:-1;;;;;35831:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;35902:35;;;;;;;35831:20;;35902:35;;;;-1:-1:-1;;;;;;;;;;;35902:35:0;;;;;;;;33925:2020;;;:::o;11870:192::-;11956:7;11992:12;11984:6;;;;11976:29;;;;-1:-1:-1;;;11976:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12028:5:0;;;11870:192::o;25931:266::-;-1:-1:-1;;;;;26013:28:0;;26005:76;;;;-1:-1:-1;;;26005:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26120:12;;26097:52;;-1:-1:-1;;;;;26097:52:0;;;;26120:12;;26097:52;;26120:12;;26097:52;26160:12;:29;;-1:-1:-1;;;;;;26160:29:0;-1:-1:-1;;;;;26160:29:0;;;;;;;;;;25931:266::o;38049:378::-;-1:-1:-1;;;;;38133:21:0;;38125:65;;;;;-1:-1:-1;;;38125:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38203:49;38232:1;38236:7;38245:6;38203:20;:49::i;:::-;38280:12;;:24;;38297:6;38280:16;:24::i;:::-;38265:12;:39;-1:-1:-1;;;;;38336:18:0;;;;;;:9;:18;;;;;;:30;;38359:6;38336:22;:30::i;:::-;-1:-1:-1;;;;;38315:18:0;;;;;;:9;:18;;;;;;;;:51;;;;38382:37;;;;;;;38315:18;;;;-1:-1:-1;;;;;;;;;;;38382:37:0;;;;;;;;;38049:378;;:::o;11439:136::-;11497:7;11524:43;11528:1;11531;11524:43;;;;;;;;;;;;;;;;;:3;:43::i;38435:418::-;-1:-1:-1;;;;;38519:21:0;;38511:67;;;;-1:-1:-1;;;38511:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38591:49;38612:7;38629:1;38633:6;38591:20;:49::i;:::-;38674:68;38697:6;38674:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38674:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;38653:18:0;;;;;;:9;:18;;;;;:89;38768:12;;:24;;38785:6;38768:16;:24::i;:::-;38753:12;:39;38808:37;;;;;;;;38834:1;;-1:-1:-1;;;;;38808:37:0;;;-1:-1:-1;;;;;;;;;;;38808:37:0;;;;;;;;38435:418;;:::o;5459:508::-;5876:4;5922:17;5954:7;5459:508;:::o;8391:129::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;8449:26:::1;:24;:26::i;:::-;8486;:24;:26::i;:::-;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;8391:129;:::o;25203:143::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;25268:26:::1;:24;:26::i;:::-;25305:33;:31;:33::i;33585:334::-:0;33690:60;33724:6;33732:9;33743:6;33690:33;:60::i;:::-;-1:-1:-1;;;;;33769:20:0;;33765:147;;33866:4;;33837:25;33855:6;33837:13;:11;:13::i;:::-;:17;;:25::i;:::-;:33;;33829:71;;;;;-1:-1:-1;;;33829:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33585:334;;;:::o;12313:471::-;12371:7;12616:6;12612:47;;-1:-1:-1;12646:1:0;12639:8;;12612:47;12683:5;;;12687:1;12683;:5;:1;12707:5;;;;;:10;12699:56;;;;-1:-1:-1;;;12699:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13252:132;13310:7;13337:39;13341:1;13344;13337:39;;;;;;;;;;;;;;;;;:3;:39::i;7010:69::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5312:14;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;7010:69;:::o;8528:202::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;8600:17:::1;8620:12;:10;:12::i;:::-;8643:6;:18:::0;;-1:-1:-1;;;;;;8643:18:0::1;-1:-1:-1::0;;;;;8643:18:0;::::1;::::0;;::::1;::::0;;;8677:43:::1;::::0;8643:18;;-1:-1:-1;8643:18:0;-1:-1:-1;;8677:43:0::1;::::0;-1:-1:-1;;8677:43:0::1;5298:1;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;8528:202;:::o;25352:106::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;25436:12:::1;:10;:12::i;:::-;25421;:27:::0;;-1:-1:-1;;;;;;25421:27:0::1;-1:-1:-1::0;;;;;25421:27:0;;;::::1;::::0;;;::::1;::::0;;5308:57;;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;25352:106;:::o;29612:1312::-;29724:15;;-1:-1:-1;;;;;29724:15:0;:29;;:64;;-1:-1:-1;29757:19:0;:26;:31;29724:64;29721:89;;;29803:7;;29721:89;29833:13;;:18;:47;;;;-1:-1:-1;29865:15:0;;-1:-1:-1;;;;;29855:25:0;;;29865:15;;29855:25;;29833:47;:79;;;;-1:-1:-1;29897:15:0;;-1:-1:-1;;;;;29884:28:0;;;29897:15;;29884:28;29833:79;:93;;;;;29925:1;29916:6;:10;29833:93;29830:130;;;29957:3;29941:13;:19;29830:130;29994:15;;-1:-1:-1;;;;;29984:25:0;;;29994:15;;29984:25;:57;;;;-1:-1:-1;30026:15:0;;-1:-1:-1;;;;;30013:28:0;;;30026:15;;30013:28;;29984:57;29981:926;;;30095:21;30125:22;:20;:22::i;:::-;30094:53;;;;;;;30191:1;30175:13;:17;30172:710;;;30231:30;30264:19;30284:20;:13;30302:1;30284:17;:20::i;:::-;30264:41;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30350:28:0;;;;:17;30264:41;;;;;30350:17;;;:28;;;;;;;30264:41;;-1:-1:-1;30350:28:0;;30342:71;;;;;-1:-1:-1;;;30342:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30548:17;;;;-1:-1:-1;;;;;30517:28:0;;30450:23;30517:28;;;:17;;;:28;;;;;;30450:23;;-1:-1:-1;30514:143:0;;;-1:-1:-1;;;;;30628:28:0;;;;;;:17;;;:28;;;;;;30606:17;;;;:51;;:21;:51::i;:::-;30588:69;;30514:143;30700:15;30690:6;:25;;30682:76;;;;-1:-1:-1;;;30682:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30808:28:0;;;;;;:17;;;:28;;;;;;:40;;30841:6;30808:32;:40::i;:::-;-1:-1:-1;;;;;30777:28:0;;;;;;:17;;;;:28;;;;;;:71;;;;-1:-1:-1;30172:710:0;29981:926;29612:1312;;;:::o;13872:345::-;13958:7;14060:12;14053:5;14045:28;;;;-1:-1:-1;;;14045:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14084:9;14100:1;14096;:5;;;;;;;13872:345;-1:-1:-1;;;;;13872:345:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://d452c38e8d09fe54c3a51b80931239949a43ce4d66ae8e3f3747433482583118
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.