Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
EMaxCoin8
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-19 */ // File: @openzeppelin/contracts/proxy/utils//Initializable.sol // OpenZeppelin Contracts v4.4.0 (proxy/utils/Initializable.sol) pragma solidity ^0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() initializer {} * ``` * ==== */ abstract 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 protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @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"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.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 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. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: contracts/ProxyOwnable.sol pragma solidity ^0.8.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. */ abstract contract ProxyOwnable is Context, Initializable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function ownerInitialize() public initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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; } } // File: contracts/REFLECT8.sol pragma solidity ^0.8.0; contract REFLECT8 is Context, IERC20, ProxyOwnable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 2000000000 * 10**6 * 10**18; uint256 private _rTotal; uint256 private _tFeeTotal; string private _name; string private _symbol; uint8 private _decimals; address private constant _burnAddress = 0x000000000000000000000000000000000000dEaD; uint256 private _burnFeeTotal; // All address that need to be whitelisted are described as follows // variable name - description // value - address address public constant bitforex = 0xd81d665edeEe5762FCbC4802520910ED509dA22a; address public constant EMAXExpenseOld = 0x331626d097cc466f6544257c2Dc18f60f6382414; address public constant EMAXExpense = 0x87Ba6c0B3E06d4B9Ae4E5c5752D8E94AeE135470; address public constant EMAXTreasury = 0x5EA06A2bE857D35D5E545b2bF54b2d387bB8B4bA; address public constant EMAXEvents = 0x80dF68fA5275D0e1EE83aA4160f0b82033597f51; mapping(address => bool) public whitelist; // v5 new whitelist addresses address public constant EMAXMint = 0x15874d65e649880c2614e7a480cb7c9A55787FF6; address public constant Unicrypt = 0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf; address public constant Coinsbit = 0x21Dd5c13925407e5bCec3f27aB11a355a9Dafbe3; address public constant UniswapLP = 0xb6CA52c7916ad7960C12Dc489FD93E5Af7cA257f; address public constant DexTrade1 = 0x064B88728d40fA662a36a7F23AB398F634A9e1fB; address public constant DexTrade2 = 0x5ef6CB30Bdeb7417EfF861e68bB405dc4a0B46C6; // constructor () public { function initialize() public initializer { ownerInitialize(); _rTotal = (MAX - (MAX % _tTotal)); _name = "EthereumMax"; _symbol = "eMax"; _decimals = 18; _rOwned[_msgSender()] = _rTotal; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal.sub(_burnFeeTotal); } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function 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 isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } // function no longer updates in v5 since _reflectFee is turned off in transfer function. function totalFees() public view returns (uint256) { return _tFeeTotal; } // function no longer updates in v5 since _reflectFee is turned off in transfer function. function reflect(uint256 tAmount) public { address sender = _msgSender(); require( !_isExcluded[sender], "Excluded addresses cannot call this function" ); (uint256 rAmount, , , ) = _getValues(tAmount, 6); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , ) = _getValues(tAmount, 6); return rAmount; } else { (, uint256 rTransferAmount, , ) = _getValues(tAmount, 6); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address sender, address recipient, uint256 amount ) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); // tx fee redirected to treasury for 9% of transaction value. Chnaged from 6% to 9% to account for manual burns bi-monthly. uint256 txFee = 9; // burn fee change to 6% //uint256 burnFee = 6; // Whitelisted the deployer if ( sender == bitforex || recipient == bitforex || sender == EMAXExpenseOld || recipient == EMAXExpenseOld || sender == EMAXExpense || recipient == EMAXExpense || sender == EMAXTreasury || recipient == EMAXTreasury || sender == EMAXEvents || recipient == EMAXEvents || sender == EMAXMint || recipient == EMAXMint || sender == UniswapLP || // recipient == UniswapLP || // tokenomics only apply to a transfer into UniswapLP contract. sender == Unicrypt || recipient == Unicrypt || sender == Coinsbit || recipient == Coinsbit || sender == DexTrade1 || recipient == DexTrade1 || sender == DexTrade2 || recipient == DexTrade2 ) { txFee = 0; //burnFee = 0; } //uint256 totalFeePercentage = txFee + burnFee; uint256 totalFeePercentage = txFee; ( uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 currentRate ) = _getValues(amount, totalFeePercentage); // 3% added to treasury, unless whitelisted. uint256 tFee = amount.mul(txFee).div(100); uint256 rFee = tFee.mul(currentRate); _rOwned[EMAXTreasury] = _rOwned[EMAXTreasury].add(rFee); // senderAmountRemaining = balance - (rAmount) _rOwned[sender] = _rOwned[sender].sub(rAmount); // recipientBalance = recipientBalance + rTransferAmount _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); //excluded scenario if (_isExcluded[sender]) { _tOwned[sender] = _tOwned[sender].sub(amount); } if (_isExcluded[recipient]) { _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); } // no reflect fee //uint256 tFee = amount.mul(txFee).div(100); //uint256 rFee = tFee.mul(currentRate); //_reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); // Calculate burned tokens //uint256 tBurn = amount.mul(burnFee).div(100); // only burn if not whitelisted. //uint256 rBurn = tBurn.mul(currentRate); // subtract from senders balance // _rOwned[sender] = _rOwned[sender].sub(rBurn); // produces stack to deep error, need combine with line above where it subtracts rAmount from sender. //_burnTokens(sender, tBurn, rBurn); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount, uint256 totalFeePercentage) private view returns ( uint256, uint256, uint256, uint256 ) { uint256 currentRate = _getRate(); uint256 totalFee = tAmount.mul(totalFeePercentage).div(100); uint256 tTransferAmount = tAmount.sub(totalFee); uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = totalFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); return (rAmount, rTransferAmount, tTransferAmount, currentRate); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; uint256 excludedLength = _excluded.length; for (uint256 i = 0; i < excludedLength; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } //------------------- Owner function excludeAccount(address account) external onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) external onlyOwner { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } //------------------- Burn Baby Burn function _burnTokens( address sender, uint256 tBurn, uint256 rBurn ) internal { // require the sender to have the balance to be burned. //require(_rOwned[sender] >= rBurn, "EMAX: burn amount exceeds rBalance"); // subtract from senders balance was here, moved to transfer function so it doesnt double emit // add to _burnAddress balance _rOwned[_burnAddress] = _rOwned[_burnAddress].add(rBurn); // if excluded if (_isExcluded[_burnAddress]) _tOwned[_burnAddress] = _tOwned[_burnAddress].add(tBurn); //emit Transfer(sender, _burnAddress, tBurn); // add to burn fee total _burnFeeTotal = _burnFeeTotal.add(tBurn); } // ----------------- Withdraw ERC20 tokens, contract owner only function withdraw( address tokenAddress, address to, uint256 amount ) external onlyOwner { IERC20 token = IERC20(tokenAddress); uint256 erc20Balance = token.balanceOf(address(this)); // get balance of particular ERC20 sent to mainnet contract require(amount <= erc20Balance, "Balance is too low"); token.transfer(to, amount); } } // File: contracts/EMaxCoin8.sol pragma solidity ^0.8.0; contract EMaxCoin8 is REFLECT8 {}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Coinsbit","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DexTrade1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DexTrade2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMAXEvents","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMAXExpense","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMAXExpenseOld","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMAXMint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMAXTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Unicrypt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UniswapLP","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":[],"name":"bitforex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"ownerInitialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506140d6806100206000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c8063715018a611610125578063a9059cbb116100ad578063dab506ba1161007c578063dab506ba14610637578063dd62ed3e14610655578063f2cc0c1814610685578063f2fde38b146106a1578063f84354f1146106bd5761021c565b8063a9059cbb1461059d578063cb90f376146105cd578063cba0e996146105eb578063d9caed121461061b5761021c565b80638da5cb5b116100f45780638da5cb5b146104e357806395b12b2c1461050157806395d89b411461051f5780639b19251a1461053d578063a457c2d71461056d5761021c565b8063715018a614610493578063793f214a1461049d5780638129fc1c146104bb5780638a389689146104c55761021c565b806323b872dd116101a8578063395093511161017757806339509351146103c75780634549b039146103f7578063456ee43c146104275780635e18d9721461044557806370a08231146104635761021c565b806323b872dd1461032b5780632d8381191461035b578063313ce5671461038b5780633513eada146103a95761021c565b80630bfab51e116101ef5780630bfab51e146102a9578063115624be146102c757806313114a9d146102e557806318160ddd146103035780631b4e8cc2146103215761021c565b8063053ab1821461022157806306fdde031461023d578063095ea7b31461025b57806309749fa71461028b575b600080fd5b61023b6004803603810190610236919061347f565b6106d9565b005b610245610854565b60405161025291906137a8565b60405180910390f35b6102756004803603810190610270919061341a565b6108e6565b604051610282919061378d565b60405180910390f35b610293610904565b6040516102a09190613749565b60405180910390f35b6102b161091c565b6040516102be9190613749565b60405180910390f35b6102cf610934565b6040516102dc9190613749565b60405180910390f35b6102ed61094c565b6040516102fa919061396a565b60405180910390f35b61030b610956565b604051610318919061396a565b60405180910390f35b610329610980565b005b610345600480360381019061034091906133cb565b610b02565b604051610352919061378d565b60405180910390f35b6103756004803603810190610370919061347f565b610bdb565b604051610382919061396a565b60405180910390f35b610393610c49565b6040516103a09190613985565b60405180910390f35b6103b1610c60565b6040516103be9190613749565b60405180910390f35b6103e160048036038101906103dc919061341a565b610c78565b6040516103ee919061378d565b60405180910390f35b610411600480360381019061040c91906134d1565b610d2b565b60405161041e919061396a565b60405180910390f35b61042f610dbb565b60405161043c9190613749565b60405180910390f35b61044d610dd3565b60405161045a9190613749565b60405180910390f35b61047d60048036038101906104789190613366565b610deb565b60405161048a919061396a565b60405180910390f35b61049b610ed6565b005b6104a5611012565b6040516104b29190613749565b60405180910390f35b6104c361102a565b005b6104cd6112b6565b6040516104da9190613749565b60405180910390f35b6104eb6112ce565b6040516104f89190613749565b60405180910390f35b6105096112f7565b6040516105169190613749565b60405180910390f35b61052761130f565b60405161053491906137a8565b60405180910390f35b61055760048036038101906105529190613366565b6113a1565b604051610564919061378d565b60405180910390f35b6105876004803603810190610582919061341a565b6113c1565b604051610594919061378d565b60405180910390f35b6105b760048036038101906105b2919061341a565b61148e565b6040516105c4919061378d565b60405180910390f35b6105d56114ac565b6040516105e29190613749565b60405180910390f35b61060560048036038101906106009190613366565b6114c4565b604051610612919061378d565b60405180910390f35b610635600480360381019061063091906133cb565b61151a565b005b61063f611700565b60405161064c9190613749565b60405180910390f35b61066f600480360381019061066a919061338f565b611718565b60405161067c919061396a565b60405180910390f35b61069f600480360381019061069a9190613366565b61179f565b005b6106bb60048036038101906106b69190613366565b611a3a565b005b6106d760048036038101906106d29190613366565b611be6565b005b60006106e3611fb4565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107699061394a565b60405180910390fd5b600061077f836006611fbc565b50505090506107d681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461206f90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061082e8160065461206f90919063ffffffff16565b6006819055506108498360075461208590919063ffffffff16565b600781905550505050565b60606008805461086390613b59565b80601f016020809104026020016040519081016040528092919081815260200182805461088f90613b59565b80156108dc5780601f106108b1576101008083540402835291602001916108dc565b820191906000526020600020905b8154815290600101906020018083116108bf57829003601f168201915b5050505050905090565b60006108fa6108f3611fb4565b848461209b565b6001905092915050565b7315874d65e649880c2614e7a480cb7c9a55787ff681565b73dba68f07d1b7ca219f78ae8582c213d975c25caf81565b73064b88728d40fa662a36a7f23ab398f634a9e1fb81565b6000600754905090565b600061097b600b546d629b8c891b267182b6140000000061206f90919063ffffffff16565b905090565b600060019054906101000a900460ff16806109a6575060008054906101000a900460ff16155b6109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc9061388a565b60405180910390fd5b60008060019054906101000a900460ff161590508015610a35576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000610a3f611fb4565b905080600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508015610aff5760008060016101000a81548160ff0219169083151502179055505b50565b6000610b0f848484612266565b610bd084610b1b611fb4565b610bcb8560405180606001604052806028815260200161405460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b81611fb4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e2b9092919063ffffffff16565b61209b565b600190509392505050565b6000600654821115610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c19906137ea565b60405180910390fd5b6000610c2c612e80565b9050610c418184612eab90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b73331626d097cc466f6544257c2dc18f60f638241481565b6000610d21610c85611fb4565b84610d1c8560036000610c96611fb4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b61209b565b6001905092915050565b60006d629b8c891b267182b61400000000831115610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d759061386a565b60405180910390fd5b81610d9e576000610d90846006611fbc565b505050905080915050610db5565b6000610dab846006611fbc565b5050915050809150505b92915050565b7321dd5c13925407e5bcec3f27ab11a355a9dafbe381565b7380df68fa5275d0e1ee83aa4160f0b82033597f5181565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e8657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610ed1565b610ece600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bdb565b90505b919050565b610ede611fb4565b73ffffffffffffffffffffffffffffffffffffffff16610efc6112ce565b73ffffffffffffffffffffffffffffffffffffffff1614610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f49906138aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b735ef6cb30bdeb7417eff861e68bb405dc4a0b46c681565b600060019054906101000a900460ff1680611050575060008054906101000a900460ff16155b61108f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110869061388a565b60405180910390fd5b60008060019054906101000a900460ff1615905080156110df576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6110e7610980565b6d629b8c891b267182b614000000006000196111039190613bd4565b6000196111109190613a9d565b6006819055506040518060400160405280600b81526020017f457468657265756d4d61780000000000000000000000000000000000000000008152506008908051906020019061116192919061325a565b506040518060400160405280600481526020017f654d617800000000000000000000000000000000000000000000000000000000815250600990805190602001906111ad92919061325a565b506012600a60006101000a81548160ff021916908360ff160217905550600654600160006111d9611fb4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061121f611fb4565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6d629b8c891b267182b6140000000060405161128a919061396a565b60405180910390a380156112b35760008060016101000a81548160ff0219169083151502179055505b50565b7387ba6c0b3e06d4b9ae4e5c5752d8e94aee13547081565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73d81d665edeee5762fcbc4802520910ed509da22a81565b60606009805461131e90613b59565b80601f016020809104026020016040519081016040528092919081815260200182805461134a90613b59565b80156113975780601f1061136c57610100808354040283529160200191611397565b820191906000526020600020905b81548152906001019060200180831161137a57829003601f168201915b5050505050905090565b600c6020528060005260406000206000915054906101000a900460ff1681565b60006114846113ce611fb4565b8461147f8560405180606001604052806025815260200161407c60259139600360006113f8611fb4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e2b9092919063ffffffff16565b61209b565b6001905092915050565b60006114a261149b611fb4565b8484612266565b6001905092915050565b73b6ca52c7916ad7960c12dc489fd93e5af7ca257f81565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611522611fb4565b73ffffffffffffffffffffffffffffffffffffffff166115406112ce565b73ffffffffffffffffffffffffffffffffffffffff1614611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d906138aa565b60405180910390fd5b600083905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115d69190613749565b60206040518083038186803b1580156115ee57600080fd5b505afa158015611602573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162691906134a8565b90508083111561166b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611662906138ea565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b81526004016116a6929190613764565b602060405180830381600087803b1580156116c057600080fd5b505af11580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f89190613456565b505050505050565b735ea06a2be857d35d5e545b2bf54b2d387bb8b4ba81565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117a7611fb4565b73ffffffffffffffffffffffffffffffffffffffff166117c56112ce565b73ffffffffffffffffffffffffffffffffffffffff161461181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906138aa565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f9061384a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561197c57611938600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bdb565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a42611fb4565b73ffffffffffffffffffffffffffffffffffffffff16611a606112ce565b73ffffffffffffffffffffffffffffffffffffffff1614611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad906138aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d9061380a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bee611fb4565b73ffffffffffffffffffffffffffffffffffffffff16611c0c6112ce565b73ffffffffffffffffffffffffffffffffffffffff1614611c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c59906138aa565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce59061384a565b60405180910390fd5b60005b600580549050811015611fb0578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611d4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f9d5760056001600580549050611daa9190613a9d565b81548110611de1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611e46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611f63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611fb0565b8080611fa890613b8b565b915050611cf1565b5050565b600033905090565b6000806000806000611fcc612e80565b90506000611ff66064611fe8898b612ec190919063ffffffff16565b612eab90919063ffffffff16565b9050600061200d828a61206f90919063ffffffff16565b90506000612024848b612ec190919063ffffffff16565b9050600061203b8585612ec190919063ffffffff16565b90506000612052828461206f90919063ffffffff16565b905082818588995099509950995050505050505092959194509250565b6000818361207d9190613a9d565b905092915050565b6000818361209391906139bc565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561210b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121029061392a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561217b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121729061382a565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612259919061396a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd9061390a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233d906137ca565b60405180910390fd5b60008111612389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612380906138ca565b60405180910390fd5b60006009905073d81d665edeee5762fcbc4802520910ed509da22a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061241c575073d81d665edeee5762fcbc4802520910ed509da22a73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612466575073331626d097cc466f6544257c2dc18f60f638241473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806124b0575073331626d097cc466f6544257c2dc18f60f638241473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806124fa57507387ba6c0b3e06d4b9ae4e5c5752d8e94aee13547073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061254457507387ba6c0b3e06d4b9ae4e5c5752d8e94aee13547073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061258e5750735ea06a2be857d35d5e545b2bf54b2d387bb8b4ba73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806125d85750735ea06a2be857d35d5e545b2bf54b2d387bb8b4ba73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061262257507380df68fa5275d0e1ee83aa4160f0b82033597f5173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061266c57507380df68fa5275d0e1ee83aa4160f0b82033597f5173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806126b657507315874d65e649880c2614e7a480cb7c9a55787ff673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061270057507315874d65e649880c2614e7a480cb7c9a55787ff673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061274a575073b6ca52c7916ad7960c12dc489fd93e5af7ca257f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612794575073dba68f07d1b7ca219f78ae8582c213d975c25caf73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806127de575073dba68f07d1b7ca219f78ae8582c213d975c25caf73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061282857507321dd5c13925407e5bcec3f27ab11a355a9dafbe373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061287257507321dd5c13925407e5bcec3f27ab11a355a9dafbe373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806128bc575073064b88728d40fa662a36a7f23ab398f634a9e1fb73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612906575073064b88728d40fa662a36a7f23ab398f634a9e1fb73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806129505750735ef6cb30bdeb7417eff861e68bb405dc4a0b46c673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061299a5750735ef6cb30bdeb7417eff861e68bb405dc4a0b46c673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156129a457600090505b60008190506000806000806129b98786611fbc565b935093509350935060006129e960646129db898b612ec190919063ffffffff16565b612eab90919063ffffffff16565b90506000612a008383612ec190919063ffffffff16565b9050612a688160016000735ea06a2be857d35d5e545b2bf54b2d387bb8b4ba73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b60016000735ea06a2be857d35d5e545b2bf54b2d387bb8b4ba73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b1186600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461206f90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ba685600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cd157612c8d89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461206f90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612db957612d7584600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612e16919061396a565b60405180910390a35050505050505050505050565b6000838311158290612e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6a91906137a8565b60405180910390fd5b5082840390509392505050565b6000806000612e8d612ed7565b91509150612ea48183612eab90919063ffffffff16565b9250505090565b60008183612eb99190613a12565b905092915050565b60008183612ecf9190613a43565b905092915050565b6000806000600654905060006d629b8c891b267182b6140000000090506000600580549050905060005b8181101561320357836001600060058481548110612f48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061305c5750826002600060058481548110612ff4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613080576006546d629b8c891b267182b614000000009550955050505050613256565b61313660016000600584815481106130c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548561206f90919063ffffffff16565b93506131ee6002600060058481548110613179577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461206f90919063ffffffff16565b925080806131fb90613b8b565b915050612f01565b506132276d629b8c891b267182b61400000000600654612eab90919063ffffffff16565b83101561324c576006546d629b8c891b267182b6140000000094509450505050613256565b8282945094505050505b9091565b82805461326690613b59565b90600052602060002090601f01602090048101928261328857600085556132cf565b82601f106132a157805160ff19168380011785556132cf565b828001600101855582156132cf579182015b828111156132ce5782518255916020019190600101906132b3565b5b5090506132dc91906132e0565b5090565b5b808211156132f95760008160009055506001016132e1565b5090565b60008135905061330c8161400e565b92915050565b60008135905061332181614025565b92915050565b60008151905061333681614025565b92915050565b60008135905061334b8161403c565b92915050565b6000815190506133608161403c565b92915050565b60006020828403121561337857600080fd5b6000613386848285016132fd565b91505092915050565b600080604083850312156133a257600080fd5b60006133b0858286016132fd565b92505060206133c1858286016132fd565b9150509250929050565b6000806000606084860312156133e057600080fd5b60006133ee868287016132fd565b93505060206133ff868287016132fd565b92505060406134108682870161333c565b9150509250925092565b6000806040838503121561342d57600080fd5b600061343b858286016132fd565b925050602061344c8582860161333c565b9150509250929050565b60006020828403121561346857600080fd5b600061347684828501613327565b91505092915050565b60006020828403121561349157600080fd5b600061349f8482850161333c565b91505092915050565b6000602082840312156134ba57600080fd5b60006134c884828501613351565b91505092915050565b600080604083850312156134e457600080fd5b60006134f28582860161333c565b925050602061350385828601613312565b9150509250929050565b61351681613ad1565b82525050565b61352581613ae3565b82525050565b6000613536826139a0565b61354081856139ab565b9350613550818560208601613b26565b61355981613c92565b840191505092915050565b60006135716023836139ab565b915061357c82613ca3565b604082019050919050565b6000613594602a836139ab565b915061359f82613cf2565b604082019050919050565b60006135b76026836139ab565b91506135c282613d41565b604082019050919050565b60006135da6022836139ab565b91506135e582613d90565b604082019050919050565b60006135fd601b836139ab565b915061360882613ddf565b602082019050919050565b6000613620601f836139ab565b915061362b82613e08565b602082019050919050565b6000613643602e836139ab565b915061364e82613e31565b604082019050919050565b60006136666020836139ab565b915061367182613e80565b602082019050919050565b60006136896029836139ab565b915061369482613ea9565b604082019050919050565b60006136ac6012836139ab565b91506136b782613ef8565b602082019050919050565b60006136cf6025836139ab565b91506136da82613f21565b604082019050919050565b60006136f26024836139ab565b91506136fd82613f70565b604082019050919050565b6000613715602c836139ab565b915061372082613fbf565b604082019050919050565b61373481613b0f565b82525050565b61374381613b19565b82525050565b600060208201905061375e600083018461350d565b92915050565b6000604082019050613779600083018561350d565b613786602083018461372b565b9392505050565b60006020820190506137a2600083018461351c565b92915050565b600060208201905081810360008301526137c2818461352b565b905092915050565b600060208201905081810360008301526137e381613564565b9050919050565b6000602082019050818103600083015261380381613587565b9050919050565b60006020820190508181036000830152613823816135aa565b9050919050565b60006020820190508181036000830152613843816135cd565b9050919050565b60006020820190508181036000830152613863816135f0565b9050919050565b6000602082019050818103600083015261388381613613565b9050919050565b600060208201905081810360008301526138a381613636565b9050919050565b600060208201905081810360008301526138c381613659565b9050919050565b600060208201905081810360008301526138e38161367c565b9050919050565b600060208201905081810360008301526139038161369f565b9050919050565b60006020820190508181036000830152613923816136c2565b9050919050565b60006020820190508181036000830152613943816136e5565b9050919050565b6000602082019050818103600083015261396381613708565b9050919050565b600060208201905061397f600083018461372b565b92915050565b600060208201905061399a600083018461373a565b92915050565b600081519050919050565b600082825260208201905092915050565b60006139c782613b0f565b91506139d283613b0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a0757613a06613c05565b5b828201905092915050565b6000613a1d82613b0f565b9150613a2883613b0f565b925082613a3857613a37613c34565b5b828204905092915050565b6000613a4e82613b0f565b9150613a5983613b0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a9257613a91613c05565b5b828202905092915050565b6000613aa882613b0f565b9150613ab383613b0f565b925082821015613ac657613ac5613c05565b5b828203905092915050565b6000613adc82613aef565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613b44578082015181840152602081019050613b29565b83811115613b53576000848401525b50505050565b60006002820490506001821680613b7157607f821691505b60208210811415613b8557613b84613c63565b5b50919050565b6000613b9682613b0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc957613bc8613c05565b5b600182019050919050565b6000613bdf82613b0f565b9150613bea83613b0f565b925082613bfa57613bf9613c34565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f42616c616e636520697320746f6f206c6f770000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61401781613ad1565b811461402257600080fd5b50565b61402e81613ae3565b811461403957600080fd5b50565b61404581613b0f565b811461405057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a7f89686cd5d5d551bf2ce354a2492721f166c5765d782df1628152e25c550d964736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061021c5760003560e01c8063715018a611610125578063a9059cbb116100ad578063dab506ba1161007c578063dab506ba14610637578063dd62ed3e14610655578063f2cc0c1814610685578063f2fde38b146106a1578063f84354f1146106bd5761021c565b8063a9059cbb1461059d578063cb90f376146105cd578063cba0e996146105eb578063d9caed121461061b5761021c565b80638da5cb5b116100f45780638da5cb5b146104e357806395b12b2c1461050157806395d89b411461051f5780639b19251a1461053d578063a457c2d71461056d5761021c565b8063715018a614610493578063793f214a1461049d5780638129fc1c146104bb5780638a389689146104c55761021c565b806323b872dd116101a8578063395093511161017757806339509351146103c75780634549b039146103f7578063456ee43c146104275780635e18d9721461044557806370a08231146104635761021c565b806323b872dd1461032b5780632d8381191461035b578063313ce5671461038b5780633513eada146103a95761021c565b80630bfab51e116101ef5780630bfab51e146102a9578063115624be146102c757806313114a9d146102e557806318160ddd146103035780631b4e8cc2146103215761021c565b8063053ab1821461022157806306fdde031461023d578063095ea7b31461025b57806309749fa71461028b575b600080fd5b61023b6004803603810190610236919061347f565b6106d9565b005b610245610854565b60405161025291906137a8565b60405180910390f35b6102756004803603810190610270919061341a565b6108e6565b604051610282919061378d565b60405180910390f35b610293610904565b6040516102a09190613749565b60405180910390f35b6102b161091c565b6040516102be9190613749565b60405180910390f35b6102cf610934565b6040516102dc9190613749565b60405180910390f35b6102ed61094c565b6040516102fa919061396a565b60405180910390f35b61030b610956565b604051610318919061396a565b60405180910390f35b610329610980565b005b610345600480360381019061034091906133cb565b610b02565b604051610352919061378d565b60405180910390f35b6103756004803603810190610370919061347f565b610bdb565b604051610382919061396a565b60405180910390f35b610393610c49565b6040516103a09190613985565b60405180910390f35b6103b1610c60565b6040516103be9190613749565b60405180910390f35b6103e160048036038101906103dc919061341a565b610c78565b6040516103ee919061378d565b60405180910390f35b610411600480360381019061040c91906134d1565b610d2b565b60405161041e919061396a565b60405180910390f35b61042f610dbb565b60405161043c9190613749565b60405180910390f35b61044d610dd3565b60405161045a9190613749565b60405180910390f35b61047d60048036038101906104789190613366565b610deb565b60405161048a919061396a565b60405180910390f35b61049b610ed6565b005b6104a5611012565b6040516104b29190613749565b60405180910390f35b6104c361102a565b005b6104cd6112b6565b6040516104da9190613749565b60405180910390f35b6104eb6112ce565b6040516104f89190613749565b60405180910390f35b6105096112f7565b6040516105169190613749565b60405180910390f35b61052761130f565b60405161053491906137a8565b60405180910390f35b61055760048036038101906105529190613366565b6113a1565b604051610564919061378d565b60405180910390f35b6105876004803603810190610582919061341a565b6113c1565b604051610594919061378d565b60405180910390f35b6105b760048036038101906105b2919061341a565b61148e565b6040516105c4919061378d565b60405180910390f35b6105d56114ac565b6040516105e29190613749565b60405180910390f35b61060560048036038101906106009190613366565b6114c4565b604051610612919061378d565b60405180910390f35b610635600480360381019061063091906133cb565b61151a565b005b61063f611700565b60405161064c9190613749565b60405180910390f35b61066f600480360381019061066a919061338f565b611718565b60405161067c919061396a565b60405180910390f35b61069f600480360381019061069a9190613366565b61179f565b005b6106bb60048036038101906106b69190613366565b611a3a565b005b6106d760048036038101906106d29190613366565b611be6565b005b60006106e3611fb4565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107699061394a565b60405180910390fd5b600061077f836006611fbc565b50505090506107d681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461206f90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061082e8160065461206f90919063ffffffff16565b6006819055506108498360075461208590919063ffffffff16565b600781905550505050565b60606008805461086390613b59565b80601f016020809104026020016040519081016040528092919081815260200182805461088f90613b59565b80156108dc5780601f106108b1576101008083540402835291602001916108dc565b820191906000526020600020905b8154815290600101906020018083116108bf57829003601f168201915b5050505050905090565b60006108fa6108f3611fb4565b848461209b565b6001905092915050565b7315874d65e649880c2614e7a480cb7c9a55787ff681565b73dba68f07d1b7ca219f78ae8582c213d975c25caf81565b73064b88728d40fa662a36a7f23ab398f634a9e1fb81565b6000600754905090565b600061097b600b546d629b8c891b267182b6140000000061206f90919063ffffffff16565b905090565b600060019054906101000a900460ff16806109a6575060008054906101000a900460ff16155b6109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc9061388a565b60405180910390fd5b60008060019054906101000a900460ff161590508015610a35576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000610a3f611fb4565b905080600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508015610aff5760008060016101000a81548160ff0219169083151502179055505b50565b6000610b0f848484612266565b610bd084610b1b611fb4565b610bcb8560405180606001604052806028815260200161405460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b81611fb4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e2b9092919063ffffffff16565b61209b565b600190509392505050565b6000600654821115610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c19906137ea565b60405180910390fd5b6000610c2c612e80565b9050610c418184612eab90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b73331626d097cc466f6544257c2dc18f60f638241481565b6000610d21610c85611fb4565b84610d1c8560036000610c96611fb4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b61209b565b6001905092915050565b60006d629b8c891b267182b61400000000831115610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d759061386a565b60405180910390fd5b81610d9e576000610d90846006611fbc565b505050905080915050610db5565b6000610dab846006611fbc565b5050915050809150505b92915050565b7321dd5c13925407e5bcec3f27ab11a355a9dafbe381565b7380df68fa5275d0e1ee83aa4160f0b82033597f5181565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e8657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610ed1565b610ece600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bdb565b90505b919050565b610ede611fb4565b73ffffffffffffffffffffffffffffffffffffffff16610efc6112ce565b73ffffffffffffffffffffffffffffffffffffffff1614610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f49906138aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b735ef6cb30bdeb7417eff861e68bb405dc4a0b46c681565b600060019054906101000a900460ff1680611050575060008054906101000a900460ff16155b61108f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110869061388a565b60405180910390fd5b60008060019054906101000a900460ff1615905080156110df576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6110e7610980565b6d629b8c891b267182b614000000006000196111039190613bd4565b6000196111109190613a9d565b6006819055506040518060400160405280600b81526020017f457468657265756d4d61780000000000000000000000000000000000000000008152506008908051906020019061116192919061325a565b506040518060400160405280600481526020017f654d617800000000000000000000000000000000000000000000000000000000815250600990805190602001906111ad92919061325a565b506012600a60006101000a81548160ff021916908360ff160217905550600654600160006111d9611fb4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061121f611fb4565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6d629b8c891b267182b6140000000060405161128a919061396a565b60405180910390a380156112b35760008060016101000a81548160ff0219169083151502179055505b50565b7387ba6c0b3e06d4b9ae4e5c5752d8e94aee13547081565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73d81d665edeee5762fcbc4802520910ed509da22a81565b60606009805461131e90613b59565b80601f016020809104026020016040519081016040528092919081815260200182805461134a90613b59565b80156113975780601f1061136c57610100808354040283529160200191611397565b820191906000526020600020905b81548152906001019060200180831161137a57829003601f168201915b5050505050905090565b600c6020528060005260406000206000915054906101000a900460ff1681565b60006114846113ce611fb4565b8461147f8560405180606001604052806025815260200161407c60259139600360006113f8611fb4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e2b9092919063ffffffff16565b61209b565b6001905092915050565b60006114a261149b611fb4565b8484612266565b6001905092915050565b73b6ca52c7916ad7960c12dc489fd93e5af7ca257f81565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611522611fb4565b73ffffffffffffffffffffffffffffffffffffffff166115406112ce565b73ffffffffffffffffffffffffffffffffffffffff1614611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d906138aa565b60405180910390fd5b600083905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115d69190613749565b60206040518083038186803b1580156115ee57600080fd5b505afa158015611602573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162691906134a8565b90508083111561166b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611662906138ea565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b81526004016116a6929190613764565b602060405180830381600087803b1580156116c057600080fd5b505af11580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f89190613456565b505050505050565b735ea06a2be857d35d5e545b2bf54b2d387bb8b4ba81565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117a7611fb4565b73ffffffffffffffffffffffffffffffffffffffff166117c56112ce565b73ffffffffffffffffffffffffffffffffffffffff161461181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906138aa565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f9061384a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561197c57611938600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bdb565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a42611fb4565b73ffffffffffffffffffffffffffffffffffffffff16611a606112ce565b73ffffffffffffffffffffffffffffffffffffffff1614611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad906138aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d9061380a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bee611fb4565b73ffffffffffffffffffffffffffffffffffffffff16611c0c6112ce565b73ffffffffffffffffffffffffffffffffffffffff1614611c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c59906138aa565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce59061384a565b60405180910390fd5b60005b600580549050811015611fb0578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611d4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f9d5760056001600580549050611daa9190613a9d565b81548110611de1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611e46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611f63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611fb0565b8080611fa890613b8b565b915050611cf1565b5050565b600033905090565b6000806000806000611fcc612e80565b90506000611ff66064611fe8898b612ec190919063ffffffff16565b612eab90919063ffffffff16565b9050600061200d828a61206f90919063ffffffff16565b90506000612024848b612ec190919063ffffffff16565b9050600061203b8585612ec190919063ffffffff16565b90506000612052828461206f90919063ffffffff16565b905082818588995099509950995050505050505092959194509250565b6000818361207d9190613a9d565b905092915050565b6000818361209391906139bc565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561210b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121029061392a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561217b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121729061382a565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612259919061396a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd9061390a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233d906137ca565b60405180910390fd5b60008111612389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612380906138ca565b60405180910390fd5b60006009905073d81d665edeee5762fcbc4802520910ed509da22a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061241c575073d81d665edeee5762fcbc4802520910ed509da22a73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612466575073331626d097cc466f6544257c2dc18f60f638241473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806124b0575073331626d097cc466f6544257c2dc18f60f638241473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806124fa57507387ba6c0b3e06d4b9ae4e5c5752d8e94aee13547073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061254457507387ba6c0b3e06d4b9ae4e5c5752d8e94aee13547073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061258e5750735ea06a2be857d35d5e545b2bf54b2d387bb8b4ba73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806125d85750735ea06a2be857d35d5e545b2bf54b2d387bb8b4ba73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061262257507380df68fa5275d0e1ee83aa4160f0b82033597f5173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061266c57507380df68fa5275d0e1ee83aa4160f0b82033597f5173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806126b657507315874d65e649880c2614e7a480cb7c9a55787ff673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061270057507315874d65e649880c2614e7a480cb7c9a55787ff673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061274a575073b6ca52c7916ad7960c12dc489fd93e5af7ca257f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612794575073dba68f07d1b7ca219f78ae8582c213d975c25caf73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806127de575073dba68f07d1b7ca219f78ae8582c213d975c25caf73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061282857507321dd5c13925407e5bcec3f27ab11a355a9dafbe373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061287257507321dd5c13925407e5bcec3f27ab11a355a9dafbe373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806128bc575073064b88728d40fa662a36a7f23ab398f634a9e1fb73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612906575073064b88728d40fa662a36a7f23ab398f634a9e1fb73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806129505750735ef6cb30bdeb7417eff861e68bb405dc4a0b46c673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061299a5750735ef6cb30bdeb7417eff861e68bb405dc4a0b46c673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156129a457600090505b60008190506000806000806129b98786611fbc565b935093509350935060006129e960646129db898b612ec190919063ffffffff16565b612eab90919063ffffffff16565b90506000612a008383612ec190919063ffffffff16565b9050612a688160016000735ea06a2be857d35d5e545b2bf54b2d387bb8b4ba73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b60016000735ea06a2be857d35d5e545b2bf54b2d387bb8b4ba73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b1186600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461206f90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ba685600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cd157612c8d89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461206f90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612db957612d7584600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612e16919061396a565b60405180910390a35050505050505050505050565b6000838311158290612e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6a91906137a8565b60405180910390fd5b5082840390509392505050565b6000806000612e8d612ed7565b91509150612ea48183612eab90919063ffffffff16565b9250505090565b60008183612eb99190613a12565b905092915050565b60008183612ecf9190613a43565b905092915050565b6000806000600654905060006d629b8c891b267182b6140000000090506000600580549050905060005b8181101561320357836001600060058481548110612f48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061305c5750826002600060058481548110612ff4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613080576006546d629b8c891b267182b614000000009550955050505050613256565b61313660016000600584815481106130c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548561206f90919063ffffffff16565b93506131ee6002600060058481548110613179577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461206f90919063ffffffff16565b925080806131fb90613b8b565b915050612f01565b506132276d629b8c891b267182b61400000000600654612eab90919063ffffffff16565b83101561324c576006546d629b8c891b267182b6140000000094509450505050613256565b8282945094505050505b9091565b82805461326690613b59565b90600052602060002090601f01602090048101928261328857600085556132cf565b82601f106132a157805160ff19168380011785556132cf565b828001600101855582156132cf579182015b828111156132ce5782518255916020019190600101906132b3565b5b5090506132dc91906132e0565b5090565b5b808211156132f95760008160009055506001016132e1565b5090565b60008135905061330c8161400e565b92915050565b60008135905061332181614025565b92915050565b60008151905061333681614025565b92915050565b60008135905061334b8161403c565b92915050565b6000815190506133608161403c565b92915050565b60006020828403121561337857600080fd5b6000613386848285016132fd565b91505092915050565b600080604083850312156133a257600080fd5b60006133b0858286016132fd565b92505060206133c1858286016132fd565b9150509250929050565b6000806000606084860312156133e057600080fd5b60006133ee868287016132fd565b93505060206133ff868287016132fd565b92505060406134108682870161333c565b9150509250925092565b6000806040838503121561342d57600080fd5b600061343b858286016132fd565b925050602061344c8582860161333c565b9150509250929050565b60006020828403121561346857600080fd5b600061347684828501613327565b91505092915050565b60006020828403121561349157600080fd5b600061349f8482850161333c565b91505092915050565b6000602082840312156134ba57600080fd5b60006134c884828501613351565b91505092915050565b600080604083850312156134e457600080fd5b60006134f28582860161333c565b925050602061350385828601613312565b9150509250929050565b61351681613ad1565b82525050565b61352581613ae3565b82525050565b6000613536826139a0565b61354081856139ab565b9350613550818560208601613b26565b61355981613c92565b840191505092915050565b60006135716023836139ab565b915061357c82613ca3565b604082019050919050565b6000613594602a836139ab565b915061359f82613cf2565b604082019050919050565b60006135b76026836139ab565b91506135c282613d41565b604082019050919050565b60006135da6022836139ab565b91506135e582613d90565b604082019050919050565b60006135fd601b836139ab565b915061360882613ddf565b602082019050919050565b6000613620601f836139ab565b915061362b82613e08565b602082019050919050565b6000613643602e836139ab565b915061364e82613e31565b604082019050919050565b60006136666020836139ab565b915061367182613e80565b602082019050919050565b60006136896029836139ab565b915061369482613ea9565b604082019050919050565b60006136ac6012836139ab565b91506136b782613ef8565b602082019050919050565b60006136cf6025836139ab565b91506136da82613f21565b604082019050919050565b60006136f26024836139ab565b91506136fd82613f70565b604082019050919050565b6000613715602c836139ab565b915061372082613fbf565b604082019050919050565b61373481613b0f565b82525050565b61374381613b19565b82525050565b600060208201905061375e600083018461350d565b92915050565b6000604082019050613779600083018561350d565b613786602083018461372b565b9392505050565b60006020820190506137a2600083018461351c565b92915050565b600060208201905081810360008301526137c2818461352b565b905092915050565b600060208201905081810360008301526137e381613564565b9050919050565b6000602082019050818103600083015261380381613587565b9050919050565b60006020820190508181036000830152613823816135aa565b9050919050565b60006020820190508181036000830152613843816135cd565b9050919050565b60006020820190508181036000830152613863816135f0565b9050919050565b6000602082019050818103600083015261388381613613565b9050919050565b600060208201905081810360008301526138a381613636565b9050919050565b600060208201905081810360008301526138c381613659565b9050919050565b600060208201905081810360008301526138e38161367c565b9050919050565b600060208201905081810360008301526139038161369f565b9050919050565b60006020820190508181036000830152613923816136c2565b9050919050565b60006020820190508181036000830152613943816136e5565b9050919050565b6000602082019050818103600083015261396381613708565b9050919050565b600060208201905061397f600083018461372b565b92915050565b600060208201905061399a600083018461373a565b92915050565b600081519050919050565b600082825260208201905092915050565b60006139c782613b0f565b91506139d283613b0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a0757613a06613c05565b5b828201905092915050565b6000613a1d82613b0f565b9150613a2883613b0f565b925082613a3857613a37613c34565b5b828204905092915050565b6000613a4e82613b0f565b9150613a5983613b0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a9257613a91613c05565b5b828202905092915050565b6000613aa882613b0f565b9150613ab383613b0f565b925082821015613ac657613ac5613c05565b5b828203905092915050565b6000613adc82613aef565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613b44578082015181840152602081019050613b29565b83811115613b53576000848401525b50505050565b60006002820490506001821680613b7157607f821691505b60208210811415613b8557613b84613c63565b5b50919050565b6000613b9682613b0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc957613bc8613c05565b5b600182019050919050565b6000613bdf82613b0f565b9150613bea83613b0f565b925082613bfa57613bf9613c34565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f42616c616e636520697320746f6f206c6f770000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61401781613ad1565b811461402257600080fd5b50565b61402e81613ae3565b811461403957600080fd5b50565b61404581613b0f565b811461405057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a7f89686cd5d5d551bf2ce354a2492721f166c5765d782df1628152e25c550d964736f6c63430008040033
Deployed Bytecode Sourcemap
37808:33:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29020:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26242:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27246:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25331:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25424;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25704:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28830;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26519:114;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22295:185;;;:::i;:::-;;27447:446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29931:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26428:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24857:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27901:300;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29446:477;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25517:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25149:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26641:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23212:148;;;:::i;:::-;;25798:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25926:308;;;:::i;:::-;;24956:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22561:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24764:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26333:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25246:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28209:400;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26847:199;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25610:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28617:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37334:400;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25052:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27054:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35631:331;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23515:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35970:476;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29020:418;29072:14;29089:12;:10;:12::i;:::-;29072:29;;29135:11;:19;29147:6;29135:19;;;;;;;;;;;;;;;;;;;;;;;;;29134:20;29112:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;29238:15;29263:22;29274:7;29283:1;29263:10;:22::i;:::-;29237:48;;;;;29314:28;29334:7;29314;:15;29322:6;29314:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29296:7;:15;29304:6;29296:15;;;;;;;;;;;;;;;:46;;;;29363:20;29375:7;29363;;:11;;:20;;;;:::i;:::-;29353:7;:30;;;;29407:23;29422:7;29407:10;;:14;;:23;;;;:::i;:::-;29394:10;:36;;;;29020:418;;;:::o;26242:83::-;26279:13;26312:5;26305:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26242:83;:::o;27246:193::-;27348:4;27370:39;27379:12;:10;:12::i;:::-;27393:7;27402:6;27370:8;:39::i;:::-;27427:4;27420:11;;27246:193;;;;:::o;25331:86::-;25375:42;25331:86;:::o;25424:::-;25468:42;25424:86;:::o;25704:87::-;25749:42;25704:87;:::o;28830:::-;28872:7;28899:10;;28892:17;;28830:87;:::o;26519:114::-;26572:7;26599:26;26611:13;;24310:27;26599:11;;:26;;;;:::i;:::-;26592:33;;26519:114;:::o;22295:185::-;2113:13;;;;;;;;;;;:30;;;;2131:12;;;;;;;;;;2130:13;2113:30;2105:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;2207:19;2230:13;;;;;;;;;;;2229:14;2207:36;;2258:14;2254:101;;;2305:4;2289:13;;:20;;;;;;;;;;;;;;;;;;2339:4;2324:12;;:19;;;;;;;;;;;;;;;;;;2254:101;22352:17:::1;22372:12;:10;:12::i;:::-;22352:32;;22404:9;22395:6;;:18;;;;;;;;;;;;;;;;;;22462:9;22429:43;;22458:1;22429:43;;;;;;;;;;;;2367:1;2385:14:::0;2381:68;;;2432:5;2416:13;;:21;;;;;;;;;;;;;;;;;;2381:68;22295:185;:::o;27447:446::-;27579:4;27596:36;27606:6;27614:9;27625:6;27596:9;:36::i;:::-;27643:220;27666:6;27687:12;:10;:12::i;:::-;27714:138;27770:6;27714:138;;;;;;;;;;;;;;;;;:11;:19;27726:6;27714:19;;;;;;;;;;;;;;;:33;27734:12;:10;:12::i;:::-;27714:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;27643:8;:220::i;:::-;27881:4;27874:11;;27447:446;;;;;:::o;29931:322::-;30025:7;30083;;30072;:18;;30050:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30171:19;30193:10;:8;:10::i;:::-;30171:32;;30221:24;30233:11;30221:7;:11;;:24;;;;:::i;:::-;30214:31;;;29931:322;;;:::o;26428:83::-;26469:5;26494:9;;;;;;;;;;;26487:16;;26428:83;:::o;24857:92::-;24907:42;24857:92;:::o;27901:300::-;28016:4;28038:133;28061:12;:10;:12::i;:::-;28088:7;28110:50;28149:10;28110:11;:25;28122:12;:10;:12::i;:::-;28110:25;;;;;;;;;;;;;;;:34;28136:7;28110:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;28038:8;:133::i;:::-;28189:4;28182:11;;27901:300;;;;:::o;29446:477::-;29564:7;24310:27;29597:7;:18;;29589:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29667:17;29662:254;;29702:15;29727:22;29738:7;29747:1;29727:10;:22::i;:::-;29701:48;;;;;29771:7;29764:14;;;;;29662:254;29814:23;29845:22;29856:7;29865:1;29845:10;:22::i;:::-;29811:56;;;;;29889:15;29882:22;;;29446:477;;;;;:::o;25517:86::-;25561:42;25517:86;:::o;25149:88::-;25195:42;25149:88;:::o;26641:198::-;26707:7;26731:11;:20;26743:7;26731:20;;;;;;;;;;;;;;;;;;;;;;;;;26727:49;;;26760:7;:16;26768:7;26760:16;;;;;;;;;;;;;;;;26753:23;;;;26727:49;26794:37;26814:7;:16;26822:7;26814:16;;;;;;;;;;;;;;;;26794:19;:37::i;:::-;26787:44;;26641:198;;;;:::o;23212:148::-;22792:12;:10;:12::i;:::-;22781:23;;:7;:5;:7::i;:::-;:23;;;22773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23319:1:::1;23282:40;;23303:6;;;;;;;;;;;23282:40;;;;;;;;;;;;23350:1;23333:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;23212:148::o:0;25798:87::-;25843:42;25798:87;:::o;25926:308::-;2113:13;;;;;;;;;;;:30;;;;2131:12;;;;;;;;;;2130:13;2113:30;2105:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;2207:19;2230:13;;;;;;;;;;;2229:14;2207:36;;2258:14;2254:101;;;2305:4;2289:13;;:20;;;;;;;;;;;;;;;;;;2339:4;2324:12;;:19;;;;;;;;;;;;;;;;;;2254:101;25978:17:::1;:15;:17::i;:::-;24310:27;24266:1;24257:11;26024:13;;;;:::i;:::-;24266:1;24257:11;26017:21;;;;:::i;:::-;26006:7;:33;;;;26050:21;;;;;;;;;;;;;;;;::::0;:5:::1;:21;;;;;;;;;;;;:::i;:::-;;26082:16;;;;;;;;;;;;;;;;::::0;:7:::1;:16;;;;;;;;;;;;:::i;:::-;;26121:2;26109:9;;:14;;;;;;;;;;;;;;;;;;26160:7;;26136;:21;26144:12;:10;:12::i;:::-;26136:21;;;;;;;;;;;;;;;:31;;;;26204:12;:10;:12::i;:::-;26183:43;;26200:1;26183:43;;;24310:27;26183:43;;;;;;:::i;:::-;;;;;;;;2385:14:::0;2381:68;;;2432:5;2416:13;;:21;;;;;;;;;;;;;;;;;;2381:68;25926:308;:::o;24956:89::-;25003:42;24956:89;:::o;22561:87::-;22607:7;22634:6;;;;;;;;;;;22627:13;;22561:87;:::o;24764:86::-;24808:42;24764:86;:::o;26333:87::-;26372:13;26405:7;26398:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26333:87;:::o;25246:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;28209:400::-;28329:4;28351:228;28374:12;:10;:12::i;:::-;28401:7;28423:145;28480:15;28423:145;;;;;;;;;;;;;;;;;:11;:25;28435:12;:10;:12::i;:::-;28423:25;;;;;;;;;;;;;;;:34;28449:7;28423:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;28351:8;:228::i;:::-;28597:4;28590:11;;28209:400;;;;:::o;26847:199::-;26952:4;26974:42;26984:12;:10;:12::i;:::-;26998:9;27009:6;26974:9;:42::i;:::-;27034:4;27027:11;;26847:199;;;;:::o;25610:87::-;25655:42;25610:87;:::o;28617:110::-;28675:4;28699:11;:20;28711:7;28699:20;;;;;;;;;;;;;;;;;;;;;;;;;28692:27;;28617:110;;;:::o;37334:400::-;22792:12;:10;:12::i;:::-;22781:23;;:7;:5;:7::i;:::-;:23;;;22773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37466:12:::1;37488;37466:35;;37512:20;37535:5;:15;;;37559:4;37535:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37512:53;;37654:12;37644:6;:22;;37636:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37700:5;:14;;;37715:2;37719:6;37700:26;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22852:1;;37334:400:::0;;;:::o;25052:90::-;25100:42;25052:90;:::o;27054:184::-;27171:7;27203:11;:18;27215:5;27203:18;;;;;;;;;;;;;;;:27;27222:7;27203:27;;;;;;;;;;;;;;;;27196:34;;27054:184;;;;:::o;35631:331::-;22792:12;:10;:12::i;:::-;22781:23;;:7;:5;:7::i;:::-;:23;;;22773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35711:11:::1;:20;35723:7;35711:20;;;;;;;;;;;;;;;;;;;;;;;;;35710:21;35702:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35797:1;35778:7;:16;35786:7;35778:16;;;;;;;;;;;;;;;;:20;35774:109;;;35834:37;35854:7;:16;35862:7;35854:16;;;;;;;;;;;;;;;;35834:19;:37::i;:::-;35815:7;:16;35823:7;35815:16;;;;;;;;;;;;;;;:56;;;;35774:109;35916:4;35893:11;:20;35905:7;35893:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;35931:9;35946:7;35931:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35631:331:::0;:::o;23515:244::-;22792:12;:10;:12::i;:::-;22781:23;;:7;:5;:7::i;:::-;:23;;;22773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23624:1:::1;23604:22;;:8;:22;;;;23596:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23714:8;23685:38;;23706:6;;;;;;;;;;;23685:38;;;;;;;;;;;;23743:8;23734:6;;:17;;;;;;;;;;;;;;;;;;23515:244:::0;:::o;35970:476::-;22792:12;:10;:12::i;:::-;22781:23;;:7;:5;:7::i;:::-;:23;;;22773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36049:11:::1;:20;36061:7;36049:20;;;;;;;;;;;;;;;;;;;;;;;;;36041:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36117:9;36112:327;36136:9;:16;;;;36132:1;:20;36112:327;;;36194:7;36178:23;;:9;36188:1;36178:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;36174:254;;;36237:9;36266:1;36247:9;:16;;;;:20;;;;:::i;:::-;36237:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36222:9;36232:1;36222:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36306:1;36287:7;:16;36295:7;36287:16;;;;;;;;;;;;;;;:20;;;;36349:5;36326:11;:20;36338:7;36326:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;36373:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36407:5;;36174:254;36154:3;;;;;:::i;:::-;;;;36112:327;;;;35970:476:::0;:::o;21216:98::-;21269:7;21296:10;21289:17;;21216:98;:::o;34120:633::-;34248:7;34270;34292;34314;34349:19;34371:10;:8;:10::i;:::-;34349:32;;34394:16;34413:40;34449:3;34413:31;34425:18;34413:7;:11;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;34394:59;;34464:23;34490:21;34502:8;34490:7;:11;;:21;;;;:::i;:::-;34464:47;;34524:15;34542:24;34554:11;34542:7;:11;;:24;;;;:::i;:::-;34524:42;;34577:12;34592:25;34605:11;34592:8;:12;;:25;;;;:::i;:::-;34577:40;;34628:23;34654:17;34666:4;34654:7;:11;;:17;;;;:::i;:::-;34628:43;;34690:7;34699:15;34716;34733:11;34682:63;;;;;;;;;;;;;;34120:633;;;;;;;:::o;13857:98::-;13915:7;13946:1;13942;:5;;;;:::i;:::-;13935:12;;13857:98;;;;:::o;13476:::-;13534:7;13565:1;13561;:5;;;;:::i;:::-;13554:12;;13476:98;;;;:::o;30261:371::-;30405:1;30388:19;;:5;:19;;;;30380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30486:1;30467:21;;:7;:21;;;;30459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30570:6;30540:11;:18;30552:5;30540:18;;;;;;;;;;;;;;;:27;30559:7;30540:27;;;;;;;;;;;;;;;:36;;;;30608:7;30592:32;;30601:5;30592:32;;;30617:6;30592:32;;;;;;:::i;:::-;;;;;;;;30261:371;;;:::o;30640:3317::-;30789:1;30771:20;;:6;:20;;;;30763:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30873:1;30852:23;;:9;:23;;;;30844:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30943:1;30934:6;:10;30926:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31136:13;31152:1;31136:17;;24808:42;31287:18;;:6;:18;;;:56;;;;24808:42;31322:21;;:9;:21;;;31287:56;:97;;;;24907:42;31360:24;;:6;:24;;;31287:97;:141;;;;24907:42;31401:27;;:9;:27;;;31287:141;:179;;;;25003:42;31445:21;;:6;:21;;;31287:179;:220;;;;25003:42;31483:24;;:9;:24;;;31287:220;:259;;;;25100:42;31524:22;;:6;:22;;;31287:259;:301;;;;25100:42;31563:25;;:9;:25;;;31287:301;:338;;;;25195:42;31605:20;;:6;:20;;;31287:338;:378;;;;25195:42;31642:23;;:9;:23;;;31287:378;:413;;;;25375:42;31682:18;;:6;:18;;;31287:413;:451;;;;25375:42;31717:21;;:9;:21;;;31287:451;:487;;;;25655:42;31755:19;;:6;:19;;;31287:487;:628;;;;25468:42;31897:18;;:6;:18;;;31287:628;:666;;;;25468:42;31932:21;;:9;:21;;;31287:666;:701;;;;25561:42;31970:18;;:6;:18;;;31287:701;:739;;;;25561:42;32005:21;;:9;:21;;;31287:739;:775;;;;25749:42;32043:19;;:6;:19;;;31287:775;:814;;;;25749:42;32079:22;;:9;:22;;;31287:814;:850;;;;25843:42;32118:19;;:6;:19;;;31287:850;:889;;;;25843:42;32154:22;;:9;:22;;;31287:889;31269:983;;;32211:1;32203:9;;31269:983;32321:26;32350:5;32321:34;;32381:15;32411:23;32449;32487:19;32520:38;32531:6;32539:18;32520:10;:38::i;:::-;32366:192;;;;;;;;32625:12;32640:26;32662:3;32640:17;32651:5;32640:6;:10;;:17;;;;:::i;:::-;:21;;:26;;;;:::i;:::-;32625:41;;32677:12;32692:21;32701:11;32692:4;:8;;:21;;;;:::i;:::-;32677:36;;32748:31;32774:4;32748:7;:21;25100:42;32748:21;;;;;;;;;;;;;;;;:25;;:31;;;;:::i;:::-;32724:7;:21;25100:42;32724:21;;;;;;;;;;;;;;;:55;;;;32865:28;32885:7;32865;:15;32873:6;32865:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32847:7;:15;32855:6;32847:15;;;;;;;;;;;;;;;:46;;;;32991:39;33014:15;32991:7;:18;32999:9;32991:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32970:7;:18;32978:9;32970:18;;;;;;;;;;;;;;;:60;;;;33074:11;:19;33086:6;33074:19;;;;;;;;;;;;;;;;;;;;;;;;;33070:97;;;33128:27;33148:6;33128:7;:15;33136:6;33128:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;33110:7;:15;33118:6;33110:15;;;;;;;;;;;;;;;:45;;;;33070:97;33181:11;:22;33193:9;33181:22;;;;;;;;;;;;;;;;;;;;;;;;;33177:115;;;33241:39;33264:15;33241:7;:18;33249:9;33241:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33220:7;:18;33228:9;33220:18;;;;;;;;;;;;;;;:60;;;;33177:115;33494:9;33477:44;;33486:6;33477:44;;;33505:15;33477:44;;;;;;:::i;:::-;;;;;;;;30640:3317;;;;;;;;;;;:::o;15755:240::-;15875:7;15933:1;15928;:6;;15936:12;15920:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15975:1;15971;:5;15964:12;;15755:240;;;;;:::o;34761:164::-;34803:7;34824:15;34841;34860:19;:17;:19::i;:::-;34823:56;;;;34897:20;34909:7;34897;:11;;:20;;;;:::i;:::-;34890:27;;;;34761:164;:::o;14613:98::-;14671:7;14702:1;14698;:5;;;;:::i;:::-;14691:12;;14613:98;;;;:::o;14214:::-;14272:7;14303:1;14299;:5;;;;:::i;:::-;14292:12;;14214:98;;;;:::o;34933:655::-;34984:7;34993;35013:15;35031:7;;35013:25;;35049:15;24310:27;35049:25;;35085:22;35110:9;:16;;;;35085:41;;35142:9;35137:336;35161:14;35157:1;:18;35137:336;;;35243:7;35219;:21;35227:9;35237:1;35227:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35219:21;;;;;;;;;;;;;;;;:31;:83;;;;35295:7;35271;:21;35279:9;35289:1;35279:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35271:21;;;;;;;;;;;;;;;;:31;35219:83;35197:146;;;35326:7;;24310:27;35318:25;;;;;;;;;;35197:146;35368:34;35380:7;:21;35388:9;35398:1;35388:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35380:21;;;;;;;;;;;;;;;;35368:7;:11;;:34;;;;:::i;:::-;35358:44;;35427:34;35439:7;:21;35447:9;35457:1;35447:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35439:21;;;;;;;;;;;;;;;;35427:7;:11;;:34;;;;:::i;:::-;35417:44;;35177:3;;;;;:::i;:::-;;;;35137:336;;;;35497:20;24310:27;35497:7;;:11;;:20;;;;:::i;:::-;35487:7;:30;35483:61;;;35527:7;;24310:27;35519:25;;;;;;;;;35483:61;35563:7;35572;35555:25;;;;;;;34933:655;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:137::-;345:5;376:6;370:13;361:22;;392:30;416:5;392:30;:::i;:::-;351:77;;;;:::o;434:139::-;480:5;518:6;505:20;496:29;;534:33;561:5;534:33;:::i;:::-;486:87;;;;:::o;579:143::-;636:5;667:6;661:13;652:22;;683:33;710:5;683:33;:::i;:::-;642:80;;;;:::o;728:262::-;787:6;836:2;824:9;815:7;811:23;807:32;804:2;;;852:1;849;842:12;804:2;895:1;920:53;965:7;956:6;945:9;941:22;920:53;:::i;:::-;910:63;;866:117;794:196;;;;:::o;996:407::-;1064:6;1072;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:53;1250:7;1241:6;1230:9;1226:22;1205:53;:::i;:::-;1195:63;;1151:117;1307:2;1333:53;1378:7;1369:6;1358:9;1354:22;1333:53;:::i;:::-;1323:63;;1278:118;1079:324;;;;;:::o;1409:552::-;1486:6;1494;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:2;;;1567:1;1564;1557:12;1519:2;1610:1;1635:53;1680:7;1671:6;1660:9;1656:22;1635:53;:::i;:::-;1625:63;;1581:117;1737:2;1763:53;1808:7;1799:6;1788:9;1784:22;1763:53;:::i;:::-;1753:63;;1708:118;1865:2;1891:53;1936:7;1927:6;1916:9;1912:22;1891:53;:::i;:::-;1881:63;;1836:118;1509:452;;;;;:::o;1967:407::-;2035:6;2043;2092:2;2080:9;2071:7;2067:23;2063:32;2060:2;;;2108:1;2105;2098:12;2060:2;2151:1;2176:53;2221:7;2212:6;2201:9;2197:22;2176:53;:::i;:::-;2166:63;;2122:117;2278:2;2304:53;2349:7;2340:6;2329:9;2325:22;2304:53;:::i;:::-;2294:63;;2249:118;2050:324;;;;;:::o;2380:278::-;2447:6;2496:2;2484:9;2475:7;2471:23;2467:32;2464:2;;;2512:1;2509;2502:12;2464:2;2555:1;2580:61;2633:7;2624:6;2613:9;2609:22;2580:61;:::i;:::-;2570:71;;2526:125;2454:204;;;;:::o;2664:262::-;2723:6;2772:2;2760:9;2751:7;2747:23;2743:32;2740:2;;;2788:1;2785;2778:12;2740:2;2831:1;2856:53;2901:7;2892:6;2881:9;2877:22;2856:53;:::i;:::-;2846:63;;2802:117;2730:196;;;;:::o;2932:284::-;3002:6;3051:2;3039:9;3030:7;3026:23;3022:32;3019:2;;;3067:1;3064;3057:12;3019:2;3110:1;3135:64;3191:7;3182:6;3171:9;3167:22;3135:64;:::i;:::-;3125:74;;3081:128;3009:207;;;;:::o;3222:401::-;3287:6;3295;3344:2;3332:9;3323:7;3319:23;3315:32;3312:2;;;3360:1;3357;3350:12;3312:2;3403:1;3428:53;3473:7;3464:6;3453:9;3449:22;3428:53;:::i;:::-;3418:63;;3374:117;3530:2;3556:50;3598:7;3589:6;3578:9;3574:22;3556:50;:::i;:::-;3546:60;;3501:115;3302:321;;;;;:::o;3629:118::-;3716:24;3734:5;3716:24;:::i;:::-;3711:3;3704:37;3694:53;;:::o;3753:109::-;3834:21;3849:5;3834:21;:::i;:::-;3829:3;3822:34;3812:50;;:::o;3868:364::-;3956:3;3984:39;4017:5;3984:39;:::i;:::-;4039:71;4103:6;4098:3;4039:71;:::i;:::-;4032:78;;4119:52;4164:6;4159:3;4152:4;4145:5;4141:16;4119:52;:::i;:::-;4196:29;4218:6;4196:29;:::i;:::-;4191:3;4187:39;4180:46;;3960:272;;;;;:::o;4238:366::-;4380:3;4401:67;4465:2;4460:3;4401:67;:::i;:::-;4394:74;;4477:93;4566:3;4477:93;:::i;:::-;4595:2;4590:3;4586:12;4579:19;;4384:220;;;:::o;4610:366::-;4752:3;4773:67;4837:2;4832:3;4773:67;:::i;:::-;4766:74;;4849:93;4938:3;4849:93;:::i;:::-;4967:2;4962:3;4958:12;4951:19;;4756:220;;;:::o;4982:366::-;5124:3;5145:67;5209:2;5204:3;5145:67;:::i;:::-;5138:74;;5221:93;5310:3;5221:93;:::i;:::-;5339:2;5334:3;5330:12;5323:19;;5128:220;;;:::o;5354:366::-;5496:3;5517:67;5581:2;5576:3;5517:67;:::i;:::-;5510:74;;5593:93;5682:3;5593:93;:::i;:::-;5711:2;5706:3;5702:12;5695:19;;5500:220;;;:::o;5726:366::-;5868:3;5889:67;5953:2;5948:3;5889:67;:::i;:::-;5882:74;;5965:93;6054:3;5965:93;:::i;:::-;6083:2;6078:3;6074:12;6067:19;;5872:220;;;:::o;6098:366::-;6240:3;6261:67;6325:2;6320:3;6261:67;:::i;:::-;6254:74;;6337:93;6426:3;6337:93;:::i;:::-;6455:2;6450:3;6446:12;6439:19;;6244:220;;;:::o;6470:366::-;6612:3;6633:67;6697:2;6692:3;6633:67;:::i;:::-;6626:74;;6709:93;6798:3;6709:93;:::i;:::-;6827:2;6822:3;6818:12;6811:19;;6616:220;;;:::o;6842:366::-;6984:3;7005:67;7069:2;7064:3;7005:67;:::i;:::-;6998:74;;7081:93;7170:3;7081:93;:::i;:::-;7199:2;7194:3;7190:12;7183:19;;6988:220;;;:::o;7214:366::-;7356:3;7377:67;7441:2;7436:3;7377:67;:::i;:::-;7370:74;;7453:93;7542:3;7453:93;:::i;:::-;7571:2;7566:3;7562:12;7555:19;;7360:220;;;:::o;7586:366::-;7728:3;7749:67;7813:2;7808:3;7749:67;:::i;:::-;7742:74;;7825:93;7914:3;7825:93;:::i;:::-;7943:2;7938:3;7934:12;7927:19;;7732:220;;;:::o;7958:366::-;8100:3;8121:67;8185:2;8180:3;8121:67;:::i;:::-;8114:74;;8197:93;8286:3;8197:93;:::i;:::-;8315:2;8310:3;8306:12;8299:19;;8104:220;;;:::o;8330:366::-;8472:3;8493:67;8557:2;8552:3;8493:67;:::i;:::-;8486:74;;8569:93;8658:3;8569:93;:::i;:::-;8687:2;8682:3;8678:12;8671:19;;8476:220;;;:::o;8702:366::-;8844:3;8865:67;8929:2;8924:3;8865:67;:::i;:::-;8858:74;;8941:93;9030:3;8941:93;:::i;:::-;9059:2;9054:3;9050:12;9043:19;;8848:220;;;:::o;9074:118::-;9161:24;9179:5;9161:24;:::i;:::-;9156:3;9149:37;9139:53;;:::o;9198:112::-;9281:22;9297:5;9281:22;:::i;:::-;9276:3;9269:35;9259:51;;:::o;9316:222::-;9409:4;9447:2;9436:9;9432:18;9424:26;;9460:71;9528:1;9517:9;9513:17;9504:6;9460:71;:::i;:::-;9414:124;;;;:::o;9544:332::-;9665:4;9703:2;9692:9;9688:18;9680:26;;9716:71;9784:1;9773:9;9769:17;9760:6;9716:71;:::i;:::-;9797:72;9865:2;9854:9;9850:18;9841:6;9797:72;:::i;:::-;9670:206;;;;;:::o;9882:210::-;9969:4;10007:2;9996:9;9992:18;9984:26;;10020:65;10082:1;10071:9;10067:17;10058:6;10020:65;:::i;:::-;9974:118;;;;:::o;10098:313::-;10211:4;10249:2;10238:9;10234:18;10226:26;;10298:9;10292:4;10288:20;10284:1;10273:9;10269:17;10262:47;10326:78;10399:4;10390:6;10326:78;:::i;:::-;10318:86;;10216:195;;;;:::o;10417:419::-;10583:4;10621:2;10610:9;10606:18;10598:26;;10670:9;10664:4;10660:20;10656:1;10645:9;10641:17;10634:47;10698:131;10824:4;10698:131;:::i;:::-;10690:139;;10588:248;;;:::o;10842:419::-;11008:4;11046:2;11035:9;11031:18;11023:26;;11095:9;11089:4;11085:20;11081:1;11070:9;11066:17;11059:47;11123:131;11249:4;11123:131;:::i;:::-;11115:139;;11013:248;;;:::o;11267:419::-;11433:4;11471:2;11460:9;11456:18;11448:26;;11520:9;11514:4;11510:20;11506:1;11495:9;11491:17;11484:47;11548:131;11674:4;11548:131;:::i;:::-;11540:139;;11438:248;;;:::o;11692:419::-;11858:4;11896:2;11885:9;11881:18;11873:26;;11945:9;11939:4;11935:20;11931:1;11920:9;11916:17;11909:47;11973:131;12099:4;11973:131;:::i;:::-;11965:139;;11863:248;;;:::o;12117:419::-;12283:4;12321:2;12310:9;12306:18;12298:26;;12370:9;12364:4;12360:20;12356:1;12345:9;12341:17;12334:47;12398:131;12524:4;12398:131;:::i;:::-;12390:139;;12288:248;;;:::o;12542:419::-;12708:4;12746:2;12735:9;12731:18;12723:26;;12795:9;12789:4;12785:20;12781:1;12770:9;12766:17;12759:47;12823:131;12949:4;12823:131;:::i;:::-;12815:139;;12713:248;;;:::o;12967:419::-;13133:4;13171:2;13160:9;13156:18;13148:26;;13220:9;13214:4;13210:20;13206:1;13195:9;13191:17;13184:47;13248:131;13374:4;13248:131;:::i;:::-;13240:139;;13138:248;;;:::o;13392:419::-;13558:4;13596:2;13585:9;13581:18;13573:26;;13645:9;13639:4;13635:20;13631:1;13620:9;13616:17;13609:47;13673:131;13799:4;13673:131;:::i;:::-;13665:139;;13563:248;;;:::o;13817:419::-;13983:4;14021:2;14010:9;14006:18;13998:26;;14070:9;14064:4;14060:20;14056:1;14045:9;14041:17;14034:47;14098:131;14224:4;14098:131;:::i;:::-;14090:139;;13988:248;;;:::o;14242:419::-;14408:4;14446:2;14435:9;14431:18;14423:26;;14495:9;14489:4;14485:20;14481:1;14470:9;14466:17;14459:47;14523:131;14649:4;14523:131;:::i;:::-;14515:139;;14413:248;;;:::o;14667:419::-;14833:4;14871:2;14860:9;14856:18;14848:26;;14920:9;14914:4;14910:20;14906:1;14895:9;14891:17;14884:47;14948:131;15074:4;14948:131;:::i;:::-;14940:139;;14838:248;;;:::o;15092:419::-;15258:4;15296:2;15285:9;15281:18;15273:26;;15345:9;15339:4;15335:20;15331:1;15320:9;15316:17;15309:47;15373:131;15499:4;15373:131;:::i;:::-;15365:139;;15263:248;;;:::o;15517:419::-;15683:4;15721:2;15710:9;15706:18;15698:26;;15770:9;15764:4;15760:20;15756:1;15745:9;15741:17;15734:47;15798:131;15924:4;15798:131;:::i;:::-;15790:139;;15688:248;;;:::o;15942:222::-;16035:4;16073:2;16062:9;16058:18;16050:26;;16086:71;16154:1;16143:9;16139:17;16130:6;16086:71;:::i;:::-;16040:124;;;;:::o;16170:214::-;16259:4;16297:2;16286:9;16282:18;16274:26;;16310:67;16374:1;16363:9;16359:17;16350:6;16310:67;:::i;:::-;16264:120;;;;:::o;16390:99::-;16442:6;16476:5;16470:12;16460:22;;16449:40;;;:::o;16495:169::-;16579:11;16613:6;16608:3;16601:19;16653:4;16648:3;16644:14;16629:29;;16591:73;;;;:::o;16670:305::-;16710:3;16729:20;16747:1;16729:20;:::i;:::-;16724:25;;16763:20;16781:1;16763:20;:::i;:::-;16758:25;;16917:1;16849:66;16845:74;16842:1;16839:81;16836:2;;;16923:18;;:::i;:::-;16836:2;16967:1;16964;16960:9;16953:16;;16714:261;;;;:::o;16981:185::-;17021:1;17038:20;17056:1;17038:20;:::i;:::-;17033:25;;17072:20;17090:1;17072:20;:::i;:::-;17067:25;;17111:1;17101:2;;17116:18;;:::i;:::-;17101:2;17158:1;17155;17151:9;17146:14;;17023:143;;;;:::o;17172:348::-;17212:7;17235:20;17253:1;17235:20;:::i;:::-;17230:25;;17269:20;17287:1;17269:20;:::i;:::-;17264:25;;17457:1;17389:66;17385:74;17382:1;17379:81;17374:1;17367:9;17360:17;17356:105;17353:2;;;17464:18;;:::i;:::-;17353:2;17512:1;17509;17505:9;17494:20;;17220:300;;;;:::o;17526:191::-;17566:4;17586:20;17604:1;17586:20;:::i;:::-;17581:25;;17620:20;17638:1;17620:20;:::i;:::-;17615:25;;17659:1;17656;17653:8;17650:2;;;17664:18;;:::i;:::-;17650:2;17709:1;17706;17702:9;17694:17;;17571:146;;;;:::o;17723:96::-;17760:7;17789:24;17807:5;17789:24;:::i;:::-;17778:35;;17768:51;;;:::o;17825:90::-;17859:7;17902:5;17895:13;17888:21;17877:32;;17867:48;;;:::o;17921:126::-;17958:7;17998:42;17991:5;17987:54;17976:65;;17966:81;;;:::o;18053:77::-;18090:7;18119:5;18108:16;;18098:32;;;:::o;18136:86::-;18171:7;18211:4;18204:5;18200:16;18189:27;;18179:43;;;:::o;18228:307::-;18296:1;18306:113;18320:6;18317:1;18314:13;18306:113;;;18405:1;18400:3;18396:11;18390:18;18386:1;18381:3;18377:11;18370:39;18342:2;18339:1;18335:10;18330:15;;18306:113;;;18437:6;18434:1;18431:13;18428:2;;;18517:1;18508:6;18503:3;18499:16;18492:27;18428:2;18277:258;;;;:::o;18541:320::-;18585:6;18622:1;18616:4;18612:12;18602:22;;18669:1;18663:4;18659:12;18690:18;18680:2;;18746:4;18738:6;18734:17;18724:27;;18680:2;18808;18800:6;18797:14;18777:18;18774:38;18771:2;;;18827:18;;:::i;:::-;18771:2;18592:269;;;;:::o;18867:233::-;18906:3;18929:24;18947:5;18929:24;:::i;:::-;18920:33;;18975:66;18968:5;18965:77;18962:2;;;19045:18;;:::i;:::-;18962:2;19092:1;19085:5;19081:13;19074:20;;18910:190;;;:::o;19106:176::-;19138:1;19155:20;19173:1;19155:20;:::i;:::-;19150:25;;19189:20;19207:1;19189:20;:::i;:::-;19184:25;;19228:1;19218:2;;19233:18;;:::i;:::-;19218:2;19274:1;19271;19267:9;19262:14;;19140:142;;;;:::o;19288:180::-;19336:77;19333:1;19326:88;19433:4;19430:1;19423:15;19457:4;19454:1;19447:15;19474:180;19522:77;19519:1;19512:88;19619:4;19616:1;19609:15;19643:4;19640:1;19633:15;19660:180;19708:77;19705:1;19698:88;19805:4;19802:1;19795:15;19829:4;19826:1;19819:15;19846:102;19887:6;19938:2;19934:7;19929:2;19922:5;19918:14;19914:28;19904:38;;19894:54;;;:::o;19954:222::-;20094:34;20090:1;20082:6;20078:14;20071:58;20163:5;20158:2;20150:6;20146:15;20139:30;20060:116;:::o;20182:229::-;20322:34;20318:1;20310:6;20306:14;20299:58;20391:12;20386:2;20378:6;20374:15;20367:37;20288:123;:::o;20417:225::-;20557:34;20553:1;20545:6;20541:14;20534:58;20626:8;20621:2;20613:6;20609:15;20602:33;20523:119;:::o;20648:221::-;20788:34;20784:1;20776:6;20772:14;20765:58;20857:4;20852:2;20844:6;20840:15;20833:29;20754:115;:::o;20875:177::-;21015:29;21011:1;21003:6;20999:14;20992:53;20981:71;:::o;21058:181::-;21198:33;21194:1;21186:6;21182:14;21175:57;21164:75;:::o;21245:233::-;21385:34;21381:1;21373:6;21369:14;21362:58;21454:16;21449:2;21441:6;21437:15;21430:41;21351:127;:::o;21484:182::-;21624:34;21620:1;21612:6;21608:14;21601:58;21590:76;:::o;21672:228::-;21812:34;21808:1;21800:6;21796:14;21789:58;21881:11;21876:2;21868:6;21864:15;21857:36;21778:122;:::o;21906:168::-;22046:20;22042:1;22034:6;22030:14;22023:44;22012:62;:::o;22080:224::-;22220:34;22216:1;22208:6;22204:14;22197:58;22289:7;22284:2;22276:6;22272:15;22265:32;22186:118;:::o;22310:223::-;22450:34;22446:1;22438:6;22434:14;22427:58;22519:6;22514:2;22506:6;22502:15;22495:31;22416:117;:::o;22539:231::-;22679:34;22675:1;22667:6;22663:14;22656:58;22748:14;22743:2;22735:6;22731:15;22724:39;22645:125;:::o;22776:122::-;22849:24;22867:5;22849:24;:::i;:::-;22842:5;22839:35;22829:2;;22888:1;22885;22878:12;22829:2;22819:79;:::o;22904:116::-;22974:21;22989:5;22974:21;:::i;:::-;22967:5;22964:32;22954:2;;23010:1;23007;23000:12;22954:2;22944:76;:::o;23026:122::-;23099:24;23117:5;23099:24;:::i;:::-;23092:5;23089:35;23079:2;;23138:1;23135;23128:12;23079:2;23069:79;:::o
Swarm Source
ipfs://a7f89686cd5d5d551bf2ce354a2492721f166c5765d782df1628152e25c550d9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.