Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,440 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Migrate Single | 18519660 | 439 days ago | IN | 0 ETH | 0.00212976 | ||||
Peg Out | 18514010 | 440 days ago | IN | 0 ETH | 0.00211397 | ||||
Peg Out | 18499869 | 442 days ago | IN | 0 ETH | 0.00169974 | ||||
Peg Out | 18488542 | 443 days ago | IN | 0 ETH | 0.0016062 | ||||
Peg Out | 18466630 | 446 days ago | IN | 0 ETH | 0.0016062 | ||||
Peg Out | 18416657 | 453 days ago | IN | 0 ETH | 0.0016062 | ||||
Peg Out | 18414119 | 454 days ago | IN | 0 ETH | 0.00227282 | ||||
Peg Out | 18410827 | 454 days ago | IN | 0 ETH | 0.00160584 | ||||
Peg Out | 18390471 | 457 days ago | IN | 0 ETH | 0.0016062 | ||||
Peg Out | 18362508 | 461 days ago | IN | 0 ETH | 0.0016062 | ||||
Peg Out | 18332200 | 465 days ago | IN | 0 ETH | 0.0016062 | ||||
Peg Out | 18324005 | 466 days ago | IN | 0 ETH | 0.00160584 | ||||
Peg Out | 18313038 | 468 days ago | IN | 0 ETH | 0.00160584 | ||||
Peg Out | 18249391 | 477 days ago | IN | 0 ETH | 0.0016062 | ||||
Peg Out | 18227395 | 480 days ago | IN | 0 ETH | 0.0016062 | ||||
Peg Out | 18213013 | 482 days ago | IN | 0 ETH | 0.0016062 | ||||
Peg Out | 18200068 | 484 days ago | IN | 0 ETH | 0.00160584 | ||||
Peg Out | 18199840 | 484 days ago | IN | 0 ETH | 0.00235224 | ||||
Peg Out | 18164192 | 489 days ago | IN | 0 ETH | 0.00161499 | ||||
Peg In Eth | 18136674 | 493 days ago | IN | 10 ETH | 0.00126181 | ||||
Peg In Eth | 18124177 | 494 days ago | IN | 0.055 ETH | 0.00051106 | ||||
Peg Out | 18123850 | 494 days ago | IN | 0 ETH | 0.00160656 | ||||
Peg Out | 18123823 | 494 days ago | IN | 0 ETH | 0.00160584 | ||||
Peg Out | 18069572 | 502 days ago | IN | 0 ETH | 0.0016062 | ||||
Peg Out | 18005649 | 511 days ago | IN | 0 ETH | 0.00189849 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18514010 | 440 days ago | 0.02497468 ETH | ||||
18514010 | 440 days ago | 0.02497468 ETH | ||||
18499869 | 442 days ago | 0.02499055 ETH | ||||
18499869 | 442 days ago | 0.02499055 ETH | ||||
18488542 | 443 days ago | 0.02501165 ETH | ||||
18488542 | 443 days ago | 0.02501165 ETH | ||||
18466630 | 446 days ago | 0.04792596 ETH | ||||
18466630 | 446 days ago | 0.04792596 ETH | ||||
18416657 | 453 days ago | 0.02498979 ETH | ||||
18416657 | 453 days ago | 0.02498979 ETH | ||||
18414119 | 454 days ago | 0.02545534 ETH | ||||
18414119 | 454 days ago | 0.02545534 ETH | ||||
18410827 | 454 days ago | 0.03133157 ETH | ||||
18410827 | 454 days ago | 0.03133157 ETH | ||||
18390471 | 457 days ago | 0.02515563 ETH | ||||
18390471 | 457 days ago | 0.02515563 ETH | ||||
18362508 | 461 days ago | 0.02526266 ETH | ||||
18362508 | 461 days ago | 0.02526266 ETH | ||||
18332200 | 465 days ago | 0.02546354 ETH | ||||
18332200 | 465 days ago | 0.02546354 ETH | ||||
18324005 | 466 days ago | 0.0253365 ETH | ||||
18324005 | 466 days ago | 0.0253365 ETH | ||||
18313038 | 468 days ago | 0.0358701 ETH | ||||
18313038 | 468 days ago | 0.0358701 ETH | ||||
18249391 | 477 days ago | 0.02535999 ETH |
Loading...
Loading
Contract Name:
Erc20Vault
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-05-05 */ // File: @openzeppelin/contracts/token/ERC777/IERC777.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC777Token standard as defined in the EIP. * * This contract uses the * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 registry standard] to let * token holders and recipients react to token movements by using setting implementers * for the associated interfaces in said registry. See {IERC1820Registry} and * {ERC1820Implementer}. */ interface IERC777 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view returns (string memory); /** * @dev Returns the smallest part of the token that is not divisible. This * means all token operations (creation, movement and destruction) must have * amounts that are a multiple of this number. * * For most token contracts, this value will equal 1. */ function granularity() external view returns (uint256); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by an account (`owner`). */ function balanceOf(address owner) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * If send or receive hooks are registered for the caller and `recipient`, * the corresponding functions will be called with `data` and empty * `operatorData`. See {IERC777Sender} and {IERC777Recipient}. * * Emits a {Sent} event. * * Requirements * * - the caller must have at least `amount` tokens. * - `recipient` cannot be the zero address. * - if `recipient` is a contract, it must implement the {IERC777Recipient} * interface. */ function send(address recipient, uint256 amount, bytes calldata data) external; /** * @dev Destroys `amount` tokens from the caller's account, reducing the * total supply. * * If a send hook is registered for the caller, the corresponding function * will be called with `data` and empty `operatorData`. See {IERC777Sender}. * * Emits a {Burned} event. * * Requirements * * - the caller must have at least `amount` tokens. */ function burn(uint256 amount, bytes calldata data) external; /** * @dev Returns true if an account is an operator of `tokenHolder`. * Operators can send and burn tokens on behalf of their owners. All * accounts are their own operator. * * See {operatorSend} and {operatorBurn}. */ function isOperatorFor(address operator, address tokenHolder) external view returns (bool); /** * @dev Make an account an operator of the caller. * * See {isOperatorFor}. * * Emits an {AuthorizedOperator} event. * * Requirements * * - `operator` cannot be calling address. */ function authorizeOperator(address operator) external; /** * @dev Revoke an account's operator status for the caller. * * See {isOperatorFor} and {defaultOperators}. * * Emits a {RevokedOperator} event. * * Requirements * * - `operator` cannot be calling address. */ function revokeOperator(address operator) external; /** * @dev Returns the list of default operators. These accounts are operators * for all token holders, even if {authorizeOperator} was never called on * them. * * This list is immutable, but individual holders may revoke these via * {revokeOperator}, in which case {isOperatorFor} will return false. */ function defaultOperators() external view returns (address[] memory); /** * @dev Moves `amount` tokens from `sender` to `recipient`. The caller must * be an operator of `sender`. * * If send or receive hooks are registered for `sender` and `recipient`, * the corresponding functions will be called with `data` and * `operatorData`. See {IERC777Sender} and {IERC777Recipient}. * * Emits a {Sent} event. * * Requirements * * - `sender` cannot be the zero address. * - `sender` must have at least `amount` tokens. * - the caller must be an operator for `sender`. * - `recipient` cannot be the zero address. * - if `recipient` is a contract, it must implement the {IERC777Recipient} * interface. */ function operatorSend( address sender, address recipient, uint256 amount, bytes calldata data, bytes calldata operatorData ) external; /** * @dev Destroys `amount` tokens from `account`, reducing the total supply. * The caller must be an operator of `account`. * * If a send hook is registered for `account`, the corresponding function * will be called with `data` and `operatorData`. See {IERC777Sender}. * * Emits a {Burned} event. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. * - the caller must be an operator for `account`. */ function operatorBurn( address account, uint256 amount, bytes calldata data, bytes calldata operatorData ) external; event Sent( address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData ); event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData); event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData); event AuthorizedOperator(address indexed operator, address indexed tokenHolder); event RevokedOperator(address indexed operator, address indexed tokenHolder); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT 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: @openzeppelin/contracts/math/SafeMath.sol // SPDX-License-Identifier: MIT 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: @openzeppelin/contracts/utils/Address.sol // SPDX-License-Identifier: MIT 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: @openzeppelin/contracts/token/ERC20/SafeERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/utils/EnumerableSet.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256` * (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } // File: @openzeppelin/contracts/introspection/IERC1820Registry.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the global ERC1820 Registry, as defined in the * https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register * implementers for interfaces in this registry, as well as query support. * * Implementers may be shared by multiple accounts, and can also implement more * than a single interface for each account. Contracts can implement interfaces * for themselves, but externally-owned accounts (EOA) must delegate this to a * contract. * * {IERC165} interfaces can also be queried via the registry. * * For an in-depth explanation and source code analysis, see the EIP text. */ interface IERC1820Registry { /** * @dev Sets `newManager` as the manager for `account`. A manager of an * account is able to set interface implementers for it. * * By default, each account is its own manager. Passing a value of `0x0` in * `newManager` will reset the manager to this initial state. * * Emits a {ManagerChanged} event. * * Requirements: * * - the caller must be the current manager for `account`. */ function setManager(address account, address newManager) external; /** * @dev Returns the manager for `account`. * * See {setManager}. */ function getManager(address account) external view returns (address); /** * @dev Sets the `implementer` contract as ``account``'s implementer for * `interfaceHash`. * * `account` being the zero address is an alias for the caller's address. * The zero address can also be used in `implementer` to remove an old one. * * See {interfaceHash} to learn how these are created. * * Emits an {InterfaceImplementerSet} event. * * Requirements: * * - the caller must be the current manager for `account`. * - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not * end in 28 zeroes). * - `implementer` must implement {IERC1820Implementer} and return true when * queried for support, unless `implementer` is the caller. See * {IERC1820Implementer-canImplementInterfaceForAddress}. */ function setInterfaceImplementer(address account, bytes32 interfaceHash, address implementer) external; /** * @dev Returns the implementer of `interfaceHash` for `account`. If no such * implementer is registered, returns the zero address. * * If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28 * zeroes), `account` will be queried for support of it. * * `account` being the zero address is an alias for the caller's address. */ function getInterfaceImplementer(address account, bytes32 interfaceHash) external view returns (address); /** * @dev Returns the interface hash for an `interfaceName`, as defined in the * corresponding * https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP]. */ function interfaceHash(string calldata interfaceName) external pure returns (bytes32); /** * @notice Updates the cache with whether the contract implements an ERC165 interface or not. * @param account Address of the contract for which to update the cache. * @param interfaceId ERC165 interface for which to update the cache. */ function updateERC165Cache(address account, bytes4 interfaceId) external; /** * @notice Checks whether a contract implements an ERC165 interface or not. * If the result is not cached a direct lookup on the contract address is performed. * If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling * {updateERC165Cache} with the contract address. * @param account Address of the contract to check. * @param interfaceId ERC165 interface to check. * @return True if `account` implements `interfaceId`, false otherwise. */ function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool); /** * @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache. * @param account Address of the contract to check. * @param interfaceId ERC165 interface to check. * @return True if `account` implements `interfaceId`, false otherwise. */ function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool); event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer); event ManagerChanged(address indexed account, address indexed newManager); } // File: @openzeppelin/contracts/token/ERC777/IERC777Recipient.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC777TokensRecipient standard as defined in the EIP. * * Accounts can be notified of {IERC777} tokens being sent to them by having a * contract implement this interface (contract holders can be their own * implementer) and registering it on the * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry]. * * See {IERC1820Registry} and {ERC1820Implementer}. */ interface IERC777Recipient { /** * @dev Called by an {IERC777} token contract whenever tokens are being * moved or created into a registered account (`to`). The type of operation * is conveyed by `from` being the zero address or not. * * This call occurs _after_ the token contract's state is updated, so * {IERC777-balanceOf}, etc., can be used to query the post-operation state. * * This function may revert to prevent the operation from being executed. */ function tokensReceived( address operator, address from, address to, uint256 amount, bytes calldata userData, bytes calldata operatorData ) external; } // File: contracts/IWETH.sol pragma solidity ^0.6.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; function balanceOf(address who) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function allowance(address owner, address spender) external returns (uint256); } // File: contracts/AbstractOwnable.sol pragma solidity ^0.6.0; abstract contract AbstractOwnable { modifier onlyOwner() { require(_owner() == msg.sender, "caller is not the owner"); _; } function _owner() internal virtual returns(address); } // File: contracts/Withdrawable.sol pragma solidity >=0.4.24; abstract contract Withdrawable is AbstractOwnable { using SafeERC20 for IERC20; address constant ETHER = address(0); event LogWithdrawToken( address indexed _from, address indexed _token, uint amount ); /** * @dev Withdraw asset. * @param asset Asset to be withdrawn. */ function adminWithdraw(address asset) public onlyOwner { uint tokenBalance = adminWithdrawAllowed(asset); require(tokenBalance > 0, "admin witdraw not allowed"); _withdraw(asset, tokenBalance); } function _withdraw(address _tokenAddress, uint _amount) internal { if (_tokenAddress == ETHER) { msg.sender.transfer(_amount); } else { IERC20(_tokenAddress).safeTransfer(msg.sender, _amount); } emit LogWithdrawToken(msg.sender, _tokenAddress, _amount); } // can be overridden to disallow withdraw for some token function adminWithdrawAllowed(address asset) internal virtual view returns(uint allowedAmount) { allowedAmount = asset == ETHER ? address(this).balance : IERC20(asset).balanceOf(address(this)); } } // File: contracts/Erc20Vault.sol pragma solidity ^0.6.0; contract Erc20Vault is Withdrawable, IERC777Recipient { using SafeERC20 for IERC20; using EnumerableSet for EnumerableSet.AddressSet; IERC1820Registry constant private _erc1820 = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24); bytes32 constant private TOKENS_RECIPIENT_INTERFACE_HASH = keccak256("ERC777TokensRecipient"); bytes32 constant private ERC777_TOKEN_INTERFACE_HASH = keccak256("ERC777Token"); EnumerableSet.AddressSet private supportedTokens; address public PNETWORK; IWETH public weth; event PegIn( address _tokenAddress, address _tokenSender, uint256 _tokenAmount, string _destinationAddress, bytes _userData ); constructor( address _weth, address [] memory _tokensToSupport ) public { PNETWORK = msg.sender; for (uint256 i = 0; i < _tokensToSupport.length; i++) { supportedTokens.add(_tokensToSupport[i]); } weth = IWETH(_weth); _erc1820.setInterfaceImplementer(address(this), TOKENS_RECIPIENT_INTERFACE_HASH, address(this)); } modifier onlyPNetwork() { require(msg.sender == PNETWORK, "Caller must be PNETWORK address!"); _; } receive() external payable { require(msg.sender == address(weth)); } function setWeth(address _weth) external onlyPNetwork { weth = IWETH(_weth); } function setPNetwork(address _pnetwork) external onlyPNetwork { PNETWORK = _pnetwork; } function IS_TOKEN_SUPPORTED(address _token) external view returns(bool) { return supportedTokens.contains(_token); } function _owner() internal override returns(address) { return PNETWORK; } function adminWithdrawAllowed(address asset) internal override view returns(uint) { return supportedTokens.contains(asset) ? 0 : super.adminWithdrawAllowed(asset); } function addSupportedToken( address _tokenAddress ) external onlyPNetwork returns (bool SUCCESS) { supportedTokens.add(_tokenAddress); return true; } function removeSupportedToken( address _tokenAddress ) external onlyPNetwork returns (bool SUCCESS) { return supportedTokens.remove(_tokenAddress); } function getSupportedTokens() external view returns(address[] memory res) { res = new address[](supportedTokens.length()); for (uint256 i = 0; i < supportedTokens.length(); i++) { res[i] = supportedTokens.at(i); } } function pegIn( uint256 _tokenAmount, address _tokenAddress, string calldata _destinationAddress ) external returns (bool) { return pegIn(_tokenAmount, _tokenAddress, _destinationAddress, ""); } function pegIn( uint256 _tokenAmount, address _tokenAddress, string memory _destinationAddress, bytes memory _userData ) public returns (bool) { require(supportedTokens.contains(_tokenAddress), "Token at supplied address is NOT supported!"); require(_tokenAmount > 0, "Token amount must be greater than zero!"); IERC20(_tokenAddress).safeTransferFrom(msg.sender, address(this), _tokenAmount); emit PegIn(_tokenAddress, msg.sender, _tokenAmount, _destinationAddress, _userData); return true; } /** * @dev Implementation of IERC777Recipient. */ function tokensReceived( address /*operator*/, address from, address to, uint256 amount, bytes calldata userData, bytes calldata /*operatorData*/ ) external override { address _tokenAddress = msg.sender; require(supportedTokens.contains(_tokenAddress), "caller is not a supported ERC777 token!"); require(to == address(this), "Token receiver is not this contract"); if (userData.length > 0) { require(amount > 0, "Token amount must be greater than zero!"); (bytes32 tag, string memory _destinationAddress) = abi.decode(userData, (bytes32, string)); require(tag == keccak256("ERC777-pegIn"), "Invalid tag for automatic pegIn on ERC777 send"); emit PegIn(_tokenAddress, from, amount, _destinationAddress, userData); } } function pegInEth(string calldata _destinationAddress) external payable returns (bool) { return pegInEth(_destinationAddress, ""); } function pegInEth( string memory _destinationAddress, bytes memory _userData ) public payable returns (bool) { require(supportedTokens.contains(address(weth)), "WETH is NOT supported!"); require(msg.value > 0, "Ethers amount must be greater than zero!"); weth.deposit.value(msg.value)(); emit PegIn(address(weth), msg.sender, msg.value, _destinationAddress, _userData); return true; } function pegOutWeth( address payable _tokenRecipient, uint256 _tokenAmount, bytes memory _userData ) internal returns (bool) { weth.withdraw(_tokenAmount); // NOTE: This is the latest recommendation (@ time of writing) for transferring ETH. This no longer relies // on the provided 2300 gas stipend and instead forwards all available gas onwards. // SOURCE: https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now (bool success, ) = _tokenRecipient.call.value(_tokenAmount)(_userData); require(success, "ETH transfer failed when pegging out wETH!"); } function pegOut( address payable _tokenRecipient, address _tokenAddress, uint256 _tokenAmount ) public onlyPNetwork returns (bool) { if (_tokenAddress == address(weth)) { pegOutWeth(_tokenRecipient, _tokenAmount, ""); } else { IERC20(_tokenAddress).safeTransfer(_tokenRecipient, _tokenAmount); } return true; } function pegOut( address payable _tokenRecipient, address _tokenAddress, uint256 _tokenAmount, bytes calldata _userData ) external onlyPNetwork returns (bool) { if (_tokenAddress == address(weth)) { pegOutWeth(_tokenRecipient, _tokenAmount, _userData); } else { address erc777Address = _erc1820.getInterfaceImplementer(_tokenAddress, ERC777_TOKEN_INTERFACE_HASH); if (erc777Address == address(0)) { return pegOut(_tokenRecipient, _tokenAddress, _tokenAmount); } else { IERC777(erc777Address).send(_tokenRecipient, _tokenAmount, _userData); return true; } } } function migrate( address payable _to ) external onlyPNetwork { uint256 numberOfTokens = supportedTokens.length(); for (uint256 i = 0; i < numberOfTokens; i++) { address tokenAddress = supportedTokens.at(0); _migrateSingle(_to, tokenAddress); } } function destroy() external onlyPNetwork { for (uint256 i = 0; i < supportedTokens.length(); i++) { address tokenAddress = supportedTokens.at(i); require(IERC20(tokenAddress).balanceOf(address(this)) == 0, "Balance of supported tokens must be 0"); } selfdestruct(msg.sender); } function migrateSingle( address payable _to, address _tokenAddress ) external onlyPNetwork { _migrateSingle(_to, _tokenAddress); } function _migrateSingle( address payable _to, address _tokenAddress ) private { if (supportedTokens.contains(_tokenAddress)) { uint balance = IERC20(_tokenAddress).balanceOf(address(this)); IERC20(_tokenAddress).safeTransfer(_to, balance); supportedTokens.remove(_tokenAddress); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address[]","name":"_tokensToSupport","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogWithdrawToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_tokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"_tokenSender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"indexed":false,"internalType":"string","name":"_destinationAddress","type":"string"},{"indexed":false,"internalType":"bytes","name":"_userData","type":"bytes"}],"name":"PegIn","type":"event"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"IS_TOKEN_SUPPORTED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PNETWORK","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"addSupportedToken","outputs":[{"internalType":"bool","name":"SUCCESS","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"adminWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"destroy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getSupportedTokens","outputs":[{"internalType":"address[]","name":"res","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"migrateSingle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"string","name":"_destinationAddress","type":"string"}],"name":"pegIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"string","name":"_destinationAddress","type":"string"},{"internalType":"bytes","name":"_userData","type":"bytes"}],"name":"pegIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_destinationAddress","type":"string"},{"internalType":"bytes","name":"_userData","type":"bytes"}],"name":"pegInEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_destinationAddress","type":"string"}],"name":"pegInEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_tokenRecipient","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"internalType":"bytes","name":"_userData","type":"bytes"}],"name":"pegOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_tokenRecipient","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"pegOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"removeSupportedToken","outputs":[{"internalType":"bool","name":"SUCCESS","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pnetwork","type":"address"}],"name":"setPNetwork","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_weth","type":"address"}],"name":"setWeth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokensReceived","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200262538038062002625833981810160405260408110156200003757600080fd5b8151602083018051604051929492938301929190846401000000008211156200005f57600080fd5b9083019060208201858111156200007557600080fd5b82518660208202830111640100000000821117156200009357600080fd5b82525081516020918201928201910280838360005b83811015620000c2578181015183820152602001620000a8565b50505050919091016040525050600280546001600160a01b0319163317905550600090505b81518110156200012a57620001208282815181106200010257fe5b60200260200101516000620001f960201b62001b4e1790919060201c565b50600101620000e7565b50600380546001600160a01b0384166001600160a01b0319909116179055604080517f455243373737546f6b656e73526563697069656e740000000000000000000000815281519081900360150181206329965a1d60e01b82523060048301819052602483019190915260448201529051731820a4b7618bde71dce8cdc73aab6c95905fad24916329965a1d91606480830192600092919082900301818387803b158015620001d857600080fd5b505af1158015620001ed573d6000803e3d6000fd5b50505050505062000292565b600062000219836001600160a01b0384166001600160e01b036200022216565b90505b92915050565b60006200023983836001600160e01b036200027a16565b62000271575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200021c565b5060006200021c565b60009081526001919091016020526040902054151590565b61238380620002a26000396000f3fe6080604052600436106101175760003560e01c806383197ef0116100a0578063c7e3af6b11610064578063c7e3af6b1461066d578063cc3ae6e6146107b8578063ce5494bb14610826578063d3c7c2c714610859578063e62ece30146108be57610135565b806383197ef01461051f57806383c09d4214610534578063a0e8d7ca14610577578063a28835b614610607578063b8d1452f1461063a57610135565b806322965469116100e757806322965469146103d85780632c99d4e2146104735780633fc8cef3146104a45780636d69fcaf146104b957806376319190146104ec57610135565b806223de291461013a5780630a23b33b1461022d5780631328ed3c146102745780631bc4da52146102af57610135565b36610135576003546001600160a01b0316331461013357600080fd5b005b600080fd5b34801561014657600080fd5b50610133600480360360c081101561015d57600080fd5b6001600160a01b03823581169260208101358216926040820135909216916060820135919081019060a081016080820135600160201b81111561019f57600080fd5b8201836020820111156101b157600080fd5b803590602001918460018302840111600160201b831117156101d257600080fd5b919390929091602081019035600160201b8111156101ef57600080fd5b82018360208201111561020157600080fd5b803590602001918460018302840111600160201b8311171561022257600080fd5b5090925090506108f1565b34801561023957600080fd5b506102606004803603602081101561025057600080fd5b50356001600160a01b0316610be3565b604080519115158252519081900360200190f35b34801561028057600080fd5b506101336004803603604081101561029757600080fd5b506001600160a01b0381358116916020013516610bfb565b610260600480360360408110156102c557600080fd5b810190602081018135600160201b8111156102df57600080fd5b8201836020820111156102f157600080fd5b803590602001918460018302840111600160201b8311171561031257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561036457600080fd5b82018360208201111561037657600080fd5b803590602001918460018302840111600160201b8311171561039757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c56945050505050565b3480156103e457600080fd5b50610260600480360360808110156103fb57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561043557600080fd5b82018360208201111561044757600080fd5b803590602001918460018302840111600160201b8311171561046857600080fd5b509092509050610ec2565b34801561047f57600080fd5b506104886110f8565b604080516001600160a01b039092168252519081900360200190f35b3480156104b057600080fd5b50610488611107565b3480156104c557600080fd5b50610260600480360360208110156104dc57600080fd5b50356001600160a01b0316611116565b3480156104f857600080fd5b506102606004803603602081101561050f57600080fd5b50356001600160a01b0316611180565b34801561052b57600080fd5b506101336111e1565b34801561054057600080fd5b506102606004803603606081101561055757600080fd5b506001600160a01b03813581169160208101359091169060400135611313565b34801561058357600080fd5b506102606004803603606081101561059a57600080fd5b8135916001600160a01b0360208201351691810190606081016040820135600160201b8111156105c957600080fd5b8201836020820111156105db57600080fd5b803590602001918460018302840111600160201b831117156105fc57600080fd5b5090925090506113bd565b34801561061357600080fd5b506101336004803603602081101561062a57600080fd5b50356001600160a01b0316611419565b34801561064657600080fd5b506101336004803603602081101561065d57600080fd5b50356001600160a01b03166114e9565b34801561067957600080fd5b506102606004803603608081101561069057600080fd5b8135916001600160a01b0360208201351691810190606081016040820135600160201b8111156106bf57600080fd5b8201836020820111156106d157600080fd5b803590602001918460018302840111600160201b831117156106f257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561074457600080fd5b82018360208201111561075657600080fd5b803590602001918460018302840111600160201b8311171561077757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611558945050505050565b610260600480360360208110156107ce57600080fd5b810190602081018135600160201b8111156107e857600080fd5b8201836020820111156107fa57600080fd5b803590602001918460018302840111600160201b8311171561081b57600080fd5b509092509050611746565b34801561083257600080fd5b506101336004803603602081101561084957600080fd5b50356001600160a01b031661179c565b34801561086557600080fd5b5061086e61182e565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108aa578181015183820152602001610892565b505050509050019250505060405180910390f35b3480156108ca57600080fd5b50610133600480360360208110156108e157600080fd5b50356001600160a01b03166118bb565b3361090360008263ffffffff61192a16565b61093e5760405162461bcd60e51b81526004018080602001828103825260278152602001806123276027913960400191505060405180910390fd5b6001600160a01b03871630146109855760405162461bcd60e51b81526004018080602001828103825260238152602001806121c36023913960400191505060405180910390fd5b8315610bd857600086116109ca5760405162461bcd60e51b81526004018080602001828103825260278152602001806122846027913960400191505060405180910390fd5b60006060868660408110156109de57600080fd5b81359190810190604081016020820135600160201b8111156109ff57600080fd5b820183602082011115610a1157600080fd5b803590602001918460018302840111600160201b83111715610a3257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516b22a9219b9b9b96b832b3a4b760a11b8152905190819003600c01902096985091965050509285149250610ad29150505760405162461bcd60e51b815260040180806020018281038252602e81526020018061220b602e913960400191505060405180910390fd5b7fd45bf0460398ad3b27d2bd85144872898591943b81eca880e34fca0a229aa0dc838b8a848b8b60405180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b031681526020018581526020018060200180602001838103835286818151815260200191508051906020019080838360005b83811015610b70578181015183820152602001610b58565b50505050905090810190601f168015610b9d5780820380516001836020036101000a031916815260200191505b508381038252848152602001858580828437600083820152604051601f909101601f19169092018290039a509098505050505050505050a150505b505050505050505050565b6000610bf5818363ffffffff61192a16565b92915050565b6002546001600160a01b03163314610c48576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b610c52828261193f565b5050565b600354600090610c769082906001600160a01b031663ffffffff61192a16565b610cc0576040805162461bcd60e51b815260206004820152601660248201527557455448206973204e4f5420737570706f727465642160501b604482015290519081900360640190fd5b60003411610cff5760405162461bcd60e51b81526004018080602001828103825260288152602001806122ab6028913960400191505060405180910390fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d4f57600080fd5b505af1158015610d63573d6000803e3d6000fd5b50505050507fd45bf0460398ad3b27d2bd85144872898591943b81eca880e34fca0a229aa0dc600360009054906101000a90046001600160a01b03163334868660405180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610e1a578181015183820152602001610e02565b50505050905090810190601f168015610e475780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610e7a578181015183820152602001610e62565b50505050905090810190601f168015610ea75780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a150600192915050565b6002546000906001600160a01b03163314610f12576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b6003546001600160a01b0386811691161415610f6f57610f69868585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119fe92505050565b506110ef565b604080516a22a9219b9b9baa37b5b2b760a91b8152815190819003600b01812063555ddc6560e11b82526001600160a01b038816600483015260248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b158015610fee57600080fd5b505afa158015611002573d6000803e3d6000fd5b505050506040513d602081101561101857600080fd5b505190506001600160a01b03811661103d57611035878787611313565b9150506110ef565b806001600160a01b0316639bd9bbc6888787876040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b5050505060019150505b95945050505050565b6002546001600160a01b031681565b6003546001600160a01b031681565b6002546000906001600160a01b03163314611166576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b61117760008363ffffffff611b4e16565b50600192915050565b6002546000906001600160a01b031633146111d0576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b610bf560008363ffffffff611b6316565b6002546001600160a01b0316331461122e576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b60005b61123b6000611b78565b81101561130f576000611254818363ffffffff611b8316565b604080516370a0823160e01b815230600482015290519192506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561129e57600080fd5b505afa1580156112b2573d6000803e3d6000fd5b505050506040513d60208110156112c857600080fd5b5051156113065760405162461bcd60e51b81526004018080602001828103825260258152602001806121e66025913960400191505060405180910390fd5b50600101611231565b5033ff5b6002546000906001600160a01b03163314611363576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b6003546001600160a01b0384811691161415611399576113938483604051806020016040528060008152506119fe565b506113b3565b6113b36001600160a01b038416858463ffffffff611b8f16565b5060019392505050565b600061140e858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250611558915050565b90505b949350505050565b33611422611be1565b6001600160a01b03161461147d576040805162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604482015290519081900360640190fd5b600061148882611bf0565b9050600081116114df576040805162461bcd60e51b815260206004820152601960248201527f61646d696e2077697464726177206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b610c528282611c1c565b6002546001600160a01b03163314611536576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600061156a818563ffffffff61192a16565b6115a55760405162461bcd60e51b815260040180806020018281038252602b815260200180612259602b913960400191505060405180910390fd5b600085116115e45760405162461bcd60e51b81526004018080602001828103825260278152602001806122846027913960400191505060405180910390fd5b6115ff6001600160a01b03851633308863ffffffff611cbb16565b7fd45bf0460398ad3b27d2bd85144872898591943b81eca880e34fca0a229aa0dc843387868660405180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561169c578181015183820152602001611684565b50505050905090810190601f1680156116c95780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156116fc5781810151838201526020016116e4565b50505050905090810190601f1680156117295780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a1506001949350505050565b600061179583838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250610c56915050565b9392505050565b6002546001600160a01b031633146117e9576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b60006117f56000611b78565b905060005b81811015611829576000611814818063ffffffff611b8316565b9050611820848261193f565b506001016117fa565b505050565b606061183a6000611b78565b604051908082528060200260200182016040528015611863578160200160208202803883390190505b50905060005b6118736000611b78565b8110156118b75761188b60008263ffffffff611b8316565b82828151811061189757fe5b6001600160a01b0390921660209283029190910190910152600101611869565b5090565b6002546001600160a01b03163314611908576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000611795836001600160a01b038416611d15565b61195060008263ffffffff61192a16565b15610c5257604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561199f57600080fd5b505afa1580156119b3573d6000803e3d6000fd5b505050506040513d60208110156119c957600080fd5b505190506119e76001600160a01b038316848363ffffffff611b8f16565b6119f860008363ffffffff611b6316565b50505050565b60035460408051632e1a7d4d60e01b81526004810185905290516000926001600160a01b031691632e1a7d4d916024808301928692919082900301818387803b158015611a4a57600080fd5b505af1158015611a5e573d6000803e3d6000fd5b505050506000846001600160a01b031684846040518082805190602001908083835b60208310611a9f5780518252601f199092019160209182019101611a80565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611b01576040519150601f19603f3d011682016040523d82523d6000602084013e611b06565b606091505b5050905080611b465760405162461bcd60e51b815260040180806020018281038252602a8152602001806122d3602a913960400191505060405180910390fd5b509392505050565b6000611795836001600160a01b038416611d2d565b6000611795836001600160a01b038416611d77565b6000610bf582611e3d565b60006117958383611e41565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611829908490611ea5565b6002546001600160a01b031690565b6000611c02818363ffffffff61192a16565b611c1457611c0f82611f56565b610bf5565b506000919050565b6001600160a01b038216611c5d57604051339082156108fc029083906000818181858888f19350505050158015611c57573d6000803e3d6000fd5b50611c77565b611c776001600160a01b038316338363ffffffff611b8f16565b6040805182815290516001600160a01b0384169133917f46ae78bc7b198b8b534ca0070d125569ac5f955976841c4343223079f3abf0de9181900360200190a35050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526119f8908590611ea5565b60009081526001919091016020526040902054151590565b6000611d398383611d15565b611d6f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bf5565b506000610bf5565b60008181526001830160205260408120548015611e335783546000198083019190810190600090879083908110611daa57fe5b9060005260206000200154905080876000018481548110611dc757fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080611df757fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610bf5565b6000915050610bf5565b5490565b81546000908210611e835760405162461bcd60e51b81526004018080602001828103825260228152602001806121a16022913960400191505060405180910390fd5b826000018281548110611e9257fe5b9060005260206000200154905092915050565b6060611efa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fe59092919063ffffffff16565b80519091501561182957808060200190516020811015611f1957600080fd5b50516118295760405162461bcd60e51b815260040180806020018281038252602a8152602001806122fd602a913960400191505060405180910390fd5b60006001600160a01b03821615611fde57604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b158015611fad57600080fd5b505afa158015611fc1573d6000803e3d6000fd5b505050506040513d6020811015611fd757600080fd5b5051610bf5565b4792915050565b606061141184846000856060611ffa8561219a565b61204b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061208a5780518252601f19909201916020918201910161206b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146120ec576040519150601f19603f3d011682016040523d82523d6000602084013e6120f1565b606091505b509150915081156121055791506114119050565b8051156121155780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561215f578181015183820152602001612147565b50505050905090810190601f16801561218c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b3b15159056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473546f6b656e207265636569766572206973206e6f74207468697320636f6e747261637442616c616e6365206f6620737570706f7274656420746f6b656e73206d7573742062652030496e76616c69642074616720666f72206175746f6d6174696320706567496e206f6e204552433737372073656e6443616c6c6572206d75737420626520504e4554574f524b206164647265737321546f6b656e20617420737570706c6965642061646472657373206973204e4f5420737570706f7274656421546f6b656e20616d6f756e74206d7573742062652067726561746572207468616e207a65726f2145746865727320616d6f756e74206d7573742062652067726561746572207468616e207a65726f21455448207472616e73666572206661696c6564207768656e2070656767696e67206f75742077455448215361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656463616c6c6572206973206e6f74206120737570706f727465642045524337373720746f6b656e21a26469706673582212201b3e353915fa3418f541783fb004f75d5d4b45318bd732d76c17853f1624492364736f6c63430006020033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000014000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a200000000000000000000000089ab32156e46f46d02ade3fecbe5fc4243b9aaed0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca00000000000000000000000002eca910cb3a7d43ebc7e8028652ed5c6b70259b000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d000000000000000000000000ba11d00c5f74255f56a5e366f4f77f5a186d7f55000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888000000000000000000000000c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984000000000000000000000000a117000000f279d81a1d3cc75430faa017fa5a2e0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd000000000000000000000000d26114cd6ee289accf82350c8d8487fedb8a0c070000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef000000000000000000000000d13c7342e1ef687c5ad21b27c2b65d772cab5c8c00000000000000000000000093ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d000000000000000000000000221657776846890989a759ba2973e427dff5c9bb000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498
Deployed Bytecode
0x6080604052600436106101175760003560e01c806383197ef0116100a0578063c7e3af6b11610064578063c7e3af6b1461066d578063cc3ae6e6146107b8578063ce5494bb14610826578063d3c7c2c714610859578063e62ece30146108be57610135565b806383197ef01461051f57806383c09d4214610534578063a0e8d7ca14610577578063a28835b614610607578063b8d1452f1461063a57610135565b806322965469116100e757806322965469146103d85780632c99d4e2146104735780633fc8cef3146104a45780636d69fcaf146104b957806376319190146104ec57610135565b806223de291461013a5780630a23b33b1461022d5780631328ed3c146102745780631bc4da52146102af57610135565b36610135576003546001600160a01b0316331461013357600080fd5b005b600080fd5b34801561014657600080fd5b50610133600480360360c081101561015d57600080fd5b6001600160a01b03823581169260208101358216926040820135909216916060820135919081019060a081016080820135600160201b81111561019f57600080fd5b8201836020820111156101b157600080fd5b803590602001918460018302840111600160201b831117156101d257600080fd5b919390929091602081019035600160201b8111156101ef57600080fd5b82018360208201111561020157600080fd5b803590602001918460018302840111600160201b8311171561022257600080fd5b5090925090506108f1565b34801561023957600080fd5b506102606004803603602081101561025057600080fd5b50356001600160a01b0316610be3565b604080519115158252519081900360200190f35b34801561028057600080fd5b506101336004803603604081101561029757600080fd5b506001600160a01b0381358116916020013516610bfb565b610260600480360360408110156102c557600080fd5b810190602081018135600160201b8111156102df57600080fd5b8201836020820111156102f157600080fd5b803590602001918460018302840111600160201b8311171561031257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561036457600080fd5b82018360208201111561037657600080fd5b803590602001918460018302840111600160201b8311171561039757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c56945050505050565b3480156103e457600080fd5b50610260600480360360808110156103fb57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561043557600080fd5b82018360208201111561044757600080fd5b803590602001918460018302840111600160201b8311171561046857600080fd5b509092509050610ec2565b34801561047f57600080fd5b506104886110f8565b604080516001600160a01b039092168252519081900360200190f35b3480156104b057600080fd5b50610488611107565b3480156104c557600080fd5b50610260600480360360208110156104dc57600080fd5b50356001600160a01b0316611116565b3480156104f857600080fd5b506102606004803603602081101561050f57600080fd5b50356001600160a01b0316611180565b34801561052b57600080fd5b506101336111e1565b34801561054057600080fd5b506102606004803603606081101561055757600080fd5b506001600160a01b03813581169160208101359091169060400135611313565b34801561058357600080fd5b506102606004803603606081101561059a57600080fd5b8135916001600160a01b0360208201351691810190606081016040820135600160201b8111156105c957600080fd5b8201836020820111156105db57600080fd5b803590602001918460018302840111600160201b831117156105fc57600080fd5b5090925090506113bd565b34801561061357600080fd5b506101336004803603602081101561062a57600080fd5b50356001600160a01b0316611419565b34801561064657600080fd5b506101336004803603602081101561065d57600080fd5b50356001600160a01b03166114e9565b34801561067957600080fd5b506102606004803603608081101561069057600080fd5b8135916001600160a01b0360208201351691810190606081016040820135600160201b8111156106bf57600080fd5b8201836020820111156106d157600080fd5b803590602001918460018302840111600160201b831117156106f257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561074457600080fd5b82018360208201111561075657600080fd5b803590602001918460018302840111600160201b8311171561077757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611558945050505050565b610260600480360360208110156107ce57600080fd5b810190602081018135600160201b8111156107e857600080fd5b8201836020820111156107fa57600080fd5b803590602001918460018302840111600160201b8311171561081b57600080fd5b509092509050611746565b34801561083257600080fd5b506101336004803603602081101561084957600080fd5b50356001600160a01b031661179c565b34801561086557600080fd5b5061086e61182e565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108aa578181015183820152602001610892565b505050509050019250505060405180910390f35b3480156108ca57600080fd5b50610133600480360360208110156108e157600080fd5b50356001600160a01b03166118bb565b3361090360008263ffffffff61192a16565b61093e5760405162461bcd60e51b81526004018080602001828103825260278152602001806123276027913960400191505060405180910390fd5b6001600160a01b03871630146109855760405162461bcd60e51b81526004018080602001828103825260238152602001806121c36023913960400191505060405180910390fd5b8315610bd857600086116109ca5760405162461bcd60e51b81526004018080602001828103825260278152602001806122846027913960400191505060405180910390fd5b60006060868660408110156109de57600080fd5b81359190810190604081016020820135600160201b8111156109ff57600080fd5b820183602082011115610a1157600080fd5b803590602001918460018302840111600160201b83111715610a3257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516b22a9219b9b9b96b832b3a4b760a11b8152905190819003600c01902096985091965050509285149250610ad29150505760405162461bcd60e51b815260040180806020018281038252602e81526020018061220b602e913960400191505060405180910390fd5b7fd45bf0460398ad3b27d2bd85144872898591943b81eca880e34fca0a229aa0dc838b8a848b8b60405180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b031681526020018581526020018060200180602001838103835286818151815260200191508051906020019080838360005b83811015610b70578181015183820152602001610b58565b50505050905090810190601f168015610b9d5780820380516001836020036101000a031916815260200191505b508381038252848152602001858580828437600083820152604051601f909101601f19169092018290039a509098505050505050505050a150505b505050505050505050565b6000610bf5818363ffffffff61192a16565b92915050565b6002546001600160a01b03163314610c48576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b610c52828261193f565b5050565b600354600090610c769082906001600160a01b031663ffffffff61192a16565b610cc0576040805162461bcd60e51b815260206004820152601660248201527557455448206973204e4f5420737570706f727465642160501b604482015290519081900360640190fd5b60003411610cff5760405162461bcd60e51b81526004018080602001828103825260288152602001806122ab6028913960400191505060405180910390fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d4f57600080fd5b505af1158015610d63573d6000803e3d6000fd5b50505050507fd45bf0460398ad3b27d2bd85144872898591943b81eca880e34fca0a229aa0dc600360009054906101000a90046001600160a01b03163334868660405180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610e1a578181015183820152602001610e02565b50505050905090810190601f168015610e475780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610e7a578181015183820152602001610e62565b50505050905090810190601f168015610ea75780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a150600192915050565b6002546000906001600160a01b03163314610f12576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b6003546001600160a01b0386811691161415610f6f57610f69868585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119fe92505050565b506110ef565b604080516a22a9219b9b9baa37b5b2b760a91b8152815190819003600b01812063555ddc6560e11b82526001600160a01b038816600483015260248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b158015610fee57600080fd5b505afa158015611002573d6000803e3d6000fd5b505050506040513d602081101561101857600080fd5b505190506001600160a01b03811661103d57611035878787611313565b9150506110ef565b806001600160a01b0316639bd9bbc6888787876040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b5050505060019150505b95945050505050565b6002546001600160a01b031681565b6003546001600160a01b031681565b6002546000906001600160a01b03163314611166576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b61117760008363ffffffff611b4e16565b50600192915050565b6002546000906001600160a01b031633146111d0576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b610bf560008363ffffffff611b6316565b6002546001600160a01b0316331461122e576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b60005b61123b6000611b78565b81101561130f576000611254818363ffffffff611b8316565b604080516370a0823160e01b815230600482015290519192506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561129e57600080fd5b505afa1580156112b2573d6000803e3d6000fd5b505050506040513d60208110156112c857600080fd5b5051156113065760405162461bcd60e51b81526004018080602001828103825260258152602001806121e66025913960400191505060405180910390fd5b50600101611231565b5033ff5b6002546000906001600160a01b03163314611363576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b6003546001600160a01b0384811691161415611399576113938483604051806020016040528060008152506119fe565b506113b3565b6113b36001600160a01b038416858463ffffffff611b8f16565b5060019392505050565b600061140e858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250611558915050565b90505b949350505050565b33611422611be1565b6001600160a01b03161461147d576040805162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604482015290519081900360640190fd5b600061148882611bf0565b9050600081116114df576040805162461bcd60e51b815260206004820152601960248201527f61646d696e2077697464726177206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b610c528282611c1c565b6002546001600160a01b03163314611536576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600061156a818563ffffffff61192a16565b6115a55760405162461bcd60e51b815260040180806020018281038252602b815260200180612259602b913960400191505060405180910390fd5b600085116115e45760405162461bcd60e51b81526004018080602001828103825260278152602001806122846027913960400191505060405180910390fd5b6115ff6001600160a01b03851633308863ffffffff611cbb16565b7fd45bf0460398ad3b27d2bd85144872898591943b81eca880e34fca0a229aa0dc843387868660405180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561169c578181015183820152602001611684565b50505050905090810190601f1680156116c95780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156116fc5781810151838201526020016116e4565b50505050905090810190601f1680156117295780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a1506001949350505050565b600061179583838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250610c56915050565b9392505050565b6002546001600160a01b031633146117e9576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b60006117f56000611b78565b905060005b81811015611829576000611814818063ffffffff611b8316565b9050611820848261193f565b506001016117fa565b505050565b606061183a6000611b78565b604051908082528060200260200182016040528015611863578160200160208202803883390190505b50905060005b6118736000611b78565b8110156118b75761188b60008263ffffffff611b8316565b82828151811061189757fe5b6001600160a01b0390921660209283029190910190910152600101611869565b5090565b6002546001600160a01b03163314611908576040805162461bcd60e51b81526020600482018190526024820152600080516020612239833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000611795836001600160a01b038416611d15565b61195060008263ffffffff61192a16565b15610c5257604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561199f57600080fd5b505afa1580156119b3573d6000803e3d6000fd5b505050506040513d60208110156119c957600080fd5b505190506119e76001600160a01b038316848363ffffffff611b8f16565b6119f860008363ffffffff611b6316565b50505050565b60035460408051632e1a7d4d60e01b81526004810185905290516000926001600160a01b031691632e1a7d4d916024808301928692919082900301818387803b158015611a4a57600080fd5b505af1158015611a5e573d6000803e3d6000fd5b505050506000846001600160a01b031684846040518082805190602001908083835b60208310611a9f5780518252601f199092019160209182019101611a80565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611b01576040519150601f19603f3d011682016040523d82523d6000602084013e611b06565b606091505b5050905080611b465760405162461bcd60e51b815260040180806020018281038252602a8152602001806122d3602a913960400191505060405180910390fd5b509392505050565b6000611795836001600160a01b038416611d2d565b6000611795836001600160a01b038416611d77565b6000610bf582611e3d565b60006117958383611e41565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611829908490611ea5565b6002546001600160a01b031690565b6000611c02818363ffffffff61192a16565b611c1457611c0f82611f56565b610bf5565b506000919050565b6001600160a01b038216611c5d57604051339082156108fc029083906000818181858888f19350505050158015611c57573d6000803e3d6000fd5b50611c77565b611c776001600160a01b038316338363ffffffff611b8f16565b6040805182815290516001600160a01b0384169133917f46ae78bc7b198b8b534ca0070d125569ac5f955976841c4343223079f3abf0de9181900360200190a35050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526119f8908590611ea5565b60009081526001919091016020526040902054151590565b6000611d398383611d15565b611d6f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bf5565b506000610bf5565b60008181526001830160205260408120548015611e335783546000198083019190810190600090879083908110611daa57fe5b9060005260206000200154905080876000018481548110611dc757fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080611df757fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610bf5565b6000915050610bf5565b5490565b81546000908210611e835760405162461bcd60e51b81526004018080602001828103825260228152602001806121a16022913960400191505060405180910390fd5b826000018281548110611e9257fe5b9060005260206000200154905092915050565b6060611efa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fe59092919063ffffffff16565b80519091501561182957808060200190516020811015611f1957600080fd5b50516118295760405162461bcd60e51b815260040180806020018281038252602a8152602001806122fd602a913960400191505060405180910390fd5b60006001600160a01b03821615611fde57604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b158015611fad57600080fd5b505afa158015611fc1573d6000803e3d6000fd5b505050506040513d6020811015611fd757600080fd5b5051610bf5565b4792915050565b606061141184846000856060611ffa8561219a565b61204b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061208a5780518252601f19909201916020918201910161206b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146120ec576040519150601f19603f3d011682016040523d82523d6000602084013e6120f1565b606091505b509150915081156121055791506114119050565b8051156121155780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561215f578181015183820152602001612147565b50505050905090810190601f16801561218c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b3b15159056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473546f6b656e207265636569766572206973206e6f74207468697320636f6e747261637442616c616e6365206f6620737570706f7274656420746f6b656e73206d7573742062652030496e76616c69642074616720666f72206175746f6d6174696320706567496e206f6e204552433737372073656e6443616c6c6572206d75737420626520504e4554574f524b206164647265737321546f6b656e20617420737570706c6965642061646472657373206973204e4f5420737570706f7274656421546f6b656e20616d6f756e74206d7573742062652067726561746572207468616e207a65726f2145746865727320616d6f756e74206d7573742062652067726561746572207468616e207a65726f21455448207472616e73666572206661696c6564207768656e2070656767696e67206f75742077455448215361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656463616c6c6572206973206e6f74206120737570706f727465642045524337373720746f6b656e21a26469706673582212201b3e353915fa3418f541783fb004f75d5d4b45318bd732d76c17853f1624492364736f6c63430006020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000014000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a200000000000000000000000089ab32156e46f46d02ade3fecbe5fc4243b9aaed0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca00000000000000000000000002eca910cb3a7d43ebc7e8028652ed5c6b70259b000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d000000000000000000000000ba11d00c5f74255f56a5e366f4f77f5a186d7f55000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888000000000000000000000000c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984000000000000000000000000a117000000f279d81a1d3cc75430faa017fa5a2e0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd000000000000000000000000d26114cd6ee289accf82350c8d8487fedb8a0c070000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef000000000000000000000000d13c7342e1ef687c5ad21b27c2b65d772cab5c8c00000000000000000000000093ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d000000000000000000000000221657776846890989a759ba2973e427dff5c9bb000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498
-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : _tokensToSupport (address[]): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2,0x89Ab32156e46F46D02ade3FEcbe5Fc4243B9AAeD,0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e,0x514910771AF9Ca656af840dff83E8264EcF986CA,0x02Eca910CB3A7D43eBC7e8028652ed5C6b70259B,0xba100000625a3754423978a60c9317c58a424e3D,0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55,0xc00e94Cb662C3520282E6f5717214004A7f26888,0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F,0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984,0xa117000000f279D81A1D3cc75430fAA017FA5A2e,0x6B175474E89094C44Da98b954EedeAC495271d0F,0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD,0xd26114cd6EE289AccF82350c8d8487fedB8A0C07,0x0D8775F648430679A709E98d2b0Cb6250d2887EF,0xD13c7342e1ef687C5ad21b27c2b65D772cAb5C8c,0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d,0x221657776846890989a759BA2973e427DfF5C9bB,0xE41d2489571d322189246DaFA5ebDe1F4699F498
-----Encoded View---------------
23 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [4] : 0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2
Arg [5] : 00000000000000000000000089ab32156e46f46d02ade3fecbe5fc4243b9aaed
Arg [6] : 0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e
Arg [7] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [8] : 00000000000000000000000002eca910cb3a7d43ebc7e8028652ed5c6b70259b
Arg [9] : 000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d
Arg [10] : 000000000000000000000000ba11d00c5f74255f56a5e366f4f77f5a186d7f55
Arg [11] : 000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888
Arg [12] : 000000000000000000000000c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f
Arg [13] : 0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984
Arg [14] : 000000000000000000000000a117000000f279d81a1d3cc75430faa017fa5a2e
Arg [15] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [16] : 000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd
Arg [17] : 000000000000000000000000d26114cd6ee289accf82350c8d8487fedb8a0c07
Arg [18] : 0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef
Arg [19] : 000000000000000000000000d13c7342e1ef687c5ad21b27c2b65d772cab5c8c
Arg [20] : 00000000000000000000000093ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d
Arg [21] : 000000000000000000000000221657776846890989a759ba2973e427dff5c9bb
Arg [22] : 000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498
Deployed Bytecode Sourcemap
40780:8466:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42134:4;;-1:-1:-1;;;;;42134:4:0;42112:10;:27;42104:36;;;;;;40780:8466;;;;;44448:878;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44448:878:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;44448:878:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;44448:878:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;44448:878:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;44448:878:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;44448:878:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;44448:878:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;44448:878:0;;-1:-1:-1;44448:878:0;-1:-1:-1;44448:878:0;:::i;42365:130::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42365:130:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42365:130:0;-1:-1:-1;;;;;42365:130:0;;:::i;:::-;;;;;;;;;;;;;;;;;;48664:190;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48664:190:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;48664:190:0;;;;;;;;;;:::i;45520:489::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45520:489:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;45520:489:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45520:489:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;45520:489:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;45520:489:0;;;;;;;;-1:-1:-1;45520:489:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;45520:489:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45520:489:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;45520:489:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;45520:489:0;;-1:-1:-1;45520:489:0;;-1:-1:-1;;;;;45520:489:0:i;47162:779::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47162:779:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;47162:779:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;47162:779:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;47162:779:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;47162:779:0;;-1:-1:-1;47162:779:0;-1:-1:-1;47162:779:0;:::i;41286:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41286:23:0;;;:::i;:::-;;;;-1:-1:-1;;;;;41286:23:0;;;;;;;;;;;;;;41316:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41316:17:0;;;:::i;42785:218::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42785:218:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42785:218:0;-1:-1:-1;;;;;42785:218:0;;:::i;43011:209::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43011:209:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43011:209:0;-1:-1:-1;;;;;43011:209:0;;:::i;48298:358::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48298:358:0;;;:::i;46713:441::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46713:441:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;46713:441:0;;;;;;;;;;;;;;;;;:::i;43496:263::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43496:263:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43496:263:0;;;-1:-1:-1;;;;;43496:263:0;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;43496:263:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;43496:263:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;43496:263:0;;-1:-1:-1;43496:263:0;-1:-1:-1;43496:263:0;:::i;39899:213::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39899:213:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39899:213:0;-1:-1:-1;;;;;39899:213:0;;:::i;42156:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42156:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42156:92:0;-1:-1:-1;;;;;42156:92:0;;:::i;43767:606::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43767:606:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;43767:606:0;;;-1:-1:-1;;;;;43767:606:0;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;43767:606:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;43767:606:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;43767:606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;43767:606:0;;;;;;;;-1:-1:-1;43767:606:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;43767:606:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;43767:606:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;43767:606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;43767:606:0;;-1:-1:-1;43767:606:0;;-1:-1:-1;;;;;43767:606:0:i;45334:178::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45334:178:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;45334:178:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45334:178:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;45334:178:0;;-1:-1:-1;45334:178:0;-1:-1:-1;45334:178:0;:::i;47949:341::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47949:341:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47949:341:0;-1:-1:-1;;;;;47949:341:0;;:::i;43228:260::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43228:260:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;43228:260:0;;;;;;;;;;;;;;;;;42256:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42256:101:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42256:101:0;-1:-1:-1;;;;;42256:101:0;;:::i;44448:878::-;44708:10;44737:39;44684:21;44708:10;44737:39;:24;:39;:::i;:::-;44729:91;;;;-1:-1:-1;;;44729:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44839:19:0;;44853:4;44839:19;44831:67;;;;-1:-1:-1;;;44831:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44913:19;;44909:410;;44966:1;44957:6;:10;44949:62;;;;-1:-1:-1;;;44949:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45027:11;45040:33;45088:8;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45077:39:0;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;45077:39:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45077:39:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;45077:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;45146:25:0;;;-1:-1:-1;;;45146:25:0;;;;;;;;;;;;45026:90;;-1:-1:-1;45077:39:0;;-1:-1:-1;;;45139:32:0;;;;-1:-1:-1;45131:91:0;;-1:-1:-1;;45131:91:0;;;-1:-1:-1;;;45131:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45242:65;45248:13;45263:4;45269:6;45277:19;45298:8;;45242:65;;;;-1:-1:-1;;;;;45242:65:0;-1:-1:-1;;;;;45242:65:0;;;;;;-1:-1:-1;;;;;45242:65:0;-1:-1:-1;;;;;45242:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;45242:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45242:65:0;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;;74:27;45242:65:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;45242:65:0;;;;-1:-1:-1;45242:65:0;;-1:-1:-1;;;;;;;;;45242:65:0;44909:410;;;44448:878;;;;;;;;;:::o;42365:130::-;42431:4;42455:32;42431:4;42480:6;42455:32;:24;:32;:::i;:::-;42448:39;42365:130;-1:-1:-1;;42365:130:0:o;48664:190::-;41993:8;;-1:-1:-1;;;;;41993:8:0;41979:10;:22;41971:67;;;;;-1:-1:-1;;;41971:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41971:67:0;;;;;;;;;;;;;;;48812:34:::1;48827:3;48832:13;48812:14;:34::i;:::-;48664:190:::0;;:::o;45520:489::-;45736:4;;45673;;45703:39;;45673:4;;-1:-1:-1;;;;;45736:4:0;45703:39;:24;:39;:::i;:::-;45695:74;;;;;-1:-1:-1;;;45695:74:0;;;;;;;;;;;;-1:-1:-1;;;45695:74:0;;;;;;;;;;;;;;;45800:1;45788:9;:13;45780:66;;;;-1:-1:-1;;;45780:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45857:4;;;;;;;;;-1:-1:-1;;;;;45857:4:0;-1:-1:-1;;;;;45857:12:0;;45876:9;45857:31;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45857:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45857:31:0;;;;;45904:75;45918:4;;;;;;;;;-1:-1:-1;;;;;45918:4:0;45925:10;45937:9;45948:19;45969:9;45904:75;;;;-1:-1:-1;;;;;45904:75:0;-1:-1:-1;;;;;45904:75:0;;;;;;-1:-1:-1;;;;;45904:75:0;-1:-1:-1;;;;;45904:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;45904:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45904:75:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;45904:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45997:4:0;45520:489;;;;:::o;47162:779::-;41993:8;;47383:4;;-1:-1:-1;;;;;41993:8:0;41979:10;:22;41971:67;;;;;-1:-1:-1;;;41971:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41971:67:0;;;;;;;;;;;;;;;47434:4:::1;::::0;-1:-1:-1;;;;;47409:30:0;;::::1;47434:4:::0;::::1;47409:30;47405:529;;;47456:52;47467:15;47484:12;47498:9;;47456:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;47456:10:0::1;::::0;-1:-1:-1;;;47456:52:0:i:1;:::-;;47405:529;;;41198:24;::::0;;-1:-1:-1;;;41198:24:0;;;;;;;;::::1;::::0;;;-1:-1:-1;;;47565:76:0;;-1:-1:-1;;;;;47565:76:0;::::1;;::::0;::::1;::::0;;;;;;;47541:21:::1;::::0;40993:42:::1;::::0;47565:32:::1;::::0;:76;;;;;::::1;::::0;;;;;;;;;40993:42;47565:76;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;47565:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;47565:76:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;47565:76:0;;-1:-1:-1;;;;;;47660:27:0;::::1;47656:267;;47715:52;47722:15;47739:13;47754:12;47715:6;:52::i;:::-;47708:59;;;;;47656:267;47816:13;-1:-1:-1::0;;;;;47808:27:0::1;;47836:15;47853:12;47867:9;;47808:69;;;;;;;;;;;;;-1:-1:-1::0;;;;;47808:69:0::1;-1:-1:-1::0;;;;;47808:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;47808:69:0;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;47808:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;47808:69:0;;;;47903:4;47896:11;;;47405:529;47162:779:::0;;;;;;;:::o;41286:23::-;;;-1:-1:-1;;;;;41286:23:0;;:::o;41316:17::-;;;-1:-1:-1;;;;;41316:17:0;;:::o;42785:218::-;41993:8;;42909:12;;-1:-1:-1;;;;;41993:8:0;41979:10;:22;41971:67;;;;;-1:-1:-1;;;41971:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41971:67:0;;;;;;;;;;;;;;;42939:34:::1;:15;42959:13:::0;42939:34:::1;:19;:34;:::i;:::-;-1:-1:-1::0;42991:4:0::1;::::0;42785:218;-1:-1:-1;;42785:218:0:o;43011:209::-;41993:8;;43138:12;;-1:-1:-1;;;;;41993:8:0;41979:10;:22;41971:67;;;;;-1:-1:-1;;;41971:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41971:67:0;;;;;;;;;;;;;;;43175:37:::1;:15;43198:13:::0;43175:37:::1;:22;:37;:::i;48298:358::-:0;41993:8;;-1:-1:-1;;;;;41993:8:0;41979:10;:22;41971:67;;;;;-1:-1:-1;;;41971:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41971:67:0;;;;;;;;;;;;;;;48378:9:::1;48373:241;48397:24;:15;:22;:24::i;:::-;48393:1;:28;48373:241;;;48443:20;48466:21;48443:20:::0;48485:1;48466:21:::1;:18;:21;:::i;:::-;48510:45;::::0;;-1:-1:-1;;;48510:45:0;;48549:4:::1;48510:45;::::0;::::1;::::0;;;48443:44;;-1:-1:-1;;;;;;48510:30:0;::::1;::::0;::::1;::::0;:45;;;;;::::1;::::0;;;;;;;;;:30;:45;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;48510:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;48510:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;48510:45:0;:50;48502:100:::1;;;;-1:-1:-1::0;;;48502:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;48423:3:0::1;;48373:241;;;-1:-1:-1::0;48637:10:0::1;48624:24;46713:441:::0;41993:8;;46897:4;;-1:-1:-1;;;;;41993:8:0;41979:10;:22;41971:67;;;;;-1:-1:-1;;;41971:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41971:67:0;;;;;;;;;;;;;;;46948:4:::1;::::0;-1:-1:-1;;;;;46923:30:0;;::::1;46948:4:::0;::::1;46923:30;46919:206;;;46970:45;46981:15;46998:12;46970:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;;46919:206;;;47048:65;-1:-1:-1::0;;;;;47048:34:0;::::1;47083:15:::0;47100:12;47048:65:::1;:34;:65;:::i;:::-;-1:-1:-1::0;47142:4:0::1;46713:441:::0;;;;;:::o;43496:263::-;43663:4;43692:59;43698:12;43712:13;43727:19;;43692:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;43692:59:0;;;;;;;;;;;;;-1:-1:-1;43692:5:0;;-1:-1:-1;;43692:59:0:i;:::-;43685:66;;43496:263;;;;;;;:::o;39899:213::-;39386:10;39374:8;:6;:8::i;:::-;-1:-1:-1;;;;;39374:22:0;;39366:58;;;;;-1:-1:-1;;;39366:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39961:17:::1;39981:27;40002:5;39981:20;:27::i;:::-;39961:47;;40038:1;40023:12;:16;40015:54;;;::::0;;-1:-1:-1;;;40015:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;40076:30;40086:5;40093:12;40076:9;:30::i;42156:92::-:0;41993:8;;-1:-1:-1;;;;;41993:8:0;41979:10;:22;41971:67;;;;;-1:-1:-1;;;41971:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41971:67:0;;;;;;;;;;;;;;;42221:4:::1;:19:::0;;-1:-1:-1;;;;;;42221:19:0::1;-1:-1:-1::0;;;;;42221:19:0;;;::::1;::::0;;;::::1;::::0;;42156:92::o;43767:606::-;43963:4;43993:39;43963:4;44018:13;43993:39;:24;:39;:::i;:::-;43985:95;;;;-1:-1:-1;;;43985:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44114:1;44099:12;:16;44091:68;;;;-1:-1:-1;;;44091:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44170:79;-1:-1:-1;;;;;44170:38:0;;44209:10;44229:4;44236:12;44170:79;:38;:79;:::i;:::-;44265:78;44271:13;44286:10;44298:12;44312:19;44333:9;44265:78;;;;-1:-1:-1;;;;;44265:78:0;-1:-1:-1;;;;;44265:78:0;;;;;;-1:-1:-1;;;;;44265:78:0;-1:-1:-1;;;;;44265:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;44265:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44265:78:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;44265:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44361:4:0;43767:606;;;;;;:::o;45334:178::-;45442:4;45471:33;45480:19;;45471:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;45471:33:0;;;;;;;;;;;;;-1:-1:-1;45471:8:0;;-1:-1:-1;;45471:33:0:i;:::-;45464:40;45334:178;-1:-1:-1;;;45334:178:0:o;47949:341::-;41993:8;;-1:-1:-1;;;;;41993:8:0;41979:10;:22;41971:67;;;;;-1:-1:-1;;;41971:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41971:67:0;;;;;;;;;;;;;;;48059:22:::1;48084:24;:15;:22;:24::i;:::-;48059:49:::0;-1:-1:-1;48124:9:0::1;48119:164;48143:14;48139:1;:18;48119:164;;;48179:20;48202:21;48179:20:::0;;48202:21:::1;:18;:21;:::i;:::-;48179:44;;48238:33;48253:3;48258:12;48238:14;:33::i;:::-;-1:-1:-1::0;48159:3:0::1;;48119:164;;;;42049:1;47949:341:::0;:::o;43228:260::-;43280:20;43333:24;:15;:22;:24::i;:::-;43319:39;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;43319:39:0;-1:-1:-1;43313:45:0;-1:-1:-1;43374:9:0;43369:112;43393:24;:15;:22;:24::i;:::-;43389:1;:28;43369:112;;;43448:21;:15;43467:1;43448:21;:18;:21;:::i;:::-;43439:3;43443:1;43439:6;;;;;;;;-1:-1:-1;;;;;43439:30:0;;;:6;;;;;;;;;;;:30;43419:3;;43369:112;;;;43228:260;:::o;42256:101::-;41993:8;;-1:-1:-1;;;;;41993:8:0;41979:10;:22;41971:67;;;;;-1:-1:-1;;;41971:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;41971:67:0;;;;;;;;;;;;;;;42329:8:::1;:20:::0;;-1:-1:-1;;;;;;42329:20:0::1;-1:-1:-1::0;;;;;42329:20:0;;;::::1;::::0;;;::::1;::::0;;42256:101::o;30072:158::-;30152:4;30176:46;30186:3;-1:-1:-1;;;;;30206:14:0;;30176:9;:46::i;48862:381::-;48992:39;:15;49017:13;48992:39;:24;:39;:::i;:::-;48988:248;;;49063:46;;;-1:-1:-1;;;49063:46:0;;49103:4;49063:46;;;;;;49048:12;;-1:-1:-1;;;;;49063:31:0;;;;;:46;;;;;;;;;;;;;;;:31;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;49063:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49063:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49063:46:0;;-1:-1:-1;49124:48:0;-1:-1:-1;;;;;49124:34:0;;49159:3;49063:46;49124:48;:34;:48;:::i;:::-;49187:37;:15;49210:13;49187:37;:22;:37;:::i;:::-;;48988:248;48862:381;;:::o;46017:688::-;46208:4;;:27;;;-1:-1:-1;;;46208:27:0;;;;;;;;;;46186:4;;-1:-1:-1;;;;;46208:4:0;;:13;;:27;;;;;46186:4;;46208:27;;;;;;;46186:4;46208;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;46208:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46208:27:0;;;;46555:12;46573:15;-1:-1:-1;;;;;46573:20:0;46600:12;46614:9;46573:51;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;46573:51:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;46554:70:0;;;46643:7;46635:62;;;;-1:-1:-1;;;46635:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46017:688;;;;;;:::o;29518:143::-;29588:4;29612:41;29617:3;-1:-1:-1;;;;;29637:14:0;;29612:4;:41::i;29837:149::-;29910:4;29934:44;29942:3;-1:-1:-1;;;;;29962:14:0;;29934:7;:44::i;30316:117::-;30379:7;30406:19;30414:3;30406:7;:19::i;30777:149::-;30851:7;30894:22;30898:3;30910:5;30894:3;:22::i;21375:177::-;21485:58;;;-1:-1:-1;;;;;21485:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21485:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21458:86:0;;21478:5;;21458:19;:86::i;42503:87::-;42574:8;;-1:-1:-1;;;;;42574:8:0;42503:87;:::o;42598:179::-;42674:4;42698:31;42674:4;42723:5;42698:31;:24;:31;:::i;:::-;:71;;42736:33;42763:5;42736:26;:33::i;:::-;42698:71;;;-1:-1:-1;42732:1:0;;42598:179;-1:-1:-1;42598:179:0:o;40118:292::-;-1:-1:-1;;;;;40194:22:0;;40190:151;;40227:28;;:10;;:28;;;;;40247:7;;40227:28;;;;40247:7;40227:10;:28;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40227:28:0;40190:151;;;40278:55;-1:-1:-1;;;;;40278:34:0;;40313:10;40325:7;40278:55;:34;:55;:::i;:::-;40352:52;;;;;;;;-1:-1:-1;;;;;40352:52:0;;;40369:10;;40352:52;;;;;;;;;40118:292;;:::o;21560:205::-;21688:68;;;-1:-1:-1;;;;;21688:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21688:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21661:96:0;;21681:5;;21661:19;:96::i;28392:129::-;28465:4;28489:19;;;:12;;;;;:19;;;;;;:24;;;28392:129::o;26172:414::-;26235:4;26257:21;26267:3;26272:5;26257:9;:21::i;:::-;26252:327;;-1:-1:-1;27:10;;39:1;23:18;;;45:23;;26295:11:0;:23;;;;;;;;;;;;;26478:18;;26456:19;;;:12;;;:19;;;;;;:40;;;;26511:11;;26252:327;-1:-1:-1;26562:5:0;26555:12;;26762:1544;26828:4;26967:19;;;:12;;;:19;;;;;;27003:15;;26999:1300;;27438:18;;-1:-1:-1;;27389:14:0;;;;27438:22;;;;27365:21;;27438:3;;:22;;27725;;;;;;;;;;;;;;27705:42;;27871:9;27842:3;:11;;27854:13;27842:26;;;;;;;;;;;;;;;;;;;:38;;;;27948:23;;;27990:1;27948:12;;;:23;;;;;;27974:17;;;27948:43;;28100:17;;27948:3;;28100:17;;;;;;;;;;;;;;;;;;;;;;28195:3;:12;;:19;28208:5;28195:19;;;;;;;;;;;28188:26;;;28238:4;28231:11;;;;;;;;26999:1300;28282:5;28275:12;;;;;28607:109;28690:18;;28607:109::o;29060:204::-;29155:18;;29127:7;;29155:26;-1:-1:-1;29147:73:0;;;;-1:-1:-1;;;29147:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29238:3;:11;;29250:5;29238:18;;;;;;;;;;;;;;;;29231:25;;29060:204;;;;:::o;23680:761::-;24104:23;24130:69;24158:4;24130:69;;;;;;;;;;;;;;;;;24138:5;-1:-1:-1;;;;;24130:27:0;;;:69;;;;;:::i;:::-;24214:17;;24104:95;;-1:-1:-1;24214:21:0;24210:224;;24356:10;24345:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24345:30:0;24337:85;;;;-1:-1:-1;;;24337:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40476:217;40551:18;-1:-1:-1;;;;;40594:14:0;;;:93;;40649:38;;;-1:-1:-1;;;40649:38:0;;40681:4;40649:38;;;;;;-1:-1:-1;;;;;40649:23:0;;;;;:38;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;40649:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40649:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40649:38:0;40594:93;;;40618:21;40578:109;40476:217;-1:-1:-1;;40476:217:0:o;18323:196::-;18426:12;18458:53;18481:6;18489:4;18495:1;18498:12;19830;19863:18;19874:6;19863:10;:18::i;:::-;19855:60;;;;;-1:-1:-1;;;19855:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19989:12;20003:23;20030:6;-1:-1:-1;;;;;20030:11:0;20050:8;20061:4;20030:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;20030:36:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;19988:78:0;;;;20081:7;20077:595;;;20112:10;-1:-1:-1;20105:17:0;;-1:-1:-1;20105:17:0;20077:595;20226:17;;:21;20222:439;;20489:10;20483:17;20550:15;20537:10;20533:2;20529:19;20522:44;20437:148;20632:12;20625:20;;-1:-1:-1;;;20625:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20625:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15405:422;15772:20;15811:8;;;15405:422::o
Swarm Source
ipfs://1b3e353915fa3418f541783fb004f75d5d4b45318bd732d76c17853f16244923
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,702,596.32 | 950,000.078 | $3,517,466,795,665.74 | |
ETH | <0.01% | $0.461053 | 24,989.3609 | $11,521.42 | |
ETH | <0.01% | $0.230423 | 44,982.0415 | $10,364.9 | |
ETH | <0.01% | $0.177664 | 46,235.7002 | $8,214.42 | |
ETH | <0.01% | $0.999961 | 5,921.1889 | $5,920.96 | |
ETH | <0.01% | $13.55 | 158.0143 | $2,141.09 | |
ETH | <0.01% | $0.021731 | 79,961.5049 | $1,737.62 | |
ETH | <0.01% | $0.090821 | 17,910.2186 | $1,626.62 | |
ETH | <0.01% | $0.657062 | 1,597.2859 | $1,049.52 | |
ETH | <0.01% | $0.354785 | 1,597.4479 | $566.75 | |
ETH | <0.01% | $0.55956 | 549.8905 | $307.7 | |
ETH | <0.01% | $1,289.98 | 0.1842 | $237.61 | |
ETH | <0.01% | $2.75 | 66.3796 | $182.54 | |
ETH | <0.01% | $0.003536 | 27,978.25 | $98.94 | |
ETH | <0.01% | $1.67 | 44.0095 | $73.5 | |
ETH | <0.01% | $24.37 | 2.8184 | $68.69 | |
ETH | <0.01% | $1.32 | 30.0095 | $39.61 | |
ETH | <0.01% | $7,690.55 | 0.00347319 | $26.71 | |
ETH | <0.01% | $81.65 | 0.0595 | $4.86 | |
BSC | <0.01% | $685.79 | 0.0515 | $35.32 | |
BASE | <0.01% | $0.012595 | 100 | $1.26 |
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.