Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 31 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 12858121 | 1204 days ago | IN | 0 ETH | 0.00143195 | ||||
In Case Tokenget... | 12165556 | 1311 days ago | IN | 0 ETH | 0.00383724 | ||||
Toggle Contract ... | 10670306 | 1541 days ago | IN | 0 ETH | 0.00257452 | ||||
Zap In | 10670118 | 1541 days ago | IN | 0 ETH | 0.07009259 | ||||
Zap In | 10669923 | 1541 days ago | IN | 0 ETH | 0.01252879 | ||||
Zap In | 10669908 | 1541 days ago | IN | 0 ETH | 0.12696871 | ||||
Zap In | 10669633 | 1541 days ago | IN | 20 ETH | 0.11314637 | ||||
Zap In | 10669615 | 1541 days ago | IN | 0 ETH | 0.01386379 | ||||
Zap In | 10669286 | 1541 days ago | IN | 1.63 ETH | 0.10007882 | ||||
Zap In | 10669241 | 1541 days ago | IN | 1 ETH | 0.10496755 | ||||
Zap In | 10669025 | 1541 days ago | IN | 0 ETH | 0.06910203 | ||||
Zap In | 10668859 | 1541 days ago | IN | 0 ETH | 0.07897692 | ||||
Zap In | 10668735 | 1541 days ago | IN | 23.3 ETH | 0.09799193 | ||||
Zap In | 10668406 | 1541 days ago | IN | 0 ETH | 0.10058378 | ||||
Zap In | 10668349 | 1541 days ago | IN | 0 ETH | 0.10972378 | ||||
Zap In | 10668164 | 1541 days ago | IN | 3.5 ETH | 0.11250702 | ||||
Zap In | 10667999 | 1541 days ago | IN | 0 ETH | 0.07702699 | ||||
Zap In | 10667196 | 1541 days ago | IN | 0 ETH | 0.07931307 | ||||
Zap In | 10666198 | 1542 days ago | IN | 0 ETH | 0.17396621 | ||||
Zap In | 10666159 | 1542 days ago | IN | 12 ETH | 0.1432961 | ||||
Zap In | 10666113 | 1542 days ago | IN | 15 ETH | 0.09783153 | ||||
Zap In | 10666077 | 1542 days ago | IN | 0 ETH | 0.17055511 | ||||
Add New Y Vault | 10664464 | 1542 days ago | IN | 0 ETH | 0.0044504 | ||||
Zap In | 10664395 | 1542 days ago | IN | 0 ETH | 0.0317907 | ||||
Add New Y Vault | 10664363 | 1542 days ago | IN | 0 ETH | 0.00449369 |
Latest 9 internal transactions
Advanced mode:
Loading...
Loading
Contract Name:
yVault_ZapInOut_General_V1
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-08-14 */ // ███████╗░█████╗░██████╗░██████╗░███████╗██████╗░░░░███████╗██╗ // ╚════██║██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗░░░██╔════╝██║ // ░░███╔═╝███████║██████╔╝██████╔╝█████╗░░██████╔╝░░░█████╗░░██║ // ██╔══╝░░██╔══██║██╔═══╝░██╔═══╝░██╔══╝░░██╔══██╗░░░██╔══╝░░██║ // ███████╗██║░░██║██║░░░░░██║░░░░░███████╗██║░░██║██╗██║░░░░░██║ // ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░░░░╚══════╝╚═╝░░╚═╝╚═╝╚═╝░░░░░╚═╝ // Copyright (C) 2020 zapper, nodar, suhail, seb, sumit, apoorv // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // ///@author Zapper ///@notice This contract adds/removes liquidity to/from yEarn Vaults using ETH or ERC20 Tokens. // SPDX-License-Identifier: GPLv2 // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol pragma solidity ^0.6.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly 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" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "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" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal virtual view returns (address payable) { return msg.sender; } function _msgData() internal virtual view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: yVault_ZapInOut_General_V1.sol pragma solidity ^0.6.0; library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x095ea7b3, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: APPROVE_FAILED" ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0xa9059cbb, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FAILED" ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x23b872dd, from, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FROM_FAILED" ); } } interface IUniswapV2Factory { function getPair(address tokenA, address tokenB) external view returns (address); } interface IUniswapRouter02 { //get estimated amountOut function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); //token 2 token function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); //eth 2 token function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); //token 2 eth function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); } interface yVault { function deposit(uint256) external; function withdraw(uint256) external; function getPricePerFullShare() external view returns (uint256); function token() external view returns (address); } interface ICurveZapInGeneral { function ZapIn( address _toWhomToIssue, address _IncomingTokenAddress, address _curvePoolExchangeAddress, uint256 _IncomingTokenQty, uint256 _minPoolTokens ) external payable returns (uint256 crvTokensBought); } interface IAaveLendingPoolAddressesProvider { function getLendingPool() external view returns (address); function getLendingPoolCore() external view returns (address payable); } interface IAaveLendingPool { function deposit( address _reserve, uint256 _amount, uint16 _referralCode ) external payable; } interface IAToken { function redeem(uint256 _amount) external; function underlyingAssetAddress() external returns (address); } contract yVault_ZapInOut_General_V1 is ReentrancyGuard, Ownable { using SafeMath for uint256; using Address for address; bool public stopped = false; uint16 public goodwill; IUniswapV2Factory private constant UniSwapV2FactoryAddress = IUniswapV2Factory( 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f ); IUniswapRouter02 private constant uniswapRouter = IUniswapRouter02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); ICurveZapInGeneral public CurveZapInGeneral = ICurveZapInGeneral( 0x456974dF1042bA7A46FD49512A8778Ac3B840A21 ); IAaveLendingPoolAddressesProvider private constant lendingPoolAddressProvider = IAaveLendingPoolAddressesProvider( 0x24a42fD28C976A61Df5D00D0599C34c4f90748c8 ); address private yCurveExchangeAddress = 0xbBC81d23Ea2c3ec7e56D39296F0cbB648873a5d3; address private constant ETHAddress = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address private constant wethTokenAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address private constant zgoodwillAddress = 0xE737b6AfEC2320f616297e59445b60a11e3eF75F; uint256 private constant deadline = 0xf000000000000000000000000000000000000000000000000000000000000000; mapping(address => bytes32) public supportedVaults; // Address => Vault Name event Zapin( address _toWhomToIssue, address _toYVaultAddress, uint256 _Outgoing ); event Zapout( address _toWhomToIssue, address _fromYVaultAddress, address _toTokenAddress, uint256 _tokensRecieved ); constructor(uint16 _goodwill) public { goodwill = _goodwill; // Initial supported vaults supportedVaults[0x5dbcF33D8c2E976c6b560249878e6F1491Bca25c] = keccak256( bytes("yCurveVault") ); supportedVaults[0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e] = keccak256( bytes("yUsdcVault") ); supportedVaults[0x881b06da56BB5675c54E4Ed311c21E54C5025298] = keccak256( bytes("yLinkVault") ); supportedVaults[0x29E240CFD7946BA20895a7a02eDb25C210f9f324] = keccak256( bytes("yaLinkVault") ); supportedVaults[0x37d19d1c4E1fa9DC47bD1eA12f742a0887eDa74a] = keccak256( bytes("yTusdVault") ); } // circuit breaker modifiers modifier stopInEmergency { if (stopped) { revert("Temporarily Paused"); } else { _; } } function updateCurveZapIn(address CurveZapInGeneralAddress) public onlyOwner { require(CurveZapInGeneralAddress != address(0), "Invalid Address"); CurveZapInGeneral = ICurveZapInGeneral(CurveZapInGeneralAddress); } function addNewYVault(address _vaultAddress, string calldata _vaultName) external onlyOwner { require(_vaultAddress != address(0), "Invalid Address"); require( supportedVaults[_vaultAddress] == "", "Err: Vault Already Exists" ); supportedVaults[_vaultAddress] = keccak256(bytes(_vaultName)); } /** @notice This function is used to add liquidity to yVaults @param _toWhomToIssue recipient address @param _toYVaultAddress The address of vault to add liquidity to @param _vaultType Type of underlying token: 0 token; 1 aToken; 2 LP token @param _fromTokenAddress The token used for investment (address(0x00) if ether) @param _amount The amount of ERC to invest @param _minTokensSwapped for slippage @return yTokensRec */ function ZapIn( address _toWhomToIssue, address _toYVaultAddress, uint16 _vaultType, address _fromTokenAddress, uint256 _amount, uint256 _minTokensSwapped ) public payable nonReentrant stopInEmergency returns (uint256) { require( supportedVaults[_toYVaultAddress] != "", "ERR: Unsupported Vault" ); yVault vaultToEnter = yVault(_toYVaultAddress); address underlyingVaultToken = vaultToEnter.token(); if (_fromTokenAddress == address(0)) { require(msg.value > 0, "ERR: No ETH sent"); } else { require(_amount > 0, "Err: No Tokens Sent"); require(msg.value == 0, "ERR: ETH sent with Token"); TransferHelper.safeTransferFrom( _fromTokenAddress, msg.sender, address(this), _amount ); } if (_vaultType == 2) { uint256 tokensBought; if (_fromTokenAddress == address(0)) { tokensBought = CurveZapInGeneral.ZapIn{value: msg.value}( address(this), address(0), yCurveExchangeAddress, msg.value, _minTokensSwapped ); } else { IERC20(_fromTokenAddress).approve( address(CurveZapInGeneral), _amount ); tokensBought = CurveZapInGeneral.ZapIn( address(this), _fromTokenAddress, yCurveExchangeAddress, _amount, _minTokensSwapped ); } IERC20(underlyingVaultToken).approve( address(vaultToEnter), tokensBought ); vaultToEnter.deposit(tokensBought); } else if (_vaultType == 1) { address underlyingAsset = IAToken(underlyingVaultToken) .underlyingAssetAddress(); uint256 tokensBought; if (_fromTokenAddress == address(0)) { tokensBought = _eth2Token(underlyingAsset, _minTokensSwapped); } else { tokensBought = _token2Token( _fromTokenAddress, underlyingAsset, _amount, _minTokensSwapped ); } IERC20(underlyingAsset).approve( lendingPoolAddressProvider.getLendingPoolCore(), tokensBought ); IAaveLendingPool(lendingPoolAddressProvider.getLendingPool()) .deposit(underlyingAsset, tokensBought, 0); uint256 aTokensBought = IERC20(underlyingVaultToken).balanceOf( address(this) ); IERC20(underlyingVaultToken).approve( address(vaultToEnter), aTokensBought ); vaultToEnter.deposit(aTokensBought); } else { uint256 tokensBought; if (_fromTokenAddress == address(0)) { tokensBought = _eth2Token( underlyingVaultToken, _minTokensSwapped ); } else { tokensBought = _token2Token( _fromTokenAddress, underlyingVaultToken, _amount, _minTokensSwapped ); } IERC20(underlyingVaultToken).approve( address(vaultToEnter), tokensBought ); vaultToEnter.deposit(tokensBought); } uint256 yTokensRec = IERC20(address(vaultToEnter)).balanceOf( address(this) ); //transfer goodwill uint256 goodwillPortion = _transferGoodwill( zgoodwillAddress, yTokensRec ); IERC20(address(vaultToEnter)).transfer( _toWhomToIssue, yTokensRec.sub(goodwillPortion) ); emit Zapin( _toWhomToIssue, address(vaultToEnter), yTokensRec.sub(goodwillPortion) ); return (yTokensRec.sub(goodwillPortion)); } function ZapOutToUnderlying( address _toWhomToIssue, address _fromYVaultAddress, uint256 _amount ) public nonReentrant stopInEmergency returns (uint256) { yVault vaultToExit = yVault(_fromYVaultAddress); address underlyingVaultToken = vaultToExit.token(); TransferHelper.safeTransferFrom( address(vaultToExit), msg.sender, address(this), _amount ); vaultToExit.withdraw(_amount); uint256 underlyingReceived = IERC20(underlyingVaultToken).balanceOf( address(this) ); //transfer goodwill uint256 goodwillPortion = _transferGoodwill( underlyingVaultToken, underlyingReceived ); TransferHelper.safeTransfer( underlyingVaultToken, _toWhomToIssue, underlyingReceived.sub(goodwillPortion) ); emit Zapout( _toWhomToIssue, _fromYVaultAddress, underlyingVaultToken, underlyingReceived.sub(goodwillPortion) ); return (underlyingReceived.sub(goodwillPortion)); } /** @notice This function is used to swap eth for tokens @param _tokenContractAddress Token address which we want to buy @param minTokens recieved after swap for slippage @return tokensBought The quantity of token bought */ function _eth2Token(address _tokenContractAddress, uint256 minTokens) internal returns (uint256 tokensBought) { require( _tokenContractAddress != wethTokenAddress, "ERR: Invalid Swap to ETH" ); address[] memory path = new address[](2); path[0] = wethTokenAddress; path[1] = _tokenContractAddress; tokensBought = uniswapRouter.swapExactETHForTokens{value: msg.value}( 1, path, address(this), deadline )[path.length - 1]; require(tokensBought >= minTokens, "ERR: High Slippage"); } /** @notice This function is used to swap tokens @param _FromTokenContractAddress The token address to swap from @param _ToTokenContractAddress The token address to swap to @param tokens2Trade The amount of tokens to swap @param minTokens recieved after swap for slippage @return tokenBought The quantity of tokens bought */ function _token2Token( address _FromTokenContractAddress, address _ToTokenContractAddress, uint256 tokens2Trade, uint256 minTokens ) public returns (uint256 tokenBought) { if (_FromTokenContractAddress == _ToTokenContractAddress) { return tokens2Trade; } TransferHelper.safeApprove( _FromTokenContractAddress, address(uniswapRouter), tokens2Trade ); if (_FromTokenContractAddress != wethTokenAddress) { if (_ToTokenContractAddress != wethTokenAddress) { address[] memory path = new address[](3); path[0] = _FromTokenContractAddress; path[1] = wethTokenAddress; path[2] = _ToTokenContractAddress; tokenBought = uniswapRouter.swapExactTokensForTokens( tokens2Trade, 1, path, address(this), deadline )[path.length - 1]; } else { address[] memory path = new address[](2); path[0] = _FromTokenContractAddress; path[1] = wethTokenAddress; tokenBought = uniswapRouter.swapExactTokensForTokens( tokens2Trade, 1, path, address(this), deadline )[path.length - 1]; } } else { address[] memory path = new address[](2); path[0] = wethTokenAddress; path[1] = _ToTokenContractAddress; tokenBought = uniswapRouter.swapExactTokensForTokens( tokens2Trade, 1, path, address(this), deadline )[path.length - 1]; } require(tokenBought > minTokens, "ERR: High Slippage"); } /** @notice This function is used to calculate and transfer goodwill @param _tokenContractAddress Token in which goodwill is deducted @param tokens2Trade The total amount of tokens to be zapped in @return goodwillPortion The quantity of goodwill deducted */ function _transferGoodwill( address _tokenContractAddress, uint256 tokens2Trade ) internal returns (uint256 goodwillPortion) { goodwillPortion = SafeMath.div( SafeMath.mul(tokens2Trade, goodwill), 10000 ); if (goodwillPortion == 0) { return 0; } TransferHelper.safeTransfer( _tokenContractAddress, zgoodwillAddress, goodwillPortion ); } function set_new_goodwill(uint16 _new_goodwill) public onlyOwner { require( _new_goodwill >= 0 && _new_goodwill < 10000, "GoodWill Value not allowed" ); goodwill = _new_goodwill; } function inCaseTokengetsStuck(IERC20 _TokenAddress) public onlyOwner { uint256 qty = _TokenAddress.balanceOf(address(this)); TransferHelper.safeTransfer(address(_TokenAddress), owner(), qty); } // - to Pause the contract function toggleContractActive() public onlyOwner { stopped = !stopped; } // - to withdraw any ETH balance sitting in the contract function withdraw() public onlyOwner { uint256 contractBalance = address(this).balance; address payable _to = payable(owner()); _to.transfer(contractBalance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint16","name":"_goodwill","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"_toWhomToIssue","type":"address"},{"indexed":false,"internalType":"address","name":"_toYVaultAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_Outgoing","type":"uint256"}],"name":"Zapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_toWhomToIssue","type":"address"},{"indexed":false,"internalType":"address","name":"_fromYVaultAddress","type":"address"},{"indexed":false,"internalType":"address","name":"_toTokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokensRecieved","type":"uint256"}],"name":"Zapout","type":"event"},{"inputs":[],"name":"CurveZapInGeneral","outputs":[{"internalType":"contract ICurveZapInGeneral","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_toWhomToIssue","type":"address"},{"internalType":"address","name":"_toYVaultAddress","type":"address"},{"internalType":"uint16","name":"_vaultType","type":"uint16"},{"internalType":"address","name":"_fromTokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minTokensSwapped","type":"uint256"}],"name":"ZapIn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_toWhomToIssue","type":"address"},{"internalType":"address","name":"_fromYVaultAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ZapOutToUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_FromTokenContractAddress","type":"address"},{"internalType":"address","name":"_ToTokenContractAddress","type":"address"},{"internalType":"uint256","name":"tokens2Trade","type":"uint256"},{"internalType":"uint256","name":"minTokens","type":"uint256"}],"name":"_token2Token","outputs":[{"internalType":"uint256","name":"tokenBought","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultAddress","type":"address"},{"internalType":"string","name":"_vaultName","type":"string"}],"name":"addNewYVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"goodwill","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokengetsStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_new_goodwill","type":"uint16"}],"name":"set_new_goodwill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supportedVaults","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleContractActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"CurveZapInGeneralAddress","type":"address"}],"name":"updateCurveZapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001805460ff60a01b19169055600280546001600160a01b031990811673456974df1042ba7a46fd49512a8778ac3b840a21179091556003805490911673bbc81d23ea2c3ec7e56d39296f0cbb648873a5d31790553480156200006657600080fd5b5060405162002ecc38038062002ecc833981810160405260208110156200008c57600080fd5b5051600160009081556200009f6200031d565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001805461ffff909216600160a81b0261ffff60a81b19909216919091179055604080518082018252600b8082526a1e50dd5c9d9955985d5b1d60aa1b6020928301527f9c81b2afde65648c24bf99a2370695f701765cc5f80891bc062ca93e3c7a6ccc7f6d90e218b10fe701aca584628be78e5c609af73d3601b8896a5f23b519841e945582518084018452600a808252691e555cd918d5985d5b1d60b21b918401919091527fb8b4a9012c047239f65b3e84d1fdd72e528bf2f1f8da1dd045e83c944c7e59297f49f5ffe14a4e35ff4c29f0ff2dff685a5507caa866c98d504726d67733e398ea5583518085018552818152691e531a5b9ad5985d5b1d60b21b908401527f91cc3d70ec5300b7daaff5bf9c43fb453408bfa01a6324d700ef18fd661513557f2513fc804fa5be5b7c9d12b6c2bc1b47ec02811b0c8f8780f40db042a61a92e655835180850185529182526a1e58531a5b9ad5985d5b1d60aa1b918301919091527fc4fe2625ef7f9e7f60577cbed51d744000d6eba21710e40e34928f9c410055137f7b8a9859351183fa39f0e57948deaec8a0095645c490ebd50cb2ee25809063a25582518084019093528252691e551d5cd915985d5b1d60b21b918101919091527337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a600052600490527f613adb34126c0aba9f4080452a2b70df1edcf046c8e6a4025ce7c279a8e47a037f5b6366697f326b42796e69cba8bbf744acd8b83b9b51985ac90ce8fe9cfc5db95562000321565b3390565b612b9b80620003316000396000f3fe6080604052600436106100f35760003560e01c806387aca0c01161008a578063b71b73c311610059578063b71b73c31461037c578063d1bd8205146103af578063f2fde38b146103fd578063fbf0c6f114610430576100f3565b806387aca0c01461027f5780638da5cb5b146102da578063a2681be11461030b578063b10e1dbc1461034e576100f3565b8063551196d5116100c6578063551196d5146101e25780635de0398e14610215578063715018a61461024157806375f12b2114610256576100f3565b80631385d24c146100f8578063399355d31461010f5780633ccfd60b14610142578063461c18ca14610157575b600080fd5b34801561010457600080fd5b5061010d610445565b005b34801561011b57600080fd5b5061010d6004803603602081101561013257600080fd5b50356001600160a01b03166104be565b34801561014e57600080fd5b5061010d610585565b34801561016357600080fd5b5061010d6004803603604081101561017a57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156101a457600080fd5b8201836020820111156101b657600080fd5b803590602001918460018302840111600160201b831117156101d757600080fd5b509092509050610626565b3480156101ee57600080fd5b5061010d6004803603602081101561020557600080fd5b50356001600160a01b0316610775565b34801561022157600080fd5b5061022a610860565b6040805161ffff9092168252519081900360200190f35b34801561024d57600080fd5b5061010d610871565b34801561026257600080fd5b5061026b610913565b604080519115158252519081900360200190f35b34801561028b57600080fd5b506102c8600480360360808110156102a257600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610923565b60408051918252519081900360200190f35b3480156102e657600080fd5b506102ef6110df565b604080516001600160a01b039092168252519081900360200190f35b34801561031757600080fd5b506102c86004803603606081101561032e57600080fd5b506001600160a01b038135811691602081013590911690604001356110ee565b34801561035a57600080fd5b5061010d6004803603602081101561037157600080fd5b503561ffff16611395565b34801561038857600080fd5b506102c86004803603602081101561039f57600080fd5b50356001600160a01b0316611469565b6102c8600480360360c08110156103c557600080fd5b506001600160a01b038135811691602081013582169161ffff6040830135169160608101359091169060808101359060a0013561147b565b34801561040957600080fd5b5061010d6004803603602081101561042057600080fd5b50356001600160a01b0316612074565b34801561043c57600080fd5b506102ef61216d565b61044d61217c565b6001546001600160a01b0390811691161461049d576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6001805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6104c661217c565b6001546001600160a01b03908116911614610516576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6001600160a01b038116610563576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204164647265737360881b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b61058d61217c565b6001546001600160a01b039081169116146105dd576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b4760006105e86110df565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610621573d6000803e3d6000fd5b505050565b61062e61217c565b6001546001600160a01b0390811691161461067e576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6001600160a01b0383166106cb576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204164647265737360881b604482015290519081900360640190fd5b6001600160a01b03831660009081526004602052604090205415610736576040805162461bcd60e51b815260206004820152601960248201527f4572723a205661756c7420416c72656164792045786973747300000000000000604482015290519081900360640190fd5b81816040518083838082843760408051939091018390039092206001600160a01b03909816600090815260046020529190912096909655505050505050565b61077d61217c565b6001546001600160a01b039081169116146107cd576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561081c57600080fd5b505afa158015610830573d6000803e3d6000fd5b505050506040513d602081101561084657600080fd5b5051905061085c826108566110df565b83612180565b5050565b600154600160a81b900461ffff1681565b61087961217c565b6001546001600160a01b039081169116146108c9576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6001546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180546001600160a01b0319169055565b600154600160a01b900460ff1681565b6000836001600160a01b0316856001600160a01b031614156109465750816110d7565b61096585737a250d5630b4cf539739df2c5dacb4c659f2488d856122ea565b6001600160a01b03851673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214610e56576001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214610c19576040805160038082526080820190925260609160208201838036833701905050905085816000815181106109dd57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110610a1f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508481600281518110610a4d57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398560018430600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610b0a578181015183820152602001610af2565b505050509050019650505050505050600060405180830381600087803b158015610b3357600080fd5b505af1158015610b47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610b7057600080fd5b8101908080516040519392919084600160201b821115610b8f57600080fd5b908301906020820185811115610ba457600080fd5b82518660208202830111600160201b82111715610bc057600080fd5b82525081516020918201928201910280838360005b83811015610bed578181015183820152602001610bd5565b50505050905001604052505050600182510381518110610c0957fe5b6020026020010151915050610e51565b60408051600280825260608083018452926020830190803683370190505090508581600081518110610c4757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110610c8957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398560018430600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610d46578181015183820152602001610d2e565b505050509050019650505050505050600060405180830381600087803b158015610d6f57600080fd5b505af1158015610d83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610dac57600080fd5b8101908080516040519392919084600160201b821115610dcb57600080fd5b908301906020820185811115610de057600080fd5b82518660208202830111600160201b82111715610dfc57600080fd5b82525081516020918201928201910280838360005b83811015610e29578181015183820152602001610e11565b50505050905001604052505050600182510381518110610e4557fe5b60200260200101519150505b61108e565b604080516002808252606080830184529260208301908036833701905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110610e9857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508481600181518110610ec657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398560018430600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610f83578181015183820152602001610f6b565b505050509050019650505050505050600060405180830381600087803b158015610fac57600080fd5b505af1158015610fc0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610fe957600080fd5b8101908080516040519392919084600160201b82111561100857600080fd5b90830190602082018581111561101d57600080fd5b82518660208202830111600160201b8211171561103957600080fd5b82525081516020918201928201910280838360005b8381101561106657818101518382015260200161104e565b5050505090500160405250505060018251038151811061108257fe5b60200260200101519150505b8181116110d7576040805162461bcd60e51b81526020600482015260126024820152714552523a204869676820536c69707061676560701b604482015290519081900360640190fd5b949350505050565b6001546001600160a01b031690565b600060026000541415611148576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055600154600160a01b900460ff16156111a1576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60008390506000816001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e157600080fd5b505afa1580156111f5573d6000803e3d6000fd5b505050506040513d602081101561120b57600080fd5b5051905061121b8233308761244d565b816001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561126157600080fd5b505af1158015611275573d6000803e3d6000fd5b505050506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112c857600080fd5b505afa1580156112dc573d6000803e3d6000fd5b505050506040513d60208110156112f257600080fd5b50519050600061130283836125aa565b905061131883896113138585612606565b612180565b7fccd66be260e4d251757c46211a144a9df723fe5d98726e537a900b7115b0e74d8888856113468686612606565b604080516001600160a01b03958616815293851660208501529190931682820152606082019290925290519081900360800190a16113848282612606565b600160005598975050505050505050565b61139d61217c565b6001546001600160a01b039081169116146113ed576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6127108161ffff1610611447576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6001805461ffff909216600160a81b0261ffff60a81b19909216919091179055565b60046020526000908152604090205481565b6000600260005414156114d5576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055600154600160a01b900460ff161561152e576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6001600160a01b038616600090815260046020526040902054611591576040805162461bcd60e51b81526020600482015260166024820152751154948e88155b9cdd5c1c1bdc9d19590815985d5b1d60521b604482015290519081900360640190fd5b60008690506000816001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115d157600080fd5b505afa1580156115e5573d6000803e3d6000fd5b505050506040513d60208110156115fb57600080fd5b505190506001600160a01b03861661165a5760003411611655576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b611704565b600085116116a5576040805162461bcd60e51b8152602060048201526013602482015272115c9c8e88139bc8151bdad95b9cc814d95b9d606a1b604482015290519081900360640190fd5b34156116f8576040805162461bcd60e51b815260206004820152601860248201527f4552523a204554482073656e74207769746820546f6b656e0000000000000000604482015290519081900360640190fd5b6117048633308861244d565b8661ffff16600214156119ca5760006001600160a01b0387166117c25760025460035460408051632d4242f760e21b8152306004820152600060248201526001600160a01b0392831660448201523460648201819052608482018a90529151929093169263b5090bdc9260a480830192602092919082900301818588803b15801561178e57600080fd5b505af11580156117a2573d6000803e3d6000fd5b50505050506040513d60208110156117b957600080fd5b505190506118e1565b6002546040805163095ea7b360e01b81526001600160a01b0392831660048201526024810189905290519189169163095ea7b3916044808201926020929091908290030181600087803b15801561181857600080fd5b505af115801561182c573d6000803e3d6000fd5b505050506040513d602081101561184257600080fd5b505060025460035460408051632d4242f760e21b81523060048201526001600160a01b038b811660248301529283166044820152606481018a9052608481018990529051919092169163b5090bdc9160a48083019260209291908290030181600087803b1580156118b257600080fd5b505af11580156118c6573d6000803e3d6000fd5b505050506040513d60208110156118dc57600080fd5b505190505b816001600160a01b031663095ea7b384836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b505050506040513d602081101561196257600080fd5b50506040805163b6b55f2560e01b81526004810183905290516001600160a01b0385169163b6b55f2591602480830192600092919082900301818387803b1580156119ac57600080fd5b505af11580156119c0573d6000803e3d6000fd5b5050505050611ed4565b8661ffff1660011415611dbf576000816001600160a01b03166389d1a0fc6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611a1457600080fd5b505af1158015611a28573d6000803e3d6000fd5b505050506040513d6020811015611a3e57600080fd5b5051905060006001600160a01b038816611a6357611a5c828761264f565b9050611a72565b611a6f88838989610923565b90505b816001600160a01b031663095ea7b37324a42fd28c976a61df5d00d0599c34c4f90748c86001600160a01b031663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015611ace57600080fd5b505afa158015611ae2573d6000803e3d6000fd5b505050506040513d6020811015611af857600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482018590525160448083019260209291908290030181600087803b158015611b4857600080fd5b505af1158015611b5c573d6000803e3d6000fd5b505050506040513d6020811015611b7257600080fd5b505060408051630261bf8b60e01b815290517324a42fd28c976a61df5d00d0599c34c4f90748c891630261bf8b916004808301926020929190829003018186803b158015611bbf57600080fd5b505afa158015611bd3573d6000803e3d6000fd5b505050506040513d6020811015611be957600080fd5b505160408051636968703360e11b81526001600160a01b03858116600483015260248201859052600060448301819052925193169263d2d0e0669260648084019391929182900301818387803b158015611c4257600080fd5b505af1158015611c56573d6000803e3d6000fd5b505050506000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ca957600080fd5b505afa158015611cbd573d6000803e3d6000fd5b505050506040513d6020811015611cd357600080fd5b50516040805163095ea7b360e01b81526001600160a01b0388811660048301526024820184905291519293509086169163095ea7b3916044808201926020929091908290030181600087803b158015611d2b57600080fd5b505af1158015611d3f573d6000803e3d6000fd5b505050506040513d6020811015611d5557600080fd5b50506040805163b6b55f2560e01b81526004810183905290516001600160a01b0387169163b6b55f2591602480830192600092919082900301818387803b158015611d9f57600080fd5b505af1158015611db3573d6000803e3d6000fd5b50505050505050611ed4565b60006001600160a01b038716611de057611dd9828661264f565b9050611def565b611dec87838888610923565b90505b816001600160a01b031663095ea7b384836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e4657600080fd5b505af1158015611e5a573d6000803e3d6000fd5b505050506040513d6020811015611e7057600080fd5b50506040805163b6b55f2560e01b81526004810183905290516001600160a01b0385169163b6b55f2591602480830192600092919082900301818387803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b50505050505b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611f2357600080fd5b505afa158015611f37573d6000803e3d6000fd5b505050506040513d6020811015611f4d57600080fd5b505190506000611f7173e737b6afec2320f616297e59445b60a11e3ef75f836125aa565b90506001600160a01b03841663a9059cbb8c611f8d8585612606565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611fd357600080fd5b505af1158015611fe7573d6000803e3d6000fd5b505050506040513d6020811015611ffd57600080fd5b507f7c58760c09b45377b9759b1584bfa97aaad8a040feb4ec965b2b76e20b4af07f90508b8561202d8585612606565b604080516001600160a01b0394851681529290931660208301528183015290519081900360600190a16120608282612606565b60016000559b9a5050505050505050505050565b61207c61217c565b6001546001600160a01b039081169116146120cc576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6001600160a01b0381166121115760405162461bcd60e51b8152600401808060200182810382526026815260200180612adb6026913960400191505060405180910390fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b3390565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106121fd5780518252601f1990920191602091820191016121de565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461225f576040519150601f19603f3d011682016040523d82523d6000602084013e612264565b606091505b5091509150818015612292575080511580612292575080806020019051602081101561228f57600080fd5b50515b6122e3576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b178152925182516000946060949389169392918291908083835b602083106123675780518252601f199092019160209182019101612348565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146123c9576040519150601f19603f3d011682016040523d82523d6000602084013e6123ce565b606091505b50915091508180156123fc5750805115806123fc57508080602001905160208110156123f957600080fd5b50515b6122e3576040805162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015290519081900360640190fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106124d25780518252601f1990920191602091820191016124b3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612534576040519150601f19603f3d011682016040523d82523d6000602084013e612539565b606091505b5091509150818015612567575080511580612567575080806020019051602081101561256457600080fd5b50515b6125a25760405162461bcd60e51b8152600401808060200182810382526024815260200180612b426024913960400191505060405180910390fd5b505050505050565b6001546000906125d2906125ca908490600160a81b900461ffff16612943565b61271061299c565b9050806125e157506000612600565b6126008373e737b6afec2320f616297e59445b60a11e3ef75f83612180565b92915050565b600061264883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129de565b9392505050565b60006001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214156126c3576040805162461bcd60e51b815260206004820152601860248201527f4552523a20496e76616c6964205377617020746f204554480000000000000000604482015290519081900360640190fd5b604080516002808252606080830184529260208301908036833701905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160008151811061270557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050838160018151811061273357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316637ff36ab53460018430600f60fc1b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156127ea5781810151838201526020016127d2565b50505050905001955050505050506000604051808303818588803b15801561281157600080fd5b505af1158015612825573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052602081101561284f57600080fd5b8101908080516040519392919084600160201b82111561286e57600080fd5b90830190602082018581111561288357600080fd5b82518660208202830111600160201b8211171561289f57600080fd5b82525081516020918201928201910280838360005b838110156128cc5781810151838201526020016128b4565b505050509050016040525050506001825103815181106128e857fe5b602002602001015191508282101561293c576040805162461bcd60e51b81526020600482015260126024820152714552523a204869676820536c69707061676560701b604482015290519081900360640190fd5b5092915050565b60008261295257506000612600565b8282028284828161295f57fe5b04146126485760405162461bcd60e51b8152600401808060200182810382526021815260200180612b016021913960400191505060405180910390fd5b600061264883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a75565b60008184841115612a6d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a32578181015183820152602001612a1a565b50505050905090810190601f168015612a5f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183612ac45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612a32578181015183820152602001612a1a565b506000838581612ad057fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212203f98c5e4bb252f13bf4f857be315bd524a9dfcfe7b86ac30ff687921eb41bcf164736f6c634300060c00330000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106100f35760003560e01c806387aca0c01161008a578063b71b73c311610059578063b71b73c31461037c578063d1bd8205146103af578063f2fde38b146103fd578063fbf0c6f114610430576100f3565b806387aca0c01461027f5780638da5cb5b146102da578063a2681be11461030b578063b10e1dbc1461034e576100f3565b8063551196d5116100c6578063551196d5146101e25780635de0398e14610215578063715018a61461024157806375f12b2114610256576100f3565b80631385d24c146100f8578063399355d31461010f5780633ccfd60b14610142578063461c18ca14610157575b600080fd5b34801561010457600080fd5b5061010d610445565b005b34801561011b57600080fd5b5061010d6004803603602081101561013257600080fd5b50356001600160a01b03166104be565b34801561014e57600080fd5b5061010d610585565b34801561016357600080fd5b5061010d6004803603604081101561017a57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156101a457600080fd5b8201836020820111156101b657600080fd5b803590602001918460018302840111600160201b831117156101d757600080fd5b509092509050610626565b3480156101ee57600080fd5b5061010d6004803603602081101561020557600080fd5b50356001600160a01b0316610775565b34801561022157600080fd5b5061022a610860565b6040805161ffff9092168252519081900360200190f35b34801561024d57600080fd5b5061010d610871565b34801561026257600080fd5b5061026b610913565b604080519115158252519081900360200190f35b34801561028b57600080fd5b506102c8600480360360808110156102a257600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610923565b60408051918252519081900360200190f35b3480156102e657600080fd5b506102ef6110df565b604080516001600160a01b039092168252519081900360200190f35b34801561031757600080fd5b506102c86004803603606081101561032e57600080fd5b506001600160a01b038135811691602081013590911690604001356110ee565b34801561035a57600080fd5b5061010d6004803603602081101561037157600080fd5b503561ffff16611395565b34801561038857600080fd5b506102c86004803603602081101561039f57600080fd5b50356001600160a01b0316611469565b6102c8600480360360c08110156103c557600080fd5b506001600160a01b038135811691602081013582169161ffff6040830135169160608101359091169060808101359060a0013561147b565b34801561040957600080fd5b5061010d6004803603602081101561042057600080fd5b50356001600160a01b0316612074565b34801561043c57600080fd5b506102ef61216d565b61044d61217c565b6001546001600160a01b0390811691161461049d576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6001805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6104c661217c565b6001546001600160a01b03908116911614610516576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6001600160a01b038116610563576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204164647265737360881b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b61058d61217c565b6001546001600160a01b039081169116146105dd576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b4760006105e86110df565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610621573d6000803e3d6000fd5b505050565b61062e61217c565b6001546001600160a01b0390811691161461067e576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6001600160a01b0383166106cb576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204164647265737360881b604482015290519081900360640190fd5b6001600160a01b03831660009081526004602052604090205415610736576040805162461bcd60e51b815260206004820152601960248201527f4572723a205661756c7420416c72656164792045786973747300000000000000604482015290519081900360640190fd5b81816040518083838082843760408051939091018390039092206001600160a01b03909816600090815260046020529190912096909655505050505050565b61077d61217c565b6001546001600160a01b039081169116146107cd576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561081c57600080fd5b505afa158015610830573d6000803e3d6000fd5b505050506040513d602081101561084657600080fd5b5051905061085c826108566110df565b83612180565b5050565b600154600160a81b900461ffff1681565b61087961217c565b6001546001600160a01b039081169116146108c9576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6001546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180546001600160a01b0319169055565b600154600160a01b900460ff1681565b6000836001600160a01b0316856001600160a01b031614156109465750816110d7565b61096585737a250d5630b4cf539739df2c5dacb4c659f2488d856122ea565b6001600160a01b03851673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214610e56576001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214610c19576040805160038082526080820190925260609160208201838036833701905050905085816000815181106109dd57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110610a1f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508481600281518110610a4d57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398560018430600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610b0a578181015183820152602001610af2565b505050509050019650505050505050600060405180830381600087803b158015610b3357600080fd5b505af1158015610b47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610b7057600080fd5b8101908080516040519392919084600160201b821115610b8f57600080fd5b908301906020820185811115610ba457600080fd5b82518660208202830111600160201b82111715610bc057600080fd5b82525081516020918201928201910280838360005b83811015610bed578181015183820152602001610bd5565b50505050905001604052505050600182510381518110610c0957fe5b6020026020010151915050610e51565b60408051600280825260608083018452926020830190803683370190505090508581600081518110610c4757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110610c8957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398560018430600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610d46578181015183820152602001610d2e565b505050509050019650505050505050600060405180830381600087803b158015610d6f57600080fd5b505af1158015610d83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610dac57600080fd5b8101908080516040519392919084600160201b821115610dcb57600080fd5b908301906020820185811115610de057600080fd5b82518660208202830111600160201b82111715610dfc57600080fd5b82525081516020918201928201910280838360005b83811015610e29578181015183820152602001610e11565b50505050905001604052505050600182510381518110610e4557fe5b60200260200101519150505b61108e565b604080516002808252606080830184529260208301908036833701905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110610e9857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508481600181518110610ec657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398560018430600f60fc1b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610f83578181015183820152602001610f6b565b505050509050019650505050505050600060405180830381600087803b158015610fac57600080fd5b505af1158015610fc0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610fe957600080fd5b8101908080516040519392919084600160201b82111561100857600080fd5b90830190602082018581111561101d57600080fd5b82518660208202830111600160201b8211171561103957600080fd5b82525081516020918201928201910280838360005b8381101561106657818101518382015260200161104e565b5050505090500160405250505060018251038151811061108257fe5b60200260200101519150505b8181116110d7576040805162461bcd60e51b81526020600482015260126024820152714552523a204869676820536c69707061676560701b604482015290519081900360640190fd5b949350505050565b6001546001600160a01b031690565b600060026000541415611148576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055600154600160a01b900460ff16156111a1576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60008390506000816001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e157600080fd5b505afa1580156111f5573d6000803e3d6000fd5b505050506040513d602081101561120b57600080fd5b5051905061121b8233308761244d565b816001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561126157600080fd5b505af1158015611275573d6000803e3d6000fd5b505050506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112c857600080fd5b505afa1580156112dc573d6000803e3d6000fd5b505050506040513d60208110156112f257600080fd5b50519050600061130283836125aa565b905061131883896113138585612606565b612180565b7fccd66be260e4d251757c46211a144a9df723fe5d98726e537a900b7115b0e74d8888856113468686612606565b604080516001600160a01b03958616815293851660208501529190931682820152606082019290925290519081900360800190a16113848282612606565b600160005598975050505050505050565b61139d61217c565b6001546001600160a01b039081169116146113ed576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6127108161ffff1610611447576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6001805461ffff909216600160a81b0261ffff60a81b19909216919091179055565b60046020526000908152604090205481565b6000600260005414156114d5576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055600154600160a01b900460ff161561152e576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6001600160a01b038616600090815260046020526040902054611591576040805162461bcd60e51b81526020600482015260166024820152751154948e88155b9cdd5c1c1bdc9d19590815985d5b1d60521b604482015290519081900360640190fd5b60008690506000816001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115d157600080fd5b505afa1580156115e5573d6000803e3d6000fd5b505050506040513d60208110156115fb57600080fd5b505190506001600160a01b03861661165a5760003411611655576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b611704565b600085116116a5576040805162461bcd60e51b8152602060048201526013602482015272115c9c8e88139bc8151bdad95b9cc814d95b9d606a1b604482015290519081900360640190fd5b34156116f8576040805162461bcd60e51b815260206004820152601860248201527f4552523a204554482073656e74207769746820546f6b656e0000000000000000604482015290519081900360640190fd5b6117048633308861244d565b8661ffff16600214156119ca5760006001600160a01b0387166117c25760025460035460408051632d4242f760e21b8152306004820152600060248201526001600160a01b0392831660448201523460648201819052608482018a90529151929093169263b5090bdc9260a480830192602092919082900301818588803b15801561178e57600080fd5b505af11580156117a2573d6000803e3d6000fd5b50505050506040513d60208110156117b957600080fd5b505190506118e1565b6002546040805163095ea7b360e01b81526001600160a01b0392831660048201526024810189905290519189169163095ea7b3916044808201926020929091908290030181600087803b15801561181857600080fd5b505af115801561182c573d6000803e3d6000fd5b505050506040513d602081101561184257600080fd5b505060025460035460408051632d4242f760e21b81523060048201526001600160a01b038b811660248301529283166044820152606481018a9052608481018990529051919092169163b5090bdc9160a48083019260209291908290030181600087803b1580156118b257600080fd5b505af11580156118c6573d6000803e3d6000fd5b505050506040513d60208110156118dc57600080fd5b505190505b816001600160a01b031663095ea7b384836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b505050506040513d602081101561196257600080fd5b50506040805163b6b55f2560e01b81526004810183905290516001600160a01b0385169163b6b55f2591602480830192600092919082900301818387803b1580156119ac57600080fd5b505af11580156119c0573d6000803e3d6000fd5b5050505050611ed4565b8661ffff1660011415611dbf576000816001600160a01b03166389d1a0fc6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611a1457600080fd5b505af1158015611a28573d6000803e3d6000fd5b505050506040513d6020811015611a3e57600080fd5b5051905060006001600160a01b038816611a6357611a5c828761264f565b9050611a72565b611a6f88838989610923565b90505b816001600160a01b031663095ea7b37324a42fd28c976a61df5d00d0599c34c4f90748c86001600160a01b031663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015611ace57600080fd5b505afa158015611ae2573d6000803e3d6000fd5b505050506040513d6020811015611af857600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482018590525160448083019260209291908290030181600087803b158015611b4857600080fd5b505af1158015611b5c573d6000803e3d6000fd5b505050506040513d6020811015611b7257600080fd5b505060408051630261bf8b60e01b815290517324a42fd28c976a61df5d00d0599c34c4f90748c891630261bf8b916004808301926020929190829003018186803b158015611bbf57600080fd5b505afa158015611bd3573d6000803e3d6000fd5b505050506040513d6020811015611be957600080fd5b505160408051636968703360e11b81526001600160a01b03858116600483015260248201859052600060448301819052925193169263d2d0e0669260648084019391929182900301818387803b158015611c4257600080fd5b505af1158015611c56573d6000803e3d6000fd5b505050506000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ca957600080fd5b505afa158015611cbd573d6000803e3d6000fd5b505050506040513d6020811015611cd357600080fd5b50516040805163095ea7b360e01b81526001600160a01b0388811660048301526024820184905291519293509086169163095ea7b3916044808201926020929091908290030181600087803b158015611d2b57600080fd5b505af1158015611d3f573d6000803e3d6000fd5b505050506040513d6020811015611d5557600080fd5b50506040805163b6b55f2560e01b81526004810183905290516001600160a01b0387169163b6b55f2591602480830192600092919082900301818387803b158015611d9f57600080fd5b505af1158015611db3573d6000803e3d6000fd5b50505050505050611ed4565b60006001600160a01b038716611de057611dd9828661264f565b9050611def565b611dec87838888610923565b90505b816001600160a01b031663095ea7b384836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e4657600080fd5b505af1158015611e5a573d6000803e3d6000fd5b505050506040513d6020811015611e7057600080fd5b50506040805163b6b55f2560e01b81526004810183905290516001600160a01b0385169163b6b55f2591602480830192600092919082900301818387803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b50505050505b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611f2357600080fd5b505afa158015611f37573d6000803e3d6000fd5b505050506040513d6020811015611f4d57600080fd5b505190506000611f7173e737b6afec2320f616297e59445b60a11e3ef75f836125aa565b90506001600160a01b03841663a9059cbb8c611f8d8585612606565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611fd357600080fd5b505af1158015611fe7573d6000803e3d6000fd5b505050506040513d6020811015611ffd57600080fd5b507f7c58760c09b45377b9759b1584bfa97aaad8a040feb4ec965b2b76e20b4af07f90508b8561202d8585612606565b604080516001600160a01b0394851681529290931660208301528183015290519081900360600190a16120608282612606565b60016000559b9a5050505050505050505050565b61207c61217c565b6001546001600160a01b039081169116146120cc576040805162461bcd60e51b81526020600482018190526024820152600080516020612b22833981519152604482015290519081900360640190fd5b6001600160a01b0381166121115760405162461bcd60e51b8152600401808060200182810382526026815260200180612adb6026913960400191505060405180910390fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b3390565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106121fd5780518252601f1990920191602091820191016121de565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461225f576040519150601f19603f3d011682016040523d82523d6000602084013e612264565b606091505b5091509150818015612292575080511580612292575080806020019051602081101561228f57600080fd5b50515b6122e3576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b178152925182516000946060949389169392918291908083835b602083106123675780518252601f199092019160209182019101612348565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146123c9576040519150601f19603f3d011682016040523d82523d6000602084013e6123ce565b606091505b50915091508180156123fc5750805115806123fc57508080602001905160208110156123f957600080fd5b50515b6122e3576040805162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015290519081900360640190fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106124d25780518252601f1990920191602091820191016124b3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612534576040519150601f19603f3d011682016040523d82523d6000602084013e612539565b606091505b5091509150818015612567575080511580612567575080806020019051602081101561256457600080fd5b50515b6125a25760405162461bcd60e51b8152600401808060200182810382526024815260200180612b426024913960400191505060405180910390fd5b505050505050565b6001546000906125d2906125ca908490600160a81b900461ffff16612943565b61271061299c565b9050806125e157506000612600565b6126008373e737b6afec2320f616297e59445b60a11e3ef75f83612180565b92915050565b600061264883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129de565b9392505050565b60006001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214156126c3576040805162461bcd60e51b815260206004820152601860248201527f4552523a20496e76616c6964205377617020746f204554480000000000000000604482015290519081900360640190fd5b604080516002808252606080830184529260208301908036833701905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160008151811061270557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050838160018151811061273357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316637ff36ab53460018430600f60fc1b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156127ea5781810151838201526020016127d2565b50505050905001955050505050506000604051808303818588803b15801561281157600080fd5b505af1158015612825573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052602081101561284f57600080fd5b8101908080516040519392919084600160201b82111561286e57600080fd5b90830190602082018581111561288357600080fd5b82518660208202830111600160201b8211171561289f57600080fd5b82525081516020918201928201910280838360005b838110156128cc5781810151838201526020016128b4565b505050509050016040525050506001825103815181106128e857fe5b602002602001015191508282101561293c576040805162461bcd60e51b81526020600482015260126024820152714552523a204869676820536c69707061676560701b604482015290519081900360640190fd5b5092915050565b60008261295257506000612600565b8282028284828161295f57fe5b04146126485760405162461bcd60e51b8152600401808060200182810382526021815260200180612b016021913960400191505060405180910390fd5b600061264883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a75565b60008184841115612a6d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a32578181015183820152602001612a1a565b50505050905090810190601f168015612a5f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183612ac45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612a32578181015183820152602001612a1a565b506000838581612ad057fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212203f98c5e4bb252f13bf4f857be315bd524a9dfcfe7b86ac30ff687921eb41bcf164736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _goodwill (uint16): 0
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
27597:14480:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41726:86;;;;;;;;;;;;;:::i;:::-;;30249:260;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30249:260:0;-1:-1:-1;;;;;30249:260:0;;:::i;41882:192::-;;;;;;;;;;;;;:::i;30517:385::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30517:385:0;;;;;;;;;;;;;;;-1:-1:-1;;;30517:385:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30517:385:0;;;;;;;;;;-1:-1:-1;30517:385:0;;-1:-1:-1;30517:385:0;-1:-1:-1;30517:385:0;:::i;41470:216::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41470:216:0;-1:-1:-1;;;;;41470:216:0;;:::i;27767:22::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22497:148;;;;;;;;;;;;;:::i;27733:27::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;38405:2014;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38405:2014:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21855:79;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;21855:79:0;;;;;;;;;;;;;;35896:1214;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35896:1214:0;;;;;;;;;;;;;;;;;:::i;41224:238::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41224:238:0;;;;:::i;28931:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28931:50:0;-1:-1:-1;;;;;28931:50:0;;:::i;31385:4503::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31385:4503:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22800:281::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22800:281:0;-1:-1:-1;;;;;22800:281:0;;:::i;28087:124::-;;;;;;;;;;;;;:::i;41726:86::-;22077:12;:10;:12::i;:::-;22067:6;;-1:-1:-1;;;;;22067:6:0;;;:22;;;22059:67;;;;;-1:-1:-1;;;22059:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22059:67:0;;;;;;;;;;;;;;;41797:7:::1;::::0;;-1:-1:-1;;;;41786:18:0;::::1;-1:-1:-1::0;;;41797:7:0;;;::::1;;;41796:8;41786:18:::0;;::::1;;::::0;;41726:86::o;30249:260::-;22077:12;:10;:12::i;:::-;22067:6;;-1:-1:-1;;;;;22067:6:0;;;:22;;;22059:67;;;;;-1:-1:-1;;;22059:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22059:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30368:38:0;::::1;30360:66;;;::::0;;-1:-1:-1;;;30360:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30360:66:0;;;;;;;;;;;;;::::1;;30437:17;:64:::0;;-1:-1:-1;;;;;;30437:64:0::1;-1:-1:-1::0;;;;;30437:64:0;;;::::1;::::0;;;::::1;::::0;;30249:260::o;41882:192::-;22077:12;:10;:12::i;:::-;22067:6;;-1:-1:-1;;;;;22067:6:0;;;:22;;;22059:67;;;;;-1:-1:-1;;;22059:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22059:67:0;;;;;;;;;;;;;;;41956:21:::1;41930:23;42018:7;:5;:7::i;:::-;42037:29;::::0;41988:38;;-1:-1:-1;;;;;;42037:12:0;::::1;::::0;:29;::::1;;;::::0;42050:15;;42037:29:::1;::::0;;;42050:15;42037:12;:29;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22137:1;;41882:192::o:0;30517:385::-;22077:12;:10;:12::i;:::-;22067:6;;-1:-1:-1;;;;;22067:6:0;;;:22;;;22059:67;;;;;-1:-1:-1;;;22059:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22059:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30651:27:0;::::1;30643:55;;;::::0;;-1:-1:-1;;;30643:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30643:55:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;30731:30:0;::::1;;::::0;;;:15:::1;:30;::::0;;;;;:36;30709:111:::1;;;::::0;;-1:-1:-1;;;30709:111:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30882:10;;30866:28;;;;;;;;;;::::0;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;30833:30:0;;::::1;;::::0;;;:15:::1;:30;::::0;;;;;:61;;;;-1:-1:-1;;;;;;30517:385:0:o;41470:216::-;22077:12;:10;:12::i;:::-;22067:6;;-1:-1:-1;;;;;22067:6:0;;;:22;;;22059:67;;;;;-1:-1:-1;;;22059:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22059:67:0;;;;;;;;;;;;;;;41550:11:::1;41564:13;-1:-1:-1::0;;;;;41564:23:0::1;;41596:4;41564:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;41564:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;41564:38:0;;-1:-1:-1;41613:65:0::1;41649:13:::0;41665:7:::1;:5;:7::i;:::-;41674:3;41613:27;:65::i;:::-;22137:1;41470:216:::0;:::o;27767:22::-;;;-1:-1:-1;;;27767:22:0;;;;;:::o;22497:148::-;22077:12;:10;:12::i;:::-;22067:6;;-1:-1:-1;;;;;22067:6:0;;;:22;;;22059:67;;;;;-1:-1:-1;;;22059:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22059:67:0;;;;;;;;;;;;;;;22588:6:::1;::::0;22567:40:::1;::::0;22604:1:::1;::::0;-1:-1:-1;;;;;22588:6:0::1;::::0;22567:40:::1;::::0;22604:1;;22567:40:::1;22618:6;:19:::0;;-1:-1:-1;;;;;;22618:19:0::1;::::0;;22497:148::o;27733:27::-;;;-1:-1:-1;;;27733:27:0;;;;;:::o;38405:2014::-;38595:19;38660:23;-1:-1:-1;;;;;38631:52:0;:25;-1:-1:-1;;;;;38631:52:0;;38627:104;;;-1:-1:-1;38707:12:0;38700:19;;38627:104;38743:141;38784:25;28029:42;38861:12;38743:26;:141::i;:::-;-1:-1:-1;;;;;38901:45:0;;28658:42;38901:45;38897:1448;;-1:-1:-1;;;;;38967:43:0;;28658:42;38967:43;38963:977;;39055:16;;;39069:1;39055:16;;;;;;;;;39031:21;;39055:16;;;39031:21;;39055:16;;;;;-1:-1:-1;39055:16:0;39031:40;;39100:25;39090:4;39095:1;39090:7;;;;;;;;;;;;;:35;-1:-1:-1;;;;;39090:35:0;;;-1:-1:-1;;;;;39090:35:0;;;;;28658:42;39144:4;39149:1;39144:7;;;;;;;;;;;;;:26;-1:-1:-1;;;;;39144:26:0;;;-1:-1:-1;;;;;39144:26:0;;;;;39199:23;39189:4;39194:1;39189:7;;;;;;;;;;;;;:33;-1:-1:-1;;;;;39189:33:0;;;-1:-1:-1;;;;;39189:33:0;;;;;28029:42;-1:-1:-1;;;;;39255:38:0;;39316:12;39351:1;39375:4;39410;-1:-1:-1;;;39255:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39255:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39255:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39255:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39255:210:0;;;;;;;;;;;;-1:-1:-1;39255:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39480:1;39466:4;:11;:15;39255:227;;;;;;;;;;;;;;39241:241;;38963:977;;;;39547:16;;;39561:1;39547:16;;;39523:21;39547:16;;;;;39523:21;39547:16;;;;;;;;;;-1:-1:-1;39547:16:0;39523:40;;39592:25;39582:4;39587:1;39582:7;;;;;;;;;;;;;:35;-1:-1:-1;;;;;39582:35:0;;;-1:-1:-1;;;;;39582:35:0;;;;;28658:42;39636:4;39641:1;39636:7;;;;;;;;;;;;;:26;-1:-1:-1;;;;;39636:26:0;;;-1:-1:-1;;;;;39636:26:0;;;;;28029:42;-1:-1:-1;;;;;39697:38:0;;39758:12;39793:1;39817:4;39852;-1:-1:-1;;;39697:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39697:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39697:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39697:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39697:210:0;;;;;;;;;;;;-1:-1:-1;39697:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39922:1;39908:4;:11;:15;39697:227;;;;;;;;;;;;;;39683:241;;38963:977;;38897:1448;;;39996:16;;;40010:1;39996:16;;;39972:21;39996:16;;;;;39972:21;39996:16;;;;;;;;;;-1:-1:-1;39996:16:0;39972:40;;28658:42;40027:4;40032:1;40027:7;;;;;;;;;;;;;:26;-1:-1:-1;;;;;40027:26:0;;;-1:-1:-1;;;;;40027:26:0;;;;;40078:23;40068:4;40073:1;40068:7;;;;;;;;;;;;;:33;-1:-1:-1;;;;;40068:33:0;;;-1:-1:-1;;;;;40068:33:0;;;;;28029:42;-1:-1:-1;;;;;40130:38:0;;40187:12;40218:1;40238:4;40269;-1:-1:-1;;;40130:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40130:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40130:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40130:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40130:186:0;;;;;;;;;;;;-1:-1:-1;40130:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40331:1;40317:4;:11;:15;40130:203;;;;;;;;;;;;;;40116:217;;38897:1448;;40379:9;40365:11;:23;40357:54;;;;;-1:-1:-1;;;40357:54:0;;;;;;;;;;;;-1:-1:-1;;;40357:54:0;;;;;;;;;;;;;;;38405:2014;;;;;;:::o;21855:79::-;21920:6;;-1:-1:-1;;;;;21920:6:0;21855:79;:::o;35896:1214::-;36072:7;9216:1;9821:7;;:19;;9813:63;;;;;-1:-1:-1;;;9813:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9216:1;9954:7;:18;30136:7:::1;::::0;-1:-1:-1;;;30136:7:0;::::1;;;30132:102;;;30160:28;::::0;;-1:-1:-1;;;30160:28:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30160:28:0;;;;;;;;;;;;;::::1;30132:102;36092:18:::2;36120;36092:47;;36150:28;36181:11;-1:-1:-1::0;;;;;36181:17:0::2;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;36181:19:0;;-1:-1:-1;36213:152:0::2;36267:11:::0;36294:10:::2;36327:4;36347:7:::0;36213:31:::2;:152::i;:::-;36378:11;-1:-1:-1::0;;;;;36378:20:0::2;;36399:7;36378:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;36418:26;36454:20;-1:-1:-1::0;;;;;36447:38:0::2;;36508:4;36447:77;;;;;;;;;;;;;-1:-1:-1::0;;;;;36447:77:0::2;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;36447:77:0;;-1:-1:-1;36566:23:0::2;36592:96;36624:20:::0;36447:77;36592:17:::2;:96::i;:::-;36566:122:::0;-1:-1:-1;36701:156:0::2;36743:20:::0;36778:14;36807:39:::2;:18:::0;36566:122;36807:22:::2;:39::i;:::-;36701:27;:156::i;:::-;36875:168;36896:14:::0;36925:18;36958:20;36993:39:::2;:18:::0;37016:15;36993:22:::2;:39::i;:::-;36875:168;::::0;;-1:-1:-1;;;;;36875:168:0;;::::2;::::0;;;;::::2;;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;;;;;;;;::::2;37062:39;:18:::0;37085:15;37062:22:::2;:39::i;:::-;9172:1:::0;10133:7;:22;37054:48;35896:1214;-1:-1:-1;;;;;;;;35896:1214:0:o;41224:238::-;22077:12;:10;:12::i;:::-;22067:6;;-1:-1:-1;;;;;22067:6:0;;;:22;;;22059:67;;;;;-1:-1:-1;;;22059:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22059:67:0;;;;;;;;;;;;;;;41360:5:::1;41344:13;:21;;;41300:119;;;::::0;;-1:-1:-1;;;41300:119:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;41430:8;:24:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;41430:24:0::1;-1:-1:-1::0;;;;41430:24:0;;::::1;::::0;;;::::1;::::0;;41224:238::o;28931:50::-;;;;;;;;;;;;;:::o;31385:4503::-;31654:7;9216:1;9821:7;;:19;;9813:63;;;;;-1:-1:-1;;;9813:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9216:1;9954:7;:18;30136:7:::1;::::0;-1:-1:-1;;;30136:7:0;::::1;;;30132:102;;;30160:28;::::0;;-1:-1:-1;;;30160:28:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30160:28:0;;;;;;;;;;;;;::::1;30132:102;-1:-1:-1::0;;;;;31696:33:0;::::2;;::::0;;;:15:::2;:33;::::0;;;;;31674:111:::2;;;::::0;;-1:-1:-1;;;31674:111:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;31674:111:0;;;;;;;;;;;;;::::2;;31798:19;31827:16;31798:46;;31855:28;31886:12;-1:-1:-1::0;;;;;31886:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;31886:20:0;;-1:-1:-1;;;;;;31923:31:0;::::2;31919:434;;31991:1;31979:9;:13;31971:42;;;::::0;;-1:-1:-1;;;31971:42:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;31971:42:0;;;;;;;;;;;;;::::2;;31919:434;;;32064:1;32054:7;:11;32046:43;;;::::0;;-1:-1:-1;;;32046:43:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;32046:43:0;;;;;;;;;;;;;::::2;;32112:9;:14:::0;32104:51:::2;;;::::0;;-1:-1:-1;;;32104:51:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;32172:169;32222:17;32258:10;32295:4;32319:7;32172:31;:169::i;:::-;32369:10;:15;;32383:1;32369:15;32365:2917;;;32401:20;-1:-1:-1::0;;;;;32440:31:0;::::2;32436:770;;32507:17;::::0;32640:21:::2;::::0;32507:245:::2;::::0;;-1:-1:-1;;;32507:245:0;;32579:4:::2;32507:245;::::0;::::2;::::0;:17:::2;:245:::0;;;;-1:-1:-1;;;;;32640:21:0;;::::2;32507:245:::0;;;;32538:9:::2;32507:245:::0;;;;;;;;;;;;;;:17;;;::::2;::::0;:23:::2;::::0;:245;;;;;::::2;::::0;;;;;;;;32538:9;32507:17;:245;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;32507:245:0;;-1:-1:-1;32436:770:0::2;;;32857:17;::::0;32793:131:::2;::::0;;-1:-1:-1;;;32793:131:0;;-1:-1:-1;;;;;32857:17:0;;::::2;32793:131;::::0;::::2;::::0;;;;;;;;;:33;;::::2;::::0;::::2;::::0;:131;;;;;::::2;::::0;;;;;;;;;32857:17:::2;32793:33:::0;:131;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;32958:17:0::2;::::0;33080:21:::2;::::0;32958:232:::2;::::0;;-1:-1:-1;;;32958:232:0;;33012:4:::2;32958:232;::::0;::::2;::::0;-1:-1:-1;;;;;32958:232:0;;::::2;::::0;;;;33080:21;;::::2;32958:232:::0;;;;;;;;;;;;;;;;;;:17;;;::::2;::::0;:23:::2;::::0;:232;;;;;32793:131:::2;::::0;32958:232;;;;;;;:17:::2;::::0;:232;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;32958:232:0;;-1:-1:-1;32436:770:0::2;33229:20;-1:-1:-1::0;;;;;33222:36:0::2;;33285:12;33317;33222:122;;;;;;;;;;;;;-1:-1:-1::0;;;;;33222:122:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;33359:34:0::2;::::0;;-1:-1:-1;;;33359:34:0;;::::2;::::0;::::2;::::0;;;;;-1:-1:-1;;;;;33359:20:0;::::2;::::0;::::2;::::0;:34;;;;;-1:-1:-1;;33359:34:0;;;;;;;-1:-1:-1;33359:20:0;:34;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;32365:2917;;;;33415:10;:15;;33429:1;33415:15;33411:1871;;;33447:23;33481:20;-1:-1:-1::0;;;;;33473:70:0::2;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;33473:72:0;;-1:-1:-1;33562:20:0::2;-1:-1:-1::0;;;;;33601:31:0;::::2;33597:368;;33668:46;33679:15;33696:17;33668:10;:46::i;:::-;33653:61;;33597:368;;;33770:179;33805:17;33845:15;33883:7;33913:17;33770:12;:179::i;:::-;33755:194;;33597:368;33988:15;-1:-1:-1::0;;;;;33981:31:0::2;;28351:42;-1:-1:-1::0;;;;;34031:45:0::2;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;34031:47:0;33981:143:::2;::::0;;-1:-1:-1;;;;;;33981:143:0::2;::::0;;;;;;-1:-1:-1;;;;;33981:143:0;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;34031:47:::2;::::0;33981:143;;;;;;;-1:-1:-1;33981:143:0;;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;34158:43:0::2;::::0;;-1:-1:-1;;;34158:43:0;;;;28351:42:::2;::::0;34158:41:::2;::::0;:43:::2;::::0;;::::2;::::0;33981:143:::2;::::0;34158:43;;;;;;;28351:42;34158:43;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;34158:43:0;34141:121:::2;::::0;;-1:-1:-1;;;34141:121:0;;-1:-1:-1;;;;;34141:121:0;;::::2;;::::0;::::2;::::0;;;;;;;34260:1:::2;34141:121:::0;;;;;;;;:87;::::2;::::0;::::2;::::0;:121;;;;;34260:1;;34141:121;;;;;;34260:1;34141:87;:121;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;34279:21;34310:20;-1:-1:-1::0;;;;;34303:38:0::2;;34368:4;34303:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;34303:85:0::2;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;34303:85:0;34403:123:::2;::::0;;-1:-1:-1;;;34403:123:0;;-1:-1:-1;;;;;34403:123:0;;::::2;;::::0;::::2;::::0;;;;;;;;;34303:85;;-1:-1:-1;34403:36:0;;::::2;::::0;::::2;::::0;:123;;;;;34303:85:::2;::::0;34403:123;;;;;;;;-1:-1:-1;34403:36:0;:123;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;34541:35:0::2;::::0;;-1:-1:-1;;;34541:35:0;;::::2;::::0;::::2;::::0;;;;;-1:-1:-1;;;;;34541:20:0;::::2;::::0;::::2;::::0;:35;;;;;-1:-1:-1;;34541:35:0;;;;;;;-1:-1:-1;34541:20:0;:35;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;33411:1871;;;;;;34609:20;-1:-1:-1::0;;;;;34648:31:0;::::2;34644:439;;34715:112;34748:20;34791:17;34715:10;:112::i;:::-;34700:127;;34644:439;;;34883:184;34918:17;34958:20;35001:7;35031:17;34883:12;:184::i;:::-;34868:199;;34644:439;35106:20;-1:-1:-1::0;;;;;35099:36:0::2;;35162:12;35194;35099:122;;;;;;;;;;;;;-1:-1:-1::0;;;;;35099:122:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;35236:34:0::2;::::0;;-1:-1:-1;;;35236:34:0;;::::2;::::0;::::2;::::0;;;;;-1:-1:-1;;;;;35236:20:0;::::2;::::0;::::2;::::0;:34;;;;;-1:-1:-1;;35236:34:0;;;;;;;-1:-1:-1;35236:20:0;:34;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;33411:1871;;35294:18;35330:12;-1:-1:-1::0;;;;;35315:39:0::2;;35377:4;35315:78;;;;;;;;;;;;;-1:-1:-1::0;;;;;35315:78:0::2;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;35315:78:0;;-1:-1:-1;35435:23:0::2;35461:84;28760:42;35315:78:::0;35461:17:::2;:84::i;:::-;35435:110:::0;-1:-1:-1;;;;;;35558:38:0;::::2;;35611:14:::0;35640:31:::2;:10:::0;35435:110;35640:14:::2;:31::i;:::-;35558:124;;;;;;;;;;;;;-1:-1:-1::0;;;;;35558:124:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;35700:127:0::2;::::0;-1:-1:-1;35720:14:0;35757:12;35785:31:::2;:10:::0;35800:15;35785:14:::2;:31::i;:::-;35700:127;::::0;;-1:-1:-1;;;;;35700:127:0;;::::2;::::0;;;;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;::::2;35848:31;:10:::0;35863:15;35848:14:::2;:31::i;:::-;9172:1:::0;10133:7;:22;35840:40;31385:4503;-1:-1:-1;;;;;;;;;;;31385:4503:0:o;22800:281::-;22077:12;:10;:12::i;:::-;22067:6;;-1:-1:-1;;;;;22067:6:0;;;:22;;;22059:67;;;;;-1:-1:-1;;;22059:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22059:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22903:22:0;::::1;22881:110;;;;-1:-1:-1::0;;;22881:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23028:6;::::0;23007:38:::1;::::0;-1:-1:-1;;;;;23007:38:0;;::::1;::::0;23028:6:::1;::::0;23007:38:::1;::::0;23028:6:::1;::::0;23007:38:::1;23056:6;:17:::0;;-1:-1:-1;;;;;;23056:17:0::1;-1:-1:-1::0;;;;;23056:17:0;;;::::1;::::0;;;::::1;::::0;;22800:281::o;28087:124::-;;;-1:-1:-1;;;;;28087:124:0;;:::o;20334:106::-;20422:10;20334:106;:::o;23652:459::-;23898:45;;;-1:-1:-1;;;;;23898:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23898:45:0;-1:-1:-1;;;23898:45:0;;;23873:81;;;;23838:12;;23852:17;;23873:10;;;;23898:45;23873:81;;;23898:45;23873:81;;23898:45;23873:81;;;;;;;;;;-1:-1:-1;;23873:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23837:117;;;;23987:7;:57;;;;-1:-1:-1;23999:11:0;;:16;;:44;;;24030:4;24019:24;;;;;;;;;;;;;;;-1:-1:-1;24019:24:0;23999:44;23965:138;;;;;-1:-1:-1;;;23965:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23652:459;;;;;:::o;23188:456::-;23432:45;;;-1:-1:-1;;;;;23432:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23432:45:0;-1:-1:-1;;;23432:45:0;;;23407:81;;;;23372:12;;23386:17;;23407:10;;;;23432:45;23407:81;;;23432:45;23407:81;;23432:45;23407:81;;;;;;;;;;-1:-1:-1;;23407:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23371:117;;;;23521:7;:57;;;;-1:-1:-1;23533:11:0;;:16;;:44;;;23564:4;23553:24;;;;;;;;;;;;;;;-1:-1:-1;23553:24:0;23533:44;23499:137;;;;;-1:-1:-1;;;23499:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;24119:509;24404:51;;;-1:-1:-1;;;;;24404:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24404:51:0;-1:-1:-1;;;24404:51:0;;;24379:87;;;;24344:12;;24358:17;;24379:10;;;;24404:51;24379:87;;;24404:51;24379:87;;24404:51;24379:87;;;;;;;;;;-1:-1:-1;;24379:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24343:123;;;;24499:7;:57;;;;-1:-1:-1;24511:11:0;;:16;;:44;;;24542:4;24531:24;;;;;;;;;;;;;;;-1:-1:-1;24531:24:0;24511:44;24477:143;;;;-1:-1:-1;;;24477:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24119:509;;;;;;:::o;40716:500::-;40947:8;;40839:23;;40893:94;;40920:36;;40933:12;;-1:-1:-1;;;40947:8:0;;;;40920:12;:36::i;:::-;40971:5;40893:12;:94::i;:::-;40875:112;-1:-1:-1;41004:20:0;41000:61;;-1:-1:-1;41048:1:0;41041:8;;41000:61;41073:135;41115:21;28760:42;41182:15;41073:27;:135::i;:::-;40716:500;;;;:::o;3334:136::-;3392:7;3419:43;3423:1;3426;3419:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3412:50;3334:136;-1:-1:-1;;;3334:136:0:o;37373:659::-;37479:20;-1:-1:-1;;;;;37539:41:0;;28658:42;37539:41;;37517:115;;;;;-1:-1:-1;;;37517:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37669:16;;;37683:1;37669:16;;;37645:21;37669:16;;;;;37645:21;37669:16;;;;;;;;;;-1:-1:-1;37669:16:0;37645:40;;28658:42;37696:4;37701:1;37696:7;;;;;;;;;;;;;:26;-1:-1:-1;;;;;37696:26:0;;;-1:-1:-1;;;;;37696:26:0;;;;;37743:21;37733:4;37738:1;37733:7;;;;;;;;;;;;;:31;-1:-1:-1;;;;;37733:31:0;;;-1:-1:-1;;;;;37733:31:0;;;;;28029:42;-1:-1:-1;;;;;37790:35:0;;37833:9;37858:1;37874:4;37901;-1:-1:-1;;;37790:150:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37790:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37790:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37790:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37790:150:0;;;;;;;;;;;;-1:-1:-1;37790:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37955:1;37941:4;:11;:15;37790:167;;;;;;;;;;;;;;37775:182;;37992:9;37976:12;:25;;37968:56;;;;;-1:-1:-1;;;37968:56:0;;;;;;;;;;;;-1:-1:-1;;;37968:56:0;;;;;;;;;;;;;;;37373:659;;;;;:::o;4258:471::-;4316:7;4561:6;4557:47;;-1:-1:-1;4591:1:0;4584:8;;4557:47;4628:5;;;4632:1;4628;:5;:1;4652:5;;;;;:10;4644:56;;;;-1:-1:-1;;;4644:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5205:132;5263:7;5290:39;5294:1;5297;5290:39;;;;;;;;;;;;;;;;;:3;:39::i;3773:226::-;3893:7;3929:12;3921:6;;;;3913:29;;;;-1:-1:-1;;;3913:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3965:5:0;;;3773:226::o;5833:312::-;5953:7;5988:12;5981:5;5973:28;;;;-1:-1:-1;;;5973:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6012:9;6028:1;6024;:5;;;;;;;5833:312;-1:-1:-1;;;;;5833:312:0:o
Swarm Source
ipfs://3f98c5e4bb252f13bf4f857be315bd524a9dfcfe7b86ac30ff687921eb41bcf1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.