Source Code
Latest 25 from a total of 26 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Push | 20289198 | 611 days ago | IN | 0 ETH | 0.00088607 | ||||
| Push | 19942236 | 660 days ago | IN | 0 ETH | 0.00218665 | ||||
| Push | 19818903 | 677 days ago | IN | 0 ETH | 0.0024953 | ||||
| Push | 19768782 | 684 days ago | IN | 0 ETH | 0.00414251 | ||||
| Push | 19719590 | 691 days ago | IN | 0 ETH | 0.00349702 | ||||
| Push | 19281886 | 752 days ago | IN | 0 ETH | 0.00838602 | ||||
| Push | 19188984 | 765 days ago | IN | 0 ETH | 0.01221727 | ||||
| Push | 19028045 | 788 days ago | IN | 0 ETH | 0.00896382 | ||||
| Push | 18963443 | 797 days ago | IN | 0 ETH | 0.00569989 | ||||
| Push | 18828427 | 816 days ago | IN | 0 ETH | 0.01278103 | ||||
| Push | 18719501 | 831 days ago | IN | 0 ETH | 0.00943738 | ||||
| Push | 18500054 | 862 days ago | IN | 0 ETH | 0.00630903 | ||||
| Push | 18377382 | 879 days ago | IN | 0 ETH | 0.00195646 | ||||
| Push | 18328257 | 886 days ago | IN | 0 ETH | 0.00200031 | ||||
| Push | 18321155 | 887 days ago | IN | 0 ETH | 0.00285393 | ||||
| Push | 18219569 | 901 days ago | IN | 0 ETH | 0.00243141 | ||||
| Push | 18092655 | 919 days ago | IN | 0 ETH | 0.00352219 | ||||
| Push | 17996928 | 932 days ago | IN | 0 ETH | 0.00259367 | ||||
| Push | 17892827 | 947 days ago | IN | 0 ETH | 0.00840748 | ||||
| Push | 17835618 | 955 days ago | IN | 0 ETH | 0.00605796 | ||||
| Push | 17643254 | 982 days ago | IN | 0 ETH | 0.00860217 | ||||
| Push | 17591581 | 989 days ago | IN | 0 ETH | 0.00404054 | ||||
| Push | 17115754 | 1056 days ago | IN | 0 ETH | 0.00808328 | ||||
| Deny | 15596815 | 1269 days ago | IN | 0 ETH | 0.00030402 | ||||
| Rely | 15596815 | 1269 days ago | IN | 0 ETH | 0.00061746 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RwaInputConduit3
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-FileCopyrightText: © 2021 Lev Livnev <lev@liv.nev.org.uk>
// SPDX-FileCopyrightText: © 2022 Dai Foundation <www.daifoundation.org>
// SPDX-License-Identifier: AGPL-3.0-or-later
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
pragma solidity 0.6.12;
import {GemAbstract} from "dss-interfaces/ERC/GemAbstract.sol";
import {DaiAbstract} from "dss-interfaces/dss/DaiAbstract.sol";
import {PsmAbstract} from "dss-interfaces/dss/PsmAbstract.sol";
import {GemJoinAbstract} from "dss-interfaces/dss/GemJoinAbstract.sol";
/**
* @author Lev Livnev <lev@liv.nev.org.uk>
* @author Nazar Duchak <nazar@clio.finance>
* @title An Input Conduit for real-world assets (RWA).
* @dev This contract differs from the original [RwaInputConduit](https://github.com/makerdao/MIP21-RWA-Example/blob/fce06885ff89d10bf630710d4f6089c5bba94b4d/src/RwaConduit.sol#L20-L39):
* - The caller of `push()` is not required to hold MakerDAO governance tokens.
* - The `push()` method is permissioned.
* - `push()` permissions are managed by `mate()`/`hate()` methods.
* - Requires DAI, GEM and PSM addresses in the constructor.
* - DAI and GEM are immutable, PSM can be replaced as long as it uses the same DAI and GEM.
* - The `push()` method swaps entire GEM balance to DAI using PSM.
* - THe `push(uint256)` method swaps specified amount of GEM to DAI using PSM.
* - The `quit()` method allows moving outstanding GEM balance to `quitTo`. It can be called only by `mate`d addresses.
* - The `quit(uint256)` method allows moving the specified amount of GEM balance to `quitTo`. It can be called only by `mate`d addresses.
* - The `file(bytes32, address)` method allows updating `quitTo`, `to`, `psm` addresses. It can be called only by the admin.
*/
contract RwaInputConduit3 {
/// @notice PSM GEM token contract address.
GemAbstract public immutable gem;
/// @notice DAI token contract address.
DaiAbstract public immutable dai;
/// @dev DAI/GEM resolution difference.
uint256 private immutable to18ConversionFactor;
/// @notice Addresses with admin access on this contract. `wards[usr]`
mapping(address => uint256) public wards;
/// @notice Addresses with push access on this contract. `may[usr]`
mapping(address => uint256) public may;
/// @notice PSM contract address.
PsmAbstract public psm;
/// @notice Recipient address for DAI.
address public to;
/// @notice Destination address for GEM after calling `quit`.
address public quitTo;
/**
* @notice `usr` was granted admin access.
* @param usr The user address.
*/
event Rely(address indexed usr);
/**
* @notice `usr` admin access was revoked.
* @param usr The user address.
*/
event Deny(address indexed usr);
/**
* @notice `usr` was granted push access.
* @param usr The user address.
*/
event Mate(address indexed usr);
/**
* @notice `usr` push access was revoked.
* @param usr The user address.
*/
event Hate(address indexed usr);
/**
* @notice `wad` amount of Dai was pushed to `to`.
* @param to Recipient address for DAI.
* @param wad The amount of DAI.
*/
event Push(address indexed to, uint256 wad);
/**
* @notice A contract parameter was updated.
* @param what The changed parameter name. Currently the supported values are: "quitTo", "to", "psm".
* @param data The new value of the parameter.
*/
event File(bytes32 indexed what, address data);
/**
* @notice The conduit outstanding GEM balance was flushed out to `quitTo`.
* @param quitTo The quitTo address.
* @param wad The amount of GEM flushed out.
*/
event Quit(address indexed quitTo, uint256 wad);
/**
* @notice `amt` outstanding `token` balance was flushed out to `usr`.
* @param token The token address.
* @param usr The destination address.
* @param amt The amount of `token` flushed out.
*/
event Yank(address indexed token, address indexed usr, uint256 amt);
modifier auth() {
require(wards[msg.sender] == 1, "RwaInputConduit3/not-authorized");
_;
}
modifier onlyMate() {
require(may[msg.sender] == 1, "RwaInputConduit3/not-mate");
_;
}
/**
* @notice Defines addresses and gives `msg.sender` admin access.
* @param _psm PSM contract address.
* @param _dai DAI contract address.
* @param _gem GEM contract address.
* @param _to RwaUrn contract address.
*/
constructor(
address _dai,
address _gem,
address _psm,
address _to
) public {
require(_to != address(0), "RwaInputConduit3/invalid-to-address");
require(PsmAbstract(_psm).dai() == _dai, "RwaInputConduit3/wrong-dai-for-psm");
require(GemJoinAbstract(PsmAbstract(_psm).gemJoin()).gem() == _gem, "RwaInputConduit3/wrong-gem-for-psm");
// We assume that DAI will alway have 18 decimals
to18ConversionFactor = 10**_sub(18, GemAbstract(_gem).decimals());
psm = PsmAbstract(_psm);
dai = DaiAbstract(_dai);
gem = GemAbstract(_gem);
to = _to;
// Give unlimited approval to PSM gemjoin
GemAbstract(_gem).approve(address(psm.gemJoin()), type(uint256).max);
wards[msg.sender] = 1;
emit Rely(msg.sender);
}
/*//////////////////////////////////
Authorization
//////////////////////////////////*/
/**
* @notice Grants `usr` admin access to this contract.
* @param usr The user address.
*/
function rely(address usr) external auth {
wards[usr] = 1;
emit Rely(usr);
}
/**
* @notice Revokes `usr` admin access from this contract.
* @param usr The user address.
*/
function deny(address usr) external auth {
wards[usr] = 0;
emit Deny(usr);
}
/**
* @notice Grants `usr` push access to this contract.
* @param usr The user address.
*/
function mate(address usr) external auth {
may[usr] = 1;
emit Mate(usr);
}
/**
* @notice Revokes `usr` push access from this contract.
* @param usr The user address.
*/
function hate(address usr) external auth {
may[usr] = 0;
emit Hate(usr);
}
/*//////////////////////////////////
Administration
//////////////////////////////////*/
/**
* @notice Updates a contract parameter.
* @param what The changed parameter name. `"to", "quitTo", "psm"`
* @param data The new value of the parameter.
*/
function file(bytes32 what, address data) external auth {
if (what == "quitTo") {
quitTo = data;
} else if (what == "to") {
to = data;
} else if (what == "psm") {
require(PsmAbstract(data).dai() == address(dai), "RwaInputConduit3/wrong-dai-for-psm");
require(
GemJoinAbstract(PsmAbstract(data).gemJoin()).gem() == address(gem),
"RwaInputConduit3/wrong-gem-for-psm"
);
// Revoke approval for the old PSM gemjoin
gem.approve(address(psm.gemJoin()), 0);
// Give unlimited approval to the new PSM gemjoin
gem.approve(address(PsmAbstract(data).gemJoin()), type(uint256).max);
psm = PsmAbstract(data);
} else {
revert("RwaInputConduit3/unrecognised-param");
}
emit File(what, data);
}
/*//////////////////////////////////
Operations
//////////////////////////////////*/
/**
* @notice Swaps the GEM balance of this contract into DAI through the PSM and push it into the recipient address.
* @dev `msg.sender` must have received push access through `mate()`.
*/
function push() external onlyMate {
_doPush(gem.balanceOf(address(this)));
}
/**
* @notice Swaps the specified amount of GEM into DAI through the PSM and push it into the recipient address.
* @dev `msg.sender` must have received push access through `mate()`.
* @param amt Gem amount.
*/
function push(uint256 amt) external onlyMate {
_doPush(amt);
}
/**
* @notice Flushes out any GEM balance to `quitTo` address.
* @dev `msg.sender` must have received push access through `mate()`.
*/
function quit() external onlyMate {
_doQuit(gem.balanceOf(address(this)));
}
/**
* @notice Flushes out the specified amount of GEM balance to `quitTo` address.
* @dev `msg.sender` must have received push access through `mate()`.
* @param amt Gem amount.
*/
function quit(uint256 amt) external onlyMate {
_doQuit(amt);
}
/**
* @notice Flushes out `amt` of `token` sitting in this contract to `usr` address.
* @dev Can only be called by the admin.
* @param token Token address.
* @param usr Destination address.
* @param amt Token amount.
*/
function yank(
address token,
address usr,
uint256 amt
) external auth {
GemAbstract(token).transfer(usr, amt);
emit Yank(token, usr, amt);
}
/**
* @notice Calculates the amount of DAI received for swapping `amt` of GEM.
* @param amt GEM amount.
* @return wad Expected DAI amount.
*/
function expectedDaiWad(uint256 amt) public view returns (uint256 wad) {
uint256 amt18 = _mul(amt, to18ConversionFactor);
uint256 fee = _mul(amt18, psm.tin()) / WAD;
return _sub(amt18, fee);
}
/**
* @notice Calculates the required amount of GEM to get `wad` amount of DAI.
* @param wad DAI amount.
* @return amt Required GEM amount.
*/
function requiredGemAmt(uint256 wad) external view returns (uint256 amt) {
return _mul(wad, WAD) / _mul(_sub(WAD, psm.tin()), to18ConversionFactor);
}
/**
* @notice Swaps the specified amount of GEM into DAI through the PSM and push it into the recipient address.
* @param amt GEM amount.
*/
function _doPush(uint256 amt) internal {
require(to != address(0), "RwaInputConduit3/invalid-to-address");
psm.sellGem(to, amt);
emit Push(to, expectedDaiWad(amt));
}
/**
* @notice Flushes out the specified amount of GEM to the `quitTo` address.
* @param amt GEM amount.
*/
function _doQuit(uint256 amt) internal {
require(quitTo != address(0), "RwaInputConduit3/invalid-quit-to-address");
gem.transfer(quitTo, amt);
emit Quit(quitTo, amt);
}
/*//////////////////////////////////
Math
//////////////////////////////////*/
uint256 internal constant WAD = 10**18;
function _sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
require((z = x - y) <= x, "Math/sub-overflow");
}
function _mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
require(y == 0 || (z = x * y) / y == x, "Math/mul-overflow");
}
}// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity >=0.5.12;
// A base ERC-20 abstract class
// https://eips.ethereum.org/EIPS/eip-20
interface GemAbstract {
function totalSupply() external view returns (uint256);
function balanceOf(address) external view returns (uint256);
function allowance(address, address) external view returns (uint256);
function approve(address, uint256) external returns (bool);
function transfer(address, uint256) external returns (bool);
function transferFrom(address, address, uint256) external returns (bool);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity >=0.5.12;
// https://github.com/makerdao/dss/blob/master/src/dai.sol
interface DaiAbstract {
function wards(address) external view returns (uint256);
function rely(address) external;
function deny(address) external;
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function version() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address) external view returns (uint256);
function allowance(address, address) external view returns (uint256);
function nonces(address) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external view returns (bytes32);
function transfer(address, uint256) external returns (bool);
function transferFrom(address, address, uint256) external returns (bool);
function mint(address, uint256) external;
function burn(address, uint256) external;
function approve(address, uint256) external returns (bool);
function push(address, uint256) external;
function pull(address, uint256) external;
function move(address, address, uint256) external;
function permit(address, address, uint256, uint256, bool, uint8, bytes32, bytes32) external;
}// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity >=0.5.12;
// https://github.com/makerdao/dss-psm/blob/master/src/psm.sol
interface PsmAbstract {
function wards(address) external view returns (uint256);
function rely(address) external;
function deny(address) external;
function vat() external view returns (address);
function gemJoin() external view returns (address);
function dai() external view returns (address);
function daiJoin() external view returns (address);
function ilk() external view returns (bytes32);
function vow() external view returns (address);
function tin() external view returns (uint256);
function tout() external view returns (uint256);
function file(bytes32 what, uint256 data) external;
function hope(address) external;
function nope(address) external;
function sellGem(address usr, uint256 gemAmt) external;
function buyGem(address usr, uint256 gemAmt) external;
}// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity >=0.5.12;
// https://github.com/makerdao/dss/blob/master/src/join.sol
interface GemJoinAbstract {
function wards(address) external view returns (uint256);
function rely(address) external;
function deny(address) external;
function vat() external view returns (address);
function ilk() external view returns (bytes32);
function gem() external view returns (address);
function dec() external view returns (uint256);
function live() external view returns (uint256);
function cage() external;
function join(address, uint256) external;
function exit(address, uint256) external;
}{
"remappings": [
"ds-auth/=lib/ds-token/lib/ds-auth/src/",
"ds-math/=lib/ds-math/src/",
"ds-note/=lib/ds-value/lib/ds-thing/lib/ds-note/src/",
"ds-test/=lib/ds-test/src/",
"ds-thing/=lib/ds-value/lib/ds-thing/src/",
"ds-token/=lib/ds-token/src/",
"ds-value/=lib/ds-value/src/",
"dss-exec-lib/=lib/dss-exec-lib/src/",
"dss-gem-joins/=lib/dss-gem-joins/src/",
"dss-interfaces/=lib/dss-interfaces/src/",
"dss/=lib/dss/src/",
"forge-std/=lib/forge-std/src/",
"forward-proxy/=lib/forward-proxy/src/",
"mip21-toolkit/=lib/mip21-toolkit/src/"
],
"optimizer": {
"enabled": false,
"runs": 200
},
"metadata": {
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "istanbul",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_dai","type":"address"},{"internalType":"address","name":"_gem","type":"address"},{"internalType":"address","name":"_psm","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"address","name":"data","type":"address"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Hate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Mate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Push","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"quitTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Quit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Yank","type":"event"},{"inputs":[],"name":"dai","outputs":[{"internalType":"contract DaiAbstract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"expectedDaiWad","outputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"address","name":"data","type":"address"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gem","outputs":[{"internalType":"contract GemAbstract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"hate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"mate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"may","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"psm","outputs":[{"internalType":"contract PsmAbstract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"push","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"push","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"quit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quitTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"requiredGemAmt","outputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"to","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"yank","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60e06040523480156200001157600080fd5b5060405162002a6f38038062002a6f833981810160405260808110156200003757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018062002a2a6023913960400191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1663f4b9fa756040518163ffffffff1660e01b815260040160206040518083038186803b1580156200014c57600080fd5b505afa15801562000161573d6000803e3d6000fd5b505050506040513d60208110156200017857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614620001f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018062002a4d6022913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff166301664f666040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025557600080fd5b505afa1580156200026a573d6000803e3d6000fd5b505050506040513d60208110156200028157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16637bd2bea76040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d857600080fd5b505afa158015620002ed573d6000803e3d6000fd5b505050506040513d60208110156200030457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161462000383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018062002a086022913960400191505060405180910390fd5b6200041c60128473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620003d057600080fd5b505afa158015620003e5573d6000803e3d6000fd5b505050506040513d6020811015620003fc57600080fd5b810190808051906020019092919050505060ff166200071c60201b60201c565b600a0a60c0818152505081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166301664f666040518163ffffffff1660e01b815260040160206040518083038186803b1580156200059b57600080fd5b505afa158015620005b0573d6000803e3d6000fd5b505050506040513d6020811015620005c757600080fd5b81019080805190602001909291905050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156200064d57600080fd5b505af115801562000662573d6000803e3d6000fd5b505050506040513d60208110156200067957600080fd5b81019080805190602001909291905050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6060405160405180910390a250505050620007a0565b60008282840391508111156200079a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4d6174682f7375622d6f766572666c6f7700000000000000000000000000000081525060200191505060405180910390fd5b92915050565b60805160601c60a05160601c60c05161220d620007fb600039806108065280611a2a5250806110f05280611a71525080610a405280610b1b528061121452806113b852806115285280611b4c5280611cbd525061220d6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063959ac484116100ad578063d663159411610071578063d663159414610478578063daddce52146104ac578063e11746391461051a578063f4b9fa751461055c578063fc2b8cc31461059057610121565b8063959ac4841461031c5780639c52a7f11461034a578063a81de4f81461038e578063bf353dbb146103d2578063d4e8be831461042a57610121565b806359ac371b116100f457806359ac371b1461021457806361e86cad1461025857806365fae35e1461029a5780637bd2bea7146102de5780638035f0ce1461031257610121565b806304bda26214610126578063131519811461015a578063344cbc681461018e578063453638ce146101bc575b600080fd5b61012e61059a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101626105c0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101ba600480360360208110156101a457600080fd5b81019080803590602001909291905050506105e6565b005b6101fe600480360360208110156101d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106a6565b6040518082815260200191505060405180910390f35b6102566004803603602081101561022a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106be565b005b6102846004803603602081101561026e57600080fd5b81019080803590602001909291905050506107fd565b6040518082815260200191505060405180910390f35b6102dc600480360360208110156102b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610900565b005b6102e6610a3e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61031a610a62565b005b6103486004803603602081101561033257600080fd5b8101908080359060200190929190505050610be2565b005b61038c6004803603602081101561036057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ca2565b005b6103d0600480360360208110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610de0565b005b610414600480360360208110156103e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f1e565b6040518082815260200191505060405180910390f35b6104766004803603604081101561044057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f36565b005b61048061177e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610518600480360360608110156104c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117a4565b005b6105466004803603602081101561053057600080fd5b810190808035906020019092919050505061196f565b6040518082815260200191505060405180910390f35b610564611a6f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610598611a93565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f527761496e707574436f6e64756974332f6e6f742d6d6174650000000000000081525060200191505060405180910390fd5b6106a381611c13565b50565b60016020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f04942e12b9e2310f85c952df158815306377bb9f797dc3677d03be357427c53b60405160405180910390a250565b60008061082a837f0000000000000000000000000000000000000000000000000000000000000000611e1d565b90506000670de0b6b3a76400006108e383600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663568d4b6f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108a357600080fd5b505afa1580156108b7573d6000803e3d6000fd5b505050506040513d60208110156108cd57600080fd5b8101908080519060200190929190505050611e1d565b816108ea57fe5b0490506108f78282611eb2565b92505050919050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146109b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6060405160405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f527761496e707574436f6e64756974332f6e6f742d6d6174650000000000000081525060200191505060405180910390fd5b610be07f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610ba057600080fd5b505afa158015610bb4573d6000803e3d6000fd5b505050506040513d6020811015610bca57600080fd5b8101908080519060200190929190505050611f35565b565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610c96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f527761496e707574436f6e64756974332f6e6f742d6d6174650000000000000081525060200191505060405180910390fd5b610c9f81611f35565b50565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b60405160405180910390a250565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167fe25de3b40ce055247fe4ef6c00f96c8c3b6530536701ba1c48296b30b4bb0d9560405160405180910390a250565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610fea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b7f71756974546f00000000000000000000000000000000000000000000000000008214156110585780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061172c565b7f746f0000000000000000000000000000000000000000000000000000000000008214156110c65780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061172b565b7f70736d00000000000000000000000000000000000000000000000000000000008214156116d9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663f4b9fa756040518163ffffffff1660e01b815260040160206040518083038186803b15801561116b57600080fd5b505afa15801561117f573d6000803e3d6000fd5b505050506040513d602081101561119557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806121b66022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff166301664f666040518163ffffffff1660e01b815260040160206040518083038186803b15801561128f57600080fd5b505afa1580156112a3573d6000803e3d6000fd5b505050506040513d60208110156112b957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16637bd2bea76040518163ffffffff1660e01b815260040160206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d602081101561133957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806121496022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166301664f666040518163ffffffff1660e01b815260040160206040518083038186803b15801561145a57600080fd5b505afa15801561146e573d6000803e3d6000fd5b505050506040513d602081101561148457600080fd5b810190808051906020019092919050505060006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114ea57600080fd5b505af11580156114fe573d6000803e3d6000fd5b505050506040513d602081101561151457600080fd5b8101908080519060200190929190505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38273ffffffffffffffffffffffffffffffffffffffff166301664f666040518163ffffffff1660e01b815260040160206040518083038186803b1580156115a857600080fd5b505afa1580156115bc573d6000803e3d6000fd5b505050506040513d60208110156115d257600080fd5b81019080805190602001909291905050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561165757600080fd5b505af115801561166b573d6000803e3d6000fd5b505050506040513d602081101561168157600080fd5b81019080805190602001909291905050505080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061172a565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806121266023913960400191505060405180910390fd5b5b5b817f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156118c957600080fd5b505af11580156118dd573d6000803e3d6000fd5b505050506040513d60208110156118f357600080fd5b8101908080519060200190929190505050508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f3336d8973868f7727fbbf287f4fd9fb0237fe2696b301f8a46c563cb46d7b419836040518082815260200191505060405180910390a3505050565b6000611a4e611a28670de0b6b3a7640000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663568d4b6f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e857600080fd5b505afa1580156119fc573d6000803e3d6000fd5b505050506040513d6020811015611a1257600080fd5b8101908080519060200190929190505050611eb2565b7f0000000000000000000000000000000000000000000000000000000000000000611e1d565b611a6083670de0b6b3a7640000611e1d565b81611a6757fe5b049050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611b47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f527761496e707574436f6e64756974332f6e6f742d6d6174650000000000000081525060200191505060405180910390fd5b611c117f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bd157600080fd5b505afa158015611be5573d6000803e3d6000fd5b505050506040513d6020811015611bfb57600080fd5b8101908080519060200190929190505050611c13565b565b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611cbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061218e6028913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d6e57600080fd5b505af1158015611d82573d6000803e3d6000fd5b505050506040513d6020811015611d9857600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fc81bfec1ac9d038698c3b15fc900dafbff3af4b9f26062f895dd08a676ec78ae826040518082815260200191505060405180910390a250565b600080821480611e3a5750828283850292508281611e3757fe5b04145b611eac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4d6174682f6d756c2d6f766572666c6f7700000000000000000000000000000081525060200191505060405180910390fd5b92915050565b6000828284039150811115611f2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4d6174682f7375622d6f766572666c6f7700000000000000000000000000000081525060200191505060405180910390fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061216b6023913960400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395991276600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561209257600080fd5b505af11580156120a6573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdf8180823cf670d41db21fa54ef9909b0bd724c931fbd55fe1fcbdc655ea2fb061210d836107fd565b6040518082815260200191505060405180910390a25056fe527761496e707574436f6e64756974332f756e7265636f676e697365642d706172616d527761496e707574436f6e64756974332f77726f6e672d67656d2d666f722d70736d527761496e707574436f6e64756974332f696e76616c69642d746f2d61646472657373527761496e707574436f6e64756974332f696e76616c69642d717569742d746f2d61646472657373527761496e707574436f6e64756974332f77726f6e672d6461692d666f722d70736da2646970667358221220cb1fcba61b09cbb6aa41c9386343f9ab4832a129f3a123db3a2fee602228f12064736f6c634300060c0033527761496e707574436f6e64756974332f77726f6e672d67656d2d666f722d70736d527761496e707574436f6e64756974332f696e76616c69642d746f2d61646472657373527761496e707574436f6e64756974332f77726f6e672d6461692d666f722d70736d0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000089b78cfa322f6c5de0abceecab66aee45393cc5a000000000000000000000000ef1b095f700be471981aae025f92b03091c3ad47
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063959ac484116100ad578063d663159411610071578063d663159414610478578063daddce52146104ac578063e11746391461051a578063f4b9fa751461055c578063fc2b8cc31461059057610121565b8063959ac4841461031c5780639c52a7f11461034a578063a81de4f81461038e578063bf353dbb146103d2578063d4e8be831461042a57610121565b806359ac371b116100f457806359ac371b1461021457806361e86cad1461025857806365fae35e1461029a5780637bd2bea7146102de5780638035f0ce1461031257610121565b806304bda26214610126578063131519811461015a578063344cbc681461018e578063453638ce146101bc575b600080fd5b61012e61059a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101626105c0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101ba600480360360208110156101a457600080fd5b81019080803590602001909291905050506105e6565b005b6101fe600480360360208110156101d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106a6565b6040518082815260200191505060405180910390f35b6102566004803603602081101561022a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106be565b005b6102846004803603602081101561026e57600080fd5b81019080803590602001909291905050506107fd565b6040518082815260200191505060405180910390f35b6102dc600480360360208110156102b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610900565b005b6102e6610a3e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61031a610a62565b005b6103486004803603602081101561033257600080fd5b8101908080359060200190929190505050610be2565b005b61038c6004803603602081101561036057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ca2565b005b6103d0600480360360208110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610de0565b005b610414600480360360208110156103e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f1e565b6040518082815260200191505060405180910390f35b6104766004803603604081101561044057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f36565b005b61048061177e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610518600480360360608110156104c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117a4565b005b6105466004803603602081101561053057600080fd5b810190808035906020019092919050505061196f565b6040518082815260200191505060405180910390f35b610564611a6f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610598611a93565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f527761496e707574436f6e64756974332f6e6f742d6d6174650000000000000081525060200191505060405180910390fd5b6106a381611c13565b50565b60016020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f04942e12b9e2310f85c952df158815306377bb9f797dc3677d03be357427c53b60405160405180910390a250565b60008061082a837f000000000000000000000000000000000000000000000000000000e8d4a51000611e1d565b90506000670de0b6b3a76400006108e383600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663568d4b6f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108a357600080fd5b505afa1580156108b7573d6000803e3d6000fd5b505050506040513d60208110156108cd57600080fd5b8101908080519060200190929190505050611e1d565b816108ea57fe5b0490506108f78282611eb2565b92505050919050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146109b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6060405160405180910390a250565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f527761496e707574436f6e64756974332f6e6f742d6d6174650000000000000081525060200191505060405180910390fd5b610be07f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610ba057600080fd5b505afa158015610bb4573d6000803e3d6000fd5b505050506040513d6020811015610bca57600080fd5b8101908080519060200190929190505050611f35565b565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610c96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f527761496e707574436f6e64756974332f6e6f742d6d6174650000000000000081525060200191505060405180910390fd5b610c9f81611f35565b50565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b60405160405180910390a250565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167fe25de3b40ce055247fe4ef6c00f96c8c3b6530536701ba1c48296b30b4bb0d9560405160405180910390a250565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610fea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b7f71756974546f00000000000000000000000000000000000000000000000000008214156110585780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061172c565b7f746f0000000000000000000000000000000000000000000000000000000000008214156110c65780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061172b565b7f70736d00000000000000000000000000000000000000000000000000000000008214156116d9577f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663f4b9fa756040518163ffffffff1660e01b815260040160206040518083038186803b15801561116b57600080fd5b505afa15801561117f573d6000803e3d6000fd5b505050506040513d602081101561119557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806121b66022913960400191505060405180910390fd5b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff166301664f666040518163ffffffff1660e01b815260040160206040518083038186803b15801561128f57600080fd5b505afa1580156112a3573d6000803e3d6000fd5b505050506040513d60208110156112b957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16637bd2bea76040518163ffffffff1660e01b815260040160206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d602081101561133957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806121496022913960400191505060405180910390fd5b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166301664f666040518163ffffffff1660e01b815260040160206040518083038186803b15801561145a57600080fd5b505afa15801561146e573d6000803e3d6000fd5b505050506040513d602081101561148457600080fd5b810190808051906020019092919050505060006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114ea57600080fd5b505af11580156114fe573d6000803e3d6000fd5b505050506040513d602081101561151457600080fd5b8101908080519060200190929190505050507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663095ea7b38273ffffffffffffffffffffffffffffffffffffffff166301664f666040518163ffffffff1660e01b815260040160206040518083038186803b1580156115a857600080fd5b505afa1580156115bc573d6000803e3d6000fd5b505050506040513d60208110156115d257600080fd5b81019080805190602001909291905050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561165757600080fd5b505af115801561166b573d6000803e3d6000fd5b505050506040513d602081101561168157600080fd5b81019080805190602001909291905050505080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061172a565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806121266023913960400191505060405180910390fd5b5b5b817f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f527761496e707574436f6e64756974332f6e6f742d617574686f72697a65640081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156118c957600080fd5b505af11580156118dd573d6000803e3d6000fd5b505050506040513d60208110156118f357600080fd5b8101908080519060200190929190505050508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f3336d8973868f7727fbbf287f4fd9fb0237fe2696b301f8a46c563cb46d7b419836040518082815260200191505060405180910390a3505050565b6000611a4e611a28670de0b6b3a7640000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663568d4b6f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e857600080fd5b505afa1580156119fc573d6000803e3d6000fd5b505050506040513d6020811015611a1257600080fd5b8101908080519060200190929190505050611eb2565b7f000000000000000000000000000000000000000000000000000000e8d4a51000611e1d565b611a6083670de0b6b3a7640000611e1d565b81611a6757fe5b049050919050565b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611b47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f527761496e707574436f6e64756974332f6e6f742d6d6174650000000000000081525060200191505060405180910390fd5b611c117f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bd157600080fd5b505afa158015611be5573d6000803e3d6000fd5b505050506040513d6020811015611bfb57600080fd5b8101908080519060200190929190505050611c13565b565b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611cbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061218e6028913960400191505060405180910390fd5b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d6e57600080fd5b505af1158015611d82573d6000803e3d6000fd5b505050506040513d6020811015611d9857600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fc81bfec1ac9d038698c3b15fc900dafbff3af4b9f26062f895dd08a676ec78ae826040518082815260200191505060405180910390a250565b600080821480611e3a5750828283850292508281611e3757fe5b04145b611eac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4d6174682f6d756c2d6f766572666c6f7700000000000000000000000000000081525060200191505060405180910390fd5b92915050565b6000828284039150811115611f2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4d6174682f7375622d6f766572666c6f7700000000000000000000000000000081525060200191505060405180910390fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061216b6023913960400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395991276600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561209257600080fd5b505af11580156120a6573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdf8180823cf670d41db21fa54ef9909b0bd724c931fbd55fe1fcbdc655ea2fb061210d836107fd565b6040518082815260200191505060405180910390a25056fe527761496e707574436f6e64756974332f756e7265636f676e697365642d706172616d527761496e707574436f6e64756974332f77726f6e672d67656d2d666f722d70736d527761496e707574436f6e64756974332f696e76616c69642d746f2d61646472657373527761496e707574436f6e64756974332f696e76616c69642d717569742d746f2d61646472657373527761496e707574436f6e64756974332f77726f6e672d6461692d666f722d70736da2646970667358221220cb1fcba61b09cbb6aa41c9386343f9ab4832a129f3a123db3a2fee602228f12064736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000089b78cfa322f6c5de0abceecab66aee45393cc5a000000000000000000000000ef1b095f700be471981aae025f92b03091c3ad47
-----Decoded View---------------
Arg [0] : _dai (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [1] : _gem (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [2] : _psm (address): 0x89B78CfA322F6C5dE0aBcEecab66Aee45393cC5A
Arg [3] : _to (address): 0xef1B095F700BE471981aae025f92B03091c3AD47
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [1] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [2] : 00000000000000000000000089b78cfa322f6c5de0abceecab66aee45393cc5a
Arg [3] : 000000000000000000000000ef1b095f700be471981aae025f92b03091c3ad47
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.