ETH Price: $2,089.79 (+1.81%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit244604582026-02-15 6:37:596 mins ago1771137479IN
USDD: sUSDD Token
0 ETH0.000007860.04641722
Deposit244603842026-02-15 6:23:1121 mins ago1771136591IN
USDD: sUSDD Token
0 ETH0.000006330.04171484
Deposit244603462026-02-15 6:15:3529 mins ago1771136135IN
USDD: sUSDD Token
0 ETH0.000006050.03852935
Deposit244603432026-02-15 6:14:5929 mins ago1771136099IN
USDD: sUSDD Token
0 ETH0.000005950.03769337
Redeem244603062026-02-15 6:07:3537 mins ago1771135655IN
USDD: sUSDD Token
0 ETH0.000005350.0363126
Approve244602852026-02-15 6:03:2341 mins ago1771135403IN
USDD: sUSDD Token
0 ETH0.000001650.0356002
Deposit244602802026-02-15 6:02:2342 mins ago1771135343IN
USDD: sUSDD Token
0 ETH0.000006140.03512636
Redeem244602362026-02-15 5:53:3551 mins ago1771134815IN
USDD: sUSDD Token
0 ETH0.00000540.03667294
Deposit244602192026-02-15 5:50:1154 mins ago1771134611IN
USDD: sUSDD Token
0 ETH0.000006270.03976507
Redeem244601842026-02-15 5:42:591 hr ago1771134179IN
USDD: sUSDD Token
0 ETH0.000004850.03287347
Redeem244600772026-02-15 5:21:351 hr ago1771132895IN
USDD: sUSDD Token
0 ETH0.000021790.2788251
Redeem244600762026-02-15 5:21:231 hr ago1771132883IN
USDD: sUSDD Token
0 ETH0.000010320.06994492
Deposit244600302026-02-15 5:12:111 hr ago1771132331IN
USDD: sUSDD Token
0 ETH0.000009420.05999646
Deposit244599562026-02-15 4:57:231 hr ago1771131443IN
USDD: sUSDD Token
0 ETH0.000007630.04384923
Deposit244598592026-02-15 4:37:592 hrs ago1771130279IN
USDD: sUSDD Token
0 ETH0.000005590.03323339
Deposit244598512026-02-15 4:36:232 hrs ago1771130183IN
USDD: sUSDD Token
0 ETH0.000005570.03565972
Deposit244598422026-02-15 4:34:352 hrs ago1771130075IN
USDD: sUSDD Token
0 ETH0.000006430.03715539
Deposit244598392026-02-15 4:33:592 hrs ago1771130039IN
USDD: sUSDD Token
0 ETH0.000007060.04171847
Deposit244597192026-02-15 4:09:592 hrs ago1771128599IN
USDD: sUSDD Token
0 ETH0.000001250.03509186
Deposit244597192026-02-15 4:09:592 hrs ago1771128599IN
USDD: sUSDD Token
0 ETH0.000006680.03954221
Deposit244596732026-02-15 4:00:472 hrs ago1771128047IN
USDD: sUSDD Token
0 ETH0.0000060.03561325
Deposit244596652026-02-15 3:59:112 hrs ago1771127951IN
USDD: sUSDD Token
0 ETH0.000062210.3593407
Deposit244596612026-02-15 3:58:232 hrs ago1771127903IN
USDD: sUSDD Token
0 ETH0.000007350.04692417
Deposit244596332026-02-15 3:52:352 hrs ago1771127555IN
USDD: sUSDD Token
0 ETH0.000003180.03929883
Deposit244596322026-02-15 3:52:232 hrs ago1771127543IN
USDD: sUSDD Token
0 ETH0.000006050.03485544
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SavingsUsdd

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
Yes with 200 runs

Other Settings:
cancun EvmVersion
File 1 of 1 : SavingsUsdd.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

/// SavingsUsdd.sol -- A tokenized representation USDD in the DSR (pot)

// Copyright (C) 2017, 2018, 2019 dbrock, rain, mrchico
// Copyright (C) 2021-2022 Dai Foundation
//
// 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.8.17;

interface IERC1271 {
    function isValidSignature(
        bytes32,
        bytes memory
    ) external view returns (bytes4);
}

interface VatLike {
    function hope(address) external;
}

interface PotLike {
    function chi() external view returns (uint256);
    function rho() external view returns (uint256);
    function dsr() external view returns (uint256);
    function drip() external returns (uint256);
    function join(uint256) external;
    function exit(uint256) external;
}

interface UsddJoinLike {
    function vat() external view returns (address);
    function usdd() external view returns (address);
    function join(address, uint256) external;
    function exit(address, uint256) external;
}

interface UsddLike {
    function transferFrom(address, address, uint256) external returns (bool);
    function approve(address, uint256) external returns (bool);
}

contract SavingsUsdd {

    // --- ERC20 Data ---
    string  public constant name     = "Savings Usdd";
    string  public constant symbol   = "sUSDD";
    string  public constant version  = "1";
    uint8   public constant decimals = 18;
    uint256 public totalSupply;

    mapping (address => uint256)                      public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;
    mapping (address => uint256)                      public nonces;

    // --- Data ---
    VatLike     public immutable vat;
    UsddJoinLike public immutable usddJoin;
    UsddLike     public immutable usdd;
    PotLike     public immutable pot;

    // --- Events ---
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);
    event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares);
    event Referral(uint16 indexed referral, address indexed owner, uint256 assets, uint256 shares);

    // --- EIP712 niceties ---
    uint256 public immutable deploymentChainId;
    bytes32 private immutable _DOMAIN_SEPARATOR;
    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    
    uint256 private constant RAY = 10 ** 27;

    constructor(address _usddJoin, address _pot) {
        usddJoin = UsddJoinLike(_usddJoin);
        vat = VatLike(usddJoin.vat());
        usdd = UsddLike(usddJoin.usdd());
        pot = PotLike(_pot);

        deploymentChainId = block.chainid;
        _DOMAIN_SEPARATOR = _calculateDomainSeparator(block.chainid);

        vat.hope(address(usddJoin));
        vat.hope(address(pot));

        usdd.approve(address(usddJoin), type(uint256).max);
    }

    function _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) {
        return keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes(version)),
                chainId,
                address(this)
            )
        );
    }

    function DOMAIN_SEPARATOR() external view returns (bytes32) {
        return block.chainid == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(block.chainid);
    }

    function _rpow(uint256 x, uint256 n) internal pure returns (uint256 z) {
        assembly {
            switch x case 0 {switch n case 0 {z := RAY} default {z := 0}}
            default {
                switch mod(n, 2) case 0 { z := RAY } default { z := x }
                let half := div(RAY, 2)  // for rounding.
                for { n := div(n, 2) } n { n := div(n,2) } {
                    let xx := mul(x, x)
                    if iszero(eq(div(xx, x), x)) { revert(0,0) }
                    let xxRound := add(xx, half)
                    if lt(xxRound, xx) { revert(0,0) }
                    x := div(xxRound, RAY)
                    if mod(n,2) {
                        let zx := mul(z, x)
                        if and(iszero(iszero(x)), iszero(eq(div(zx, x), z))) { revert(0,0) }
                        let zxRound := add(zx, half)
                        if lt(zxRound, zx) { revert(0,0) }
                        z := div(zxRound, RAY)
                    }
                }
            }
        }
    }

    function _divup(uint256 x, uint256 y) internal pure returns (uint256 z) {
        unchecked {
            z = x != 0 ? ((x - 1) / y) + 1 : 0;
        }
    }

    // --- ERC20 Mutations ---

    function transfer(address to, uint256 value) external returns (bool) {
        require(to != address(0) && to != address(this), "SavingsUsdd/invalid-address");
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "SavingsUsdd/insufficient-balance");

        unchecked {
            balanceOf[msg.sender] = balance - value;
            balanceOf[to] += value;
        }

        emit Transfer(msg.sender, to, value);

        return true;
    }

    function transferFrom(address from, address to, uint256 value) external returns (bool) {
        require(to != address(0) && to != address(this), "SavingsUsdd/invalid-address");
        uint256 balance = balanceOf[from];
        require(balance >= value, "SavingsUsdd/insufficient-balance");

        if (from != msg.sender) {
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "SavingsUsdd/insufficient-allowance");

                unchecked {
                    allowance[from][msg.sender] = allowed - value;
                }
            }
        }

        unchecked {
            balanceOf[from] = balance - value;
            balanceOf[to] += value;
        }

        emit Transfer(from, to, value);

        return true;
    }

    function approve(address spender, uint256 value) external returns (bool) {
        allowance[msg.sender][spender] = value;

        emit Approval(msg.sender, spender, value);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        uint256 newValue = allowance[msg.sender][spender] + addedValue;
        allowance[msg.sender][spender] = newValue;

        emit Approval(msg.sender, spender, newValue);

        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 allowed = allowance[msg.sender][spender];
        require(allowed >= subtractedValue, "SavingsUsdd/insufficient-allowance");
        unchecked{
            allowed = allowed - subtractedValue;
        }
        allowance[msg.sender][spender] = allowed;

        emit Approval(msg.sender, spender, allowed);

        return true;
    }

    // --- Mint/Burn Internal ---

    function _mint(uint256 assets, uint256 shares, address receiver) internal {
        require(receiver != address(0) && receiver != address(this), "SavingsUsdd/invalid-address");

        usdd.transferFrom(msg.sender, address(this), assets);
        usddJoin.join(address(this), assets);
        pot.join(shares);

        // note: we don't need an overflow check here b/c shares totalSupply will always be <= usdd totalSupply
        unchecked {
            balanceOf[receiver] = balanceOf[receiver] + shares;
            totalSupply = totalSupply + shares;
        }

        emit Deposit(msg.sender, receiver, assets, shares);
        emit Transfer(address(0), receiver, shares);
    }

    function _burn(uint256 assets, uint256 shares, address receiver, address owner) internal {
        uint256 balance = balanceOf[owner];
        require(balance >= shares, "SavingsUsdd/insufficient-balance");

        if (owner != msg.sender) {
            uint256 allowed = allowance[owner][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= shares, "SavingsUsdd/insufficient-allowance");

                unchecked {
                    allowance[owner][msg.sender] = allowed - shares;
                }
            }
        }

        unchecked {
            balanceOf[owner] = balance - shares; // note: we don't need overflow checks b/c require(balance >= value) and balance <= totalSupply
            totalSupply      = totalSupply - shares;
        }

        pot.exit(shares);
        usddJoin.exit(receiver, assets);

        emit Transfer(owner, address(0), shares);
        emit Withdraw(msg.sender, receiver, owner, assets, shares);
    }

    // --- ERC-4626 ---

    function asset() external view returns (address) {
        return address(usdd);
    }

    function totalAssets() external view returns (uint256) {
        return convertToAssets(totalSupply);
    }

    function convertToShares(uint256 assets) public view returns (uint256) {
        uint256 rho = pot.rho();
        uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi();
        return assets * RAY / chi;
    }

    function convertToAssets(uint256 shares) public view returns (uint256) {
        uint256 rho = pot.rho();
        uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi();
        return shares * chi / RAY;
    }

    function maxDeposit(address) external pure returns (uint256) {
        return type(uint256).max;
    }

    function previewDeposit(uint256 assets) external view returns (uint256) {
        return convertToShares(assets);
    }

    function deposit(uint256 assets, address receiver) public returns (uint256 shares) {
        uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi();
        shares = assets * RAY / chi;
        _mint(assets, shares, receiver);
    }

    function deposit(uint256 assets, address receiver, uint16 referral) external returns (uint256 shares) {
        shares = deposit(assets, receiver);
        emit Referral(referral, receiver, assets, shares);
    }

    function maxMint(address) external pure returns (uint256) {
        return type(uint256).max;
    }

    function previewMint(uint256 shares) external view returns (uint256) {
        uint256 rho = pot.rho();
        uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi();
        return _divup(shares * chi, RAY);
    }

    function mint(uint256 shares, address receiver) public returns (uint256 assets) {
        uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi();
        assets = _divup(shares * chi, RAY);
        _mint(assets, shares, receiver);
    }

    function mint(uint256 shares, address receiver, uint16 referral) external returns (uint256 assets) {
        assets = mint(shares, receiver);
        emit Referral(referral, receiver, assets, shares);
    }

    function maxWithdraw(address owner) external view returns (uint256) {
        return convertToAssets(balanceOf[owner]);
    }

    function previewWithdraw(uint256 assets) external view returns (uint256) {
        uint256 rho = pot.rho();
        uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi();
        return _divup(assets * RAY, chi);
    }

    function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares) {
        uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi();
        shares = _divup(assets * RAY, chi);
        _burn(assets, shares, receiver, owner);
    }

    function maxRedeem(address owner) external view returns (uint256) {
        return balanceOf[owner];
    }

    function previewRedeem(uint256 shares) external view returns (uint256) {
        return convertToAssets(shares);
    }

    function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets) {
        uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi();
        assets = shares * chi / RAY;
        _burn(assets, shares, receiver, owner);
    }

    // --- Approve by signature ---

    function _isValidSignature(
        address signer,
        bytes32 digest,
        bytes memory signature
    ) internal view returns (bool) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            if (signer == ecrecover(digest, v, r, s)) {
                return true;
            }
        }

        (bool success, bytes memory result) = signer.staticcall(
            abi.encodeWithSelector(IERC1271.isValidSignature.selector, digest, signature)
        );
        return (success &&
            result.length == 32 &&
            abi.decode(result, (bytes4)) == IERC1271.isValidSignature.selector);
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        bytes memory signature
    ) public {
        require(block.timestamp <= deadline, "SavingsUsdd/permit-expired");
        require(owner != address(0), "SavingsUsdd/invalid-owner");

        uint256 nonce;
        unchecked { nonce = nonces[owner]++; }

        bytes32 digest =
            keccak256(abi.encodePacked(
                "\x19\x01",
                block.chainid == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(block.chainid),
                keccak256(abi.encode(
                    PERMIT_TYPEHASH,
                    owner,
                    spender,
                    value,
                    nonce,
                    deadline
                ))
            ));

        require(_isValidSignature(owner, digest, signature), "SavingsUsdd/invalid-permit");

        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        permit(owner, spender, value, deadline, abi.encodePacked(r, s, v));
    }

}

Settings
{
  "remappings": [
    "ds-test/=lib/ds-auth/lib/ds-test/src/",
    "ds-thing/=lib/ds-value/lib/ds-thing/src/",
    "ds-value/=lib/ds-value/src/",
    "forge-std/=lib/forge-std/src/",
    "psm/=lib/psm/src/",
    "ds-token/=lib/ds-token/src/",
    "ds-auth/=lib/ds-auth/src/",
    "erc4626-tests/=lib/erc4626-tests/",
    "ds-math/=lib/ds-token/lib/ds-math/src/",
    "ds-note/=lib/ds-value/lib/ds-thing/lib/ds-note/src/",
    "usddv2/=lib/psm/lib/usddv2/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": false
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_usddJoin","type":"address"},{"internalType":"address","name":"_pot","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"referral","type":"uint16"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Referral","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint16","name":"referral","type":"uint16"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint16","name":"referral","type":"uint16"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pot","outputs":[{"internalType":"contract PotLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdd","outputs":[{"internalType":"contract UsddLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usddJoin","outputs":[{"internalType":"contract UsddJoinLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vat","outputs":[{"internalType":"contract VatLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

610140604052348015610010575f5ffd5b5060405161306538038061306583398101604081905261002f9161035e565b6001600160a01b03821660a0819052604080516336569e7760e01b815290516336569e77916004808201926020929091908290030181865afa158015610077573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061009b919061038f565b6001600160a01b03166080816001600160a01b03168152505060a0516001600160a01b0316630c30bc026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610116919061038f565b6001600160a01b0390811660c052811660e0524661010081905261020990604080518082018252600c81526b14d85d9a5b99dcc8155cd91960a21b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fd8187624be2f1af878d75953ca9c210ff856e4a346d04ec98490f6344034d7c4818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6101205260805160a0516040516328ec8bf160e21b81526001600160a01b03918216600482015291169063a3b22fc4906024015f604051808303815f87803b158015610253575f5ffd5b505af1158015610265573d5f5f3e3d5ffd5b505060805160e0516040516328ec8bf160e21b81526001600160a01b0391821660048201529116925063a3b22fc491506024015f604051808303815f87803b1580156102af575f5ffd5b505af11580156102c1573d5f5f3e3d5ffd5b505060c05160a05160405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116925063095ea7b391506044016020604051808303815f875af1158015610317573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033b91906103af565b5050506103ce565b80516001600160a01b0381168114610359575f5ffd5b919050565b5f5f6040838503121561036f575f5ffd5b61037883610343565b915061038660208401610343565b90509250929050565b5f6020828403121561039f575f5ffd5b6103a882610343565b9392505050565b5f602082840312156103bf575f5ffd5b815180151581146103a8575f5ffd5b60805160a05160c05160e0516101005161012051612b4d6105185f395f8181610d6201526112e501525f81816105b101528181610d3101526112b101525f818161040e01528181610672015281816106fc0152818161078d0152818161081001528181610938015281816109c201528181610a5301528181610ad601528181610e1601528181610e9c01528181610f2101528181610fda01528181611060015281816110e5015281816115a40152818161162e015281816116bf01528181611742015281816117c301528181611849015281816118ce0152818161198101528181611a0701528181611a8c01528181611b3f01528181611bc901528181611c5a01528181611cdd0152818161213101526124a301525f81816102e4015281816103be015261202f01525f818161058a015281816120be015261252001525f61039a0152612b4d5ff3fe608060405234801561000f575f5ffd5b506004361061023f575f3560e01c806370a0823111610135578063ba087652116100b4578063ce96cb7711610079578063ce96cb77146105d3578063d505accf146105e6578063d905777e146105f9578063dd62ed3e14610621578063ef8b30f71461064b575f5ffd5b8063ba0876521461055f578063c63d75b6146103f5578063c6e6f59214610572578063c78d6d2114610585578063cd0d0096146105ac575f5ffd5b80639fd5a6cf116100fa5780639fd5a6cf146104fe578063a457c2d714610513578063a9059cbb14610526578063b3d7f6b914610539578063b460af941461054c575f5ffd5b806370a08231146104765780637ecebe001461049557806394bf804d146104b457806395d89b41146104c75780639b8d6d38146104eb575f5ffd5b8063313ce567116101c1578063402d267d11610186578063402d267d146103f55780634ba2363a146104095780634cdad5061461043057806354fd4d50146104435780636e553f6514610463575f5ffd5b8063313ce567146103735780633644e5151461038d57806336569e771461039557806338d52e0f146103bc57806339509351146103e2575f5ffd5b80630c30bc02116102075780630c30bc02146102df57806318160ddd1461031e578063216740a01461032657806323b872dd1461033957806330adf81f1461034c575f5ffd5b806301e1d1141461024357806306fdde031461025e57806307a2d13a14610296578063095ea7b3146102a95780630a28a477146102cc575b5f5ffd5b61024b61065e565b6040519081526020015b60405180910390f35b6102896040518060400160405280600c81526020016b14d85d9a5b99dcc8155cd91960a21b81525081565b6040516102559190612626565b61024b6102a4366004612638565b61066e565b6102bc6102b736600461266a565b6108db565b6040519015158152602001610255565b61024b6102da366004612638565b610934565b6103067f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610255565b61024b5f5481565b61024b610334366004612692565b610b64565b6102bc6103473660046126d5565b610bc9565b61024b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61037b601281565b60405160ff9091168152602001610255565b61024b610d2e565b6103067f000000000000000000000000000000000000000000000000000000000000000081565b7f0000000000000000000000000000000000000000000000000000000000000000610306565b6102bc6103f036600461266a565b610d84565b61024b61040336600461270f565b505f1990565b6103067f000000000000000000000000000000000000000000000000000000000000000081565b61024b61043e366004612638565b610e08565b610289604051806040016040528060018152602001603160f81b81525081565b61024b610471366004612728565b610e12565b61024b61048436600461270f565b60016020525f908152604090205481565b61024b6104a336600461270f565b60036020525f908152604090205481565b61024b6104c2366004612728565b610fd6565b610289604051806040016040528060058152602001641cd554d11160da1b81525081565b61024b6104f9366004612692565b611191565b61051161050c366004612766565b6111e7565b005b6102bc61052136600461266a565b61145e565b6102bc61053436600461266a565b6114ea565b61024b610547366004612638565b6115a0565b61024b61055a36600461284c565b6117bf565b61024b61056d36600461284c565b61197d565b61024b610580366004612638565b611b3b565b6103067f000000000000000000000000000000000000000000000000000000000000000081565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b61024b6105e136600461270f565b611d63565b6105116105f4366004612885565b611d84565b61024b61060736600461270f565b6001600160a01b03165f9081526001602052604090205490565b61024b61062f3660046128f2565b600260209081525f928352604080842090915290825290205481565b61024b610659366004612638565b611ddb565b5f6106695f5461066e565b905090565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f0919061291a565b90505f81421161077f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610756573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077a919061291a565b6108b1565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b919061291a565b61089d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088e919061291a565b6108988642612945565b611de5565b6108a79190612958565b6108b19190612983565b9050676765c793fa10079d601b1b6108c98286612958565b6108d39190612983565b949350505050565b335f8181526002602090815260408083206001600160a01b038716808552925280832085905551919290915f516020612af85f395f51905f52906109229086815260200190565b60405180910390a35060015b92915050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610992573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b6919061291a565b90505f814211610a45577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a40919061291a565b610b44565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aad573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad1919061291a565b610b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086a573d5f5f3e3d5ffd5b610b3a9190612958565b610b449190612983565b90506108d3610b5e676765c793fa10079d601b1b86612958565b82611ed0565b5f610b6f8484610fd6565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368387604051610bba929190918252602082015260400190565b60405180910390a39392505050565b5f6001600160a01b03831615801590610beb57506001600160a01b0383163014155b610c105760405162461bcd60e51b8152600401610c07906129a2565b60405180910390fd5b6001600160a01b0384165f9081526001602052604090205482811015610c485760405162461bcd60e51b8152600401610c07906129d9565b6001600160a01b0385163314610ccd576001600160a01b0385165f9081526002602090815260408083203384529091529020545f198114610ccb5783811015610ca35760405162461bcd60e51b8152600401610c0790612a0e565b6001600160a01b0386165f908152600260209081526040808320338452909152902084820390555b505b6001600160a01b038086165f8181526001602052604080822087860390559287168082529083902080548701905591515f516020612ad85f395f51905f5290610d199087815260200190565b60405180910390a360019150505b9392505050565b5f7f00000000000000000000000000000000000000000000000000000000000000004614610d5f5761066946611efb565b507f000000000000000000000000000000000000000000000000000000000000000090565b335f9081526002602090815260408083206001600160a01b03861684529091528120548190610db4908490612a50565b335f8181526002602090815260408083206001600160a01b038a16808552908352928190208590555184815293945090925f516020612af85f395f51905f5291015b60405180910390a35060019392505050565b5f61092e8261066e565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e70573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e94919061291a565b4211610f1f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1a919061291a565b610fa0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610f7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa0919061291a565b905080610fb8676765c793fa10079d601b1b86612958565b610fc29190612983565b9150610fcf848385611fd0565b5092915050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611034573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611058919061291a565b42116110e3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110de919061291a565b611164565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611140573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611164919061291a565b90506111846111738286612958565b676765c793fa10079d601b1b611ed0565b9150610fcf828585611fd0565b5f61119c8484610e12565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368684604051610bba929190918252602082015260400190565b814211156112375760405162461bcd60e51b815260206004820152601a60248201527f536176696e6773557364642f7065726d69742d657870697265640000000000006044820152606401610c07565b6001600160a01b03851661128d5760405162461bcd60e51b815260206004820152601960248201527f536176696e6773557364642f696e76616c69642d6f776e6572000000000000006044820152606401610c07565b6001600160a01b0385165f90815260036020526040812080546001810190915590467f0000000000000000000000000000000000000000000000000000000000000000146112e3576112de46611efb565b611305565b7f00000000000000000000000000000000000000000000000000000000000000005b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808b169282019290925290881660608201526080810187905260a0810184905260c0810186905260e0016040516020818303038152906040528051906020012060405160200161139e92919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506113c1878285612223565b61140d5760405162461bcd60e51b815260206004820152601a60248201527f536176696e6773557364642f696e76616c69642d7065726d69740000000000006044820152606401610c07565b6001600160a01b038781165f818152600260209081526040808320948b168084529482529182902089905590518881525f516020612af85f395f51905f52910160405180910390a350505050505050565b335f9081526002602090815260408083206001600160a01b0386168452909152812054828110156114a15760405162461bcd60e51b8152600401610c0790612a0e565b335f8181526002602090815260408083206001600160a01b038916808552908352928190209487900394859055518481529192915f516020612af85f395f51905f529101610df6565b5f6001600160a01b0383161580159061150c57506001600160a01b0383163014155b6115285760405162461bcd60e51b8152600401610c07906129a2565b335f90815260016020526040902054828110156115575760405162461bcd60e51b8152600401610c07906129d9565b335f81815260016020908152604080832087860390556001600160a01b03881680845292819020805488019055518681529192915f516020612ad85f395f51905f529101610df6565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611622919061291a565b90505f8142116116b1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611688573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ac919061291a565b6117b0565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611719573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173d919061291a565b61179c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086a573d5f5f3e3d5ffd5b6117a69190612958565b6117b09190612983565b90506108d36111738286612958565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561181d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611841919061291a565b42116118cc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118a3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c7919061291a565b61194d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611929573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194d919061291a565b9050611967610b5e676765c793fa10079d601b1b87612958565b9150611975858386866123ac565b509392505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff919061291a565b4211611a8a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a85919061291a565b611b0b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611ae7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b0b919061291a565b9050676765c793fa10079d601b1b611b238287612958565b611b2d9190612983565b9150611975828686866123ac565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bbd919061291a565b90505f814211611c4c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c47919061291a565b611d4b565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd8919061291a565b611d377f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086a573d5f5f3e3d5ffd5b611d419190612958565b611d4b9190612983565b9050806108c9676765c793fa10079d601b1b86612958565b6001600160a01b0381165f9081526001602052604081205461092e9061066e565b611dd287878787868689604051602001611dbe93929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b6040516020818303038152906040526111e7565b50505050505050565b5f61092e82611b3b565b5f828015611eaa57600183168015611dff57849250611e0e565b676765c793fa10079d601b1b92505b506002909204916b019d971e4fe8401e740000005b8315611ea4578485028586820414611e39575f5ffd5b81810181811015611e48575f5ffd5b676765c793fa10079d601b1b90049550506001841615611e99578483028386820414158615151615611e78575f5ffd5b81810181811015611e87575f5ffd5b676765c793fa10079d601b1b90049350505b600284049350611e23565b50610fcf565b828015611eb9575f9250611ec8565b676765c793fa10079d601b1b92505b505092915050565b5f825f03611ede575f610d27565b816001840381611ef057611ef061296f565b046001019392505050565b604080518082018252600c81526b14d85d9a5b99dcc8155cd91960a21b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fd8187624be2f1af878d75953ca9c210ff856e4a346d04ec98490f6344034d7c4818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6001600160a01b03811615801590611ff157506001600160a01b0381163014155b61200d5760405162461bcd60e51b8152600401610c07906129a2565b6040516323b872dd60e01b8152336004820152306024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af115801561207d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a19190612a63565b50604051633b4da69f60e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633b4da69f906044015f604051808303815f87803b158015612107575f5ffd5b505af1158015612119573d5f5f3e3d5ffd5b505060405163049878f360e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063049878f391506024015f604051808303815f87803b15801561217c575f5ffd5b505af115801561218e573d5f5f3e3d5ffd5b505050506001600160a01b0381165f81815260016020908152604080832080548701905582548601909255815186815290810185905233917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a36040518281526001600160a01b038216905f905f516020612ad85f395f51905f529060200160405180910390a3505050565b5f81516041036122bc5760208281015160408085015160608087015183515f8082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa15801561228a573d5f5f3e3d5ffd5b505050602060405103516001600160a01b0316876001600160a01b0316036122b85760019350505050610d27565b5050505b5f5f856001600160a01b0316631626ba7e60e01b86866040516024016122e3929190612a82565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123219190612a9a565b5f60405180830381855afa9150503d805f8114612359576040519150601f19603f3d011682016040523d82523d5f602084013e61235e565b606091505b5091509150818015612371575080516020145b80156123a257508051630b135d3f60e11b906123969083016020908101908401612ab0565b6001600160e01b031916145b9695505050505050565b6001600160a01b0381165f90815260016020526040902054838110156123e45760405162461bcd60e51b8152600401610c07906129d9565b6001600160a01b0382163314612469576001600160a01b0382165f9081526002602090815260408083203384529091529020545f198114612467578481101561243f5760405162461bcd60e51b8152600401610c0790612a0e565b6001600160a01b0383165f908152600260209081526040808320338452909152902085820390555b505b6001600160a01b038281165f908152600160205260408082208785039055815487900390915551637f8661a160e01b8152600481018690527f000000000000000000000000000000000000000000000000000000000000000090911690637f8661a1906024015f604051808303815f87803b1580156124e6575f5ffd5b505af11580156124f8573d5f5f3e3d5ffd5b505060405163ef693bed60e01b81526001600160a01b038681166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016925063ef693bed91506044015f604051808303815f87803b158015612563575f5ffd5b505af1158015612575573d5f5f3e3d5ffd5b50506040518681525f92506001600160a01b03851691505f516020612ad85f395f51905f529060200160405180910390a360408051868152602081018690526001600160a01b03808516929086169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a45050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610d2760208301846125f8565b5f60208284031215612648575f5ffd5b5035919050565b80356001600160a01b0381168114612665575f5ffd5b919050565b5f5f6040838503121561267b575f5ffd5b6126848361264f565b946020939093013593505050565b5f5f5f606084860312156126a4575f5ffd5b833592506126b46020850161264f565b9150604084013561ffff811681146126ca575f5ffd5b809150509250925092565b5f5f5f606084860312156126e7575f5ffd5b6126f08461264f565b92506126fe6020850161264f565b929592945050506040919091013590565b5f6020828403121561271f575f5ffd5b610d278261264f565b5f5f60408385031215612739575f5ffd5b823591506127496020840161264f565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f60a0868803121561277a575f5ffd5b6127838661264f565b94506127916020870161264f565b93506040860135925060608601359150608086013567ffffffffffffffff8111156127ba575f5ffd5b8601601f810188136127ca575f5ffd5b803567ffffffffffffffff8111156127e4576127e4612752565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561281357612813612752565b6040528181528282016020018a101561282a575f5ffd5b816020840160208301375f602083830101528093505050509295509295909350565b5f5f5f6060848603121561285e575f5ffd5b8335925061286e6020850161264f565b915061287c6040850161264f565b90509250925092565b5f5f5f5f5f5f5f60e0888a03121561289b575f5ffd5b6128a48861264f565b96506128b26020890161264f565b95506040880135945060608801359350608088013560ff811681146128d5575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215612903575f5ffd5b61290c8361264f565b91506127496020840161264f565b5f6020828403121561292a575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561092e5761092e612931565b808202811582820484141761092e5761092e612931565b634e487b7160e01b5f52601260045260245ffd5b5f8261299d57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252601b908201527f536176696e6773557364642f696e76616c69642d616464726573730000000000604082015260600190565b6020808252818101527f536176696e6773557364642f696e73756666696369656e742d62616c616e6365604082015260600190565b60208082526022908201527f536176696e6773557364642f696e73756666696369656e742d616c6c6f77616e604082015261636560f01b606082015260800190565b8082018082111561092e5761092e612931565b5f60208284031215612a73575f5ffd5b81518015158114610d27575f5ffd5b828152604060208201525f6108d360408301846125f8565b5f82518060208501845e5f920191825250919050565b5f60208284031215612ac0575f5ffd5b81516001600160e01b031981168114610d27575f5ffdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122078a6aa2ba4fbad9cf9377b874fcb1e957f57ce689aef8c21cfefe8d1534fda4a64736f6c634300081e0033000000000000000000000000983dfef6d71862d809e239845da5a959492f63b8000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca500

Deployed Bytecode

0x608060405234801561000f575f5ffd5b506004361061023f575f3560e01c806370a0823111610135578063ba087652116100b4578063ce96cb7711610079578063ce96cb77146105d3578063d505accf146105e6578063d905777e146105f9578063dd62ed3e14610621578063ef8b30f71461064b575f5ffd5b8063ba0876521461055f578063c63d75b6146103f5578063c6e6f59214610572578063c78d6d2114610585578063cd0d0096146105ac575f5ffd5b80639fd5a6cf116100fa5780639fd5a6cf146104fe578063a457c2d714610513578063a9059cbb14610526578063b3d7f6b914610539578063b460af941461054c575f5ffd5b806370a08231146104765780637ecebe001461049557806394bf804d146104b457806395d89b41146104c75780639b8d6d38146104eb575f5ffd5b8063313ce567116101c1578063402d267d11610186578063402d267d146103f55780634ba2363a146104095780634cdad5061461043057806354fd4d50146104435780636e553f6514610463575f5ffd5b8063313ce567146103735780633644e5151461038d57806336569e771461039557806338d52e0f146103bc57806339509351146103e2575f5ffd5b80630c30bc02116102075780630c30bc02146102df57806318160ddd1461031e578063216740a01461032657806323b872dd1461033957806330adf81f1461034c575f5ffd5b806301e1d1141461024357806306fdde031461025e57806307a2d13a14610296578063095ea7b3146102a95780630a28a477146102cc575b5f5ffd5b61024b61065e565b6040519081526020015b60405180910390f35b6102896040518060400160405280600c81526020016b14d85d9a5b99dcc8155cd91960a21b81525081565b6040516102559190612626565b61024b6102a4366004612638565b61066e565b6102bc6102b736600461266a565b6108db565b6040519015158152602001610255565b61024b6102da366004612638565b610934565b6103067f0000000000000000000000004f8e5de400de08b164e7421b3ee387f461becd1a81565b6040516001600160a01b039091168152602001610255565b61024b5f5481565b61024b610334366004612692565b610b64565b6102bc6103473660046126d5565b610bc9565b61024b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61037b601281565b60405160ff9091168152602001610255565b61024b610d2e565b6103067f000000000000000000000000ff77f6209239deb2c076179499f2346b0032097f81565b7f0000000000000000000000004f8e5de400de08b164e7421b3ee387f461becd1a610306565b6102bc6103f036600461266a565b610d84565b61024b61040336600461270f565b505f1990565b6103067f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca50081565b61024b61043e366004612638565b610e08565b610289604051806040016040528060018152602001603160f81b81525081565b61024b610471366004612728565b610e12565b61024b61048436600461270f565b60016020525f908152604090205481565b61024b6104a336600461270f565b60036020525f908152604090205481565b61024b6104c2366004612728565b610fd6565b610289604051806040016040528060058152602001641cd554d11160da1b81525081565b61024b6104f9366004612692565b611191565b61051161050c366004612766565b6111e7565b005b6102bc61052136600461266a565b61145e565b6102bc61053436600461266a565b6114ea565b61024b610547366004612638565b6115a0565b61024b61055a36600461284c565b6117bf565b61024b61056d36600461284c565b61197d565b61024b610580366004612638565b611b3b565b6103067f000000000000000000000000983dfef6d71862d809e239845da5a959492f63b881565b61024b7f000000000000000000000000000000000000000000000000000000000000000181565b61024b6105e136600461270f565b611d63565b6105116105f4366004612885565b611d84565b61024b61060736600461270f565b6001600160a01b03165f9081526001602052604090205490565b61024b61062f3660046128f2565b600260209081525f928352604080842090915290825290205481565b61024b610659366004612638565b611ddb565b5f6106695f5461066e565b905090565b5f5f7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f0919061291a565b90505f81421161077f577f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610756573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077a919061291a565b6108b1565b676765c793fa10079d601b1b7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b919061291a565b61089d7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088e919061291a565b6108988642612945565b611de5565b6108a79190612958565b6108b19190612983565b9050676765c793fa10079d601b1b6108c98286612958565b6108d39190612983565b949350505050565b335f8181526002602090815260408083206001600160a01b038716808552925280832085905551919290915f516020612af85f395f51905f52906109229086815260200190565b60405180910390a35060015b92915050565b5f5f7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610992573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b6919061291a565b90505f814211610a45577f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a40919061291a565b610b44565b676765c793fa10079d601b1b7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aad573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad1919061291a565b610b307f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086a573d5f5f3e3d5ffd5b610b3a9190612958565b610b449190612983565b90506108d3610b5e676765c793fa10079d601b1b86612958565b82611ed0565b5f610b6f8484610fd6565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368387604051610bba929190918252602082015260400190565b60405180910390a39392505050565b5f6001600160a01b03831615801590610beb57506001600160a01b0383163014155b610c105760405162461bcd60e51b8152600401610c07906129a2565b60405180910390fd5b6001600160a01b0384165f9081526001602052604090205482811015610c485760405162461bcd60e51b8152600401610c07906129d9565b6001600160a01b0385163314610ccd576001600160a01b0385165f9081526002602090815260408083203384529091529020545f198114610ccb5783811015610ca35760405162461bcd60e51b8152600401610c0790612a0e565b6001600160a01b0386165f908152600260209081526040808320338452909152902084820390555b505b6001600160a01b038086165f8181526001602052604080822087860390559287168082529083902080548701905591515f516020612ad85f395f51905f5290610d199087815260200190565b60405180910390a360019150505b9392505050565b5f7f00000000000000000000000000000000000000000000000000000000000000014614610d5f5761066946611efb565b507ff23e5de26f0a3165c57f379f00307e9c590d5c306c0d3441f6ce96b70a83ed2c90565b335f9081526002602090815260408083206001600160a01b03861684529091528120548190610db4908490612a50565b335f8181526002602090815260408083206001600160a01b038a16808552908352928190208590555184815293945090925f516020612af85f395f51905f5291015b60405180910390a35060019392505050565b5f61092e8261066e565b5f5f7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e70573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e94919061291a565b4211610f1f577f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1a919061291a565b610fa0565b7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610f7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa0919061291a565b905080610fb8676765c793fa10079d601b1b86612958565b610fc29190612983565b9150610fcf848385611fd0565b5092915050565b5f5f7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611034573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611058919061291a565b42116110e3577f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110de919061291a565b611164565b7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611140573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611164919061291a565b90506111846111738286612958565b676765c793fa10079d601b1b611ed0565b9150610fcf828585611fd0565b5f61119c8484610e12565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368684604051610bba929190918252602082015260400190565b814211156112375760405162461bcd60e51b815260206004820152601a60248201527f536176696e6773557364642f7065726d69742d657870697265640000000000006044820152606401610c07565b6001600160a01b03851661128d5760405162461bcd60e51b815260206004820152601960248201527f536176696e6773557364642f696e76616c69642d6f776e6572000000000000006044820152606401610c07565b6001600160a01b0385165f90815260036020526040812080546001810190915590467f0000000000000000000000000000000000000000000000000000000000000001146112e3576112de46611efb565b611305565b7ff23e5de26f0a3165c57f379f00307e9c590d5c306c0d3441f6ce96b70a83ed2c5b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808b169282019290925290881660608201526080810187905260a0810184905260c0810186905260e0016040516020818303038152906040528051906020012060405160200161139e92919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506113c1878285612223565b61140d5760405162461bcd60e51b815260206004820152601a60248201527f536176696e6773557364642f696e76616c69642d7065726d69740000000000006044820152606401610c07565b6001600160a01b038781165f818152600260209081526040808320948b168084529482529182902089905590518881525f516020612af85f395f51905f52910160405180910390a350505050505050565b335f9081526002602090815260408083206001600160a01b0386168452909152812054828110156114a15760405162461bcd60e51b8152600401610c0790612a0e565b335f8181526002602090815260408083206001600160a01b038916808552908352928190209487900394859055518481529192915f516020612af85f395f51905f529101610df6565b5f6001600160a01b0383161580159061150c57506001600160a01b0383163014155b6115285760405162461bcd60e51b8152600401610c07906129a2565b335f90815260016020526040902054828110156115575760405162461bcd60e51b8152600401610c07906129d9565b335f81815260016020908152604080832087860390556001600160a01b03881680845292819020805488019055518681529192915f516020612ad85f395f51905f529101610df6565b5f5f7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611622919061291a565b90505f8142116116b1577f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611688573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ac919061291a565b6117b0565b676765c793fa10079d601b1b7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611719573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173d919061291a565b61179c7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086a573d5f5f3e3d5ffd5b6117a69190612958565b6117b09190612983565b90506108d36111738286612958565b5f5f7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561181d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611841919061291a565b42116118cc577f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118a3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c7919061291a565b61194d565b7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611929573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194d919061291a565b9050611967610b5e676765c793fa10079d601b1b87612958565b9150611975858386866123ac565b509392505050565b5f5f7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff919061291a565b4211611a8a577f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a85919061291a565b611b0b565b7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611ae7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b0b919061291a565b9050676765c793fa10079d601b1b611b238287612958565b611b2d9190612983565b9150611975828686866123ac565b5f5f7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bbd919061291a565b90505f814211611c4c577f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c47919061291a565b611d4b565b676765c793fa10079d601b1b7f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd8919061291a565b611d377f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086a573d5f5f3e3d5ffd5b611d419190612958565b611d4b9190612983565b9050806108c9676765c793fa10079d601b1b86612958565b6001600160a01b0381165f9081526001602052604081205461092e9061066e565b611dd287878787868689604051602001611dbe93929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b6040516020818303038152906040526111e7565b50505050505050565b5f61092e82611b3b565b5f828015611eaa57600183168015611dff57849250611e0e565b676765c793fa10079d601b1b92505b506002909204916b019d971e4fe8401e740000005b8315611ea4578485028586820414611e39575f5ffd5b81810181811015611e48575f5ffd5b676765c793fa10079d601b1b90049550506001841615611e99578483028386820414158615151615611e78575f5ffd5b81810181811015611e87575f5ffd5b676765c793fa10079d601b1b90049350505b600284049350611e23565b50610fcf565b828015611eb9575f9250611ec8565b676765c793fa10079d601b1b92505b505092915050565b5f825f03611ede575f610d27565b816001840381611ef057611ef061296f565b046001019392505050565b604080518082018252600c81526b14d85d9a5b99dcc8155cd91960a21b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fd8187624be2f1af878d75953ca9c210ff856e4a346d04ec98490f6344034d7c4818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6001600160a01b03811615801590611ff157506001600160a01b0381163014155b61200d5760405162461bcd60e51b8152600401610c07906129a2565b6040516323b872dd60e01b8152336004820152306024820152604481018490527f0000000000000000000000004f8e5de400de08b164e7421b3ee387f461becd1a6001600160a01b0316906323b872dd906064016020604051808303815f875af115801561207d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a19190612a63565b50604051633b4da69f60e01b8152306004820152602481018490527f000000000000000000000000983dfef6d71862d809e239845da5a959492f63b86001600160a01b031690633b4da69f906044015f604051808303815f87803b158015612107575f5ffd5b505af1158015612119573d5f5f3e3d5ffd5b505060405163049878f360e01b8152600481018590527f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca5006001600160a01b0316925063049878f391506024015f604051808303815f87803b15801561217c575f5ffd5b505af115801561218e573d5f5f3e3d5ffd5b505050506001600160a01b0381165f81815260016020908152604080832080548701905582548601909255815186815290810185905233917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a36040518281526001600160a01b038216905f905f516020612ad85f395f51905f529060200160405180910390a3505050565b5f81516041036122bc5760208281015160408085015160608087015183515f8082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa15801561228a573d5f5f3e3d5ffd5b505050602060405103516001600160a01b0316876001600160a01b0316036122b85760019350505050610d27565b5050505b5f5f856001600160a01b0316631626ba7e60e01b86866040516024016122e3929190612a82565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123219190612a9a565b5f60405180830381855afa9150503d805f8114612359576040519150601f19603f3d011682016040523d82523d5f602084013e61235e565b606091505b5091509150818015612371575080516020145b80156123a257508051630b135d3f60e11b906123969083016020908101908401612ab0565b6001600160e01b031916145b9695505050505050565b6001600160a01b0381165f90815260016020526040902054838110156123e45760405162461bcd60e51b8152600401610c07906129d9565b6001600160a01b0382163314612469576001600160a01b0382165f9081526002602090815260408083203384529091529020545f198114612467578481101561243f5760405162461bcd60e51b8152600401610c0790612a0e565b6001600160a01b0383165f908152600260209081526040808320338452909152902085820390555b505b6001600160a01b038281165f908152600160205260408082208785039055815487900390915551637f8661a160e01b8152600481018690527f000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca50090911690637f8661a1906024015f604051808303815f87803b1580156124e6575f5ffd5b505af11580156124f8573d5f5f3e3d5ffd5b505060405163ef693bed60e01b81526001600160a01b038681166004830152602482018990527f000000000000000000000000983dfef6d71862d809e239845da5a959492f63b816925063ef693bed91506044015f604051808303815f87803b158015612563575f5ffd5b505af1158015612575573d5f5f3e3d5ffd5b50506040518681525f92506001600160a01b03851691505f516020612ad85f395f51905f529060200160405180910390a360408051868152602081018690526001600160a01b03808516929086169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a45050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610d2760208301846125f8565b5f60208284031215612648575f5ffd5b5035919050565b80356001600160a01b0381168114612665575f5ffd5b919050565b5f5f6040838503121561267b575f5ffd5b6126848361264f565b946020939093013593505050565b5f5f5f606084860312156126a4575f5ffd5b833592506126b46020850161264f565b9150604084013561ffff811681146126ca575f5ffd5b809150509250925092565b5f5f5f606084860312156126e7575f5ffd5b6126f08461264f565b92506126fe6020850161264f565b929592945050506040919091013590565b5f6020828403121561271f575f5ffd5b610d278261264f565b5f5f60408385031215612739575f5ffd5b823591506127496020840161264f565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f60a0868803121561277a575f5ffd5b6127838661264f565b94506127916020870161264f565b93506040860135925060608601359150608086013567ffffffffffffffff8111156127ba575f5ffd5b8601601f810188136127ca575f5ffd5b803567ffffffffffffffff8111156127e4576127e4612752565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561281357612813612752565b6040528181528282016020018a101561282a575f5ffd5b816020840160208301375f602083830101528093505050509295509295909350565b5f5f5f6060848603121561285e575f5ffd5b8335925061286e6020850161264f565b915061287c6040850161264f565b90509250925092565b5f5f5f5f5f5f5f60e0888a03121561289b575f5ffd5b6128a48861264f565b96506128b26020890161264f565b95506040880135945060608801359350608088013560ff811681146128d5575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215612903575f5ffd5b61290c8361264f565b91506127496020840161264f565b5f6020828403121561292a575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561092e5761092e612931565b808202811582820484141761092e5761092e612931565b634e487b7160e01b5f52601260045260245ffd5b5f8261299d57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252601b908201527f536176696e6773557364642f696e76616c69642d616464726573730000000000604082015260600190565b6020808252818101527f536176696e6773557364642f696e73756666696369656e742d62616c616e6365604082015260600190565b60208082526022908201527f536176696e6773557364642f696e73756666696369656e742d616c6c6f77616e604082015261636560f01b606082015260800190565b8082018082111561092e5761092e612931565b5f60208284031215612a73575f5ffd5b81518015158114610d27575f5ffd5b828152604060208201525f6108d360408301846125f8565b5f82518060208501845e5f920191825250919050565b5f60208284031215612ac0575f5ffd5b81516001600160e01b031981168114610d27575f5ffdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122078a6aa2ba4fbad9cf9377b874fcb1e957f57ce689aef8c21cfefe8d1534fda4a64736f6c634300081e0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000983dfef6d71862d809e239845da5a959492f63b8000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca500

-----Decoded View---------------
Arg [0] : _usddJoin (address): 0x983DFef6d71862d809e239845Da5A959492f63b8
Arg [1] : _pot (address): 0xE789578252Cc026FfB3413a1104bA223fDeca500

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000983dfef6d71862d809e239845da5a959492f63b8
Arg [1] : 000000000000000000000000e789578252cc026ffb3413a1104ba223fdeca500


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

USDD Savings allows USDD holders to earn passive income simply by depositing their stablecoins. Current rates have been competitive with traditional finance alternatives, making it an attractive option for parking capital.

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.