ETH Price: $2,932.75 (-7.91%)
Gas: 16 Gwei

Contract

0x448a5065aeBB8E423F0896E6c5D525C040f59af3
 
Transaction Hash
Method
Block
From
To
Value
0x92796b53e31b9098534a3524c82793e856a9c8d85a33ce9ec6f040eb868dea9dBite(pending)2024-04-30 18:17:041 hr ago1714501024IN
Maker: Contract 1
0 ETH(Pending)(Pending)
0x1a58c7c6f26bc54fbd5bcc253cde3f49d0e4a912189907c74a41a4314e683e88Free(pending)2024-04-30 17:52:321 hr ago1714499552IN
Maker: Contract 1
0 ETH(Pending)(Pending)
Bite197414612024-04-26 18:59:114 days ago1714157951IN
Maker: Contract 1
0 ETH0.001127368.47718475
Bite197004982024-04-21 1:27:119 days ago1713662831IN
Maker: Contract 1
0 ETH0.000758975.70706661
Bite196753152024-04-17 12:52:5913 days ago1713358379IN
Maker: Contract 1
0 ETH0.0049827141.499782
Bite195851012024-04-04 21:33:3525 days ago1712266415IN
Maker: Contract 1
0 ETH0.003106523.35932342
Rhi195552682024-03-31 17:11:4730 days ago1711905107IN
Maker: Contract 1
0 ETH0.0007147124.82843177
Drip194877162024-03-22 4:13:5939 days ago1711080839IN
Maker: Contract 1
0 ETH0.0005173519.01637955
Exit190307892024-01-18 2:32:11103 days ago1705545131IN
Maker: Contract 1
0 ETH0.0029744529.91299569
Exit189850422024-01-11 17:03:23110 days ago1704992603IN
Maker: Contract 1
0 ETH0.0031707740.22800572
Free189850242024-01-11 16:59:47110 days ago1704992387IN
Maker: Contract 1
0 ETH0.0038475445.10386539
Free189850162024-01-11 16:57:59110 days ago1704992279IN
Maker: Contract 1
0 ETH0.0043078442.06713573
Free189462672024-01-06 6:01:35115 days ago1704520895IN
Maker: Contract 1
0 ETH0.0005319117.46096549
Exit189462632024-01-06 6:00:35115 days ago1704520835IN
Maker: Contract 1
0 ETH0.0012718917.18913038
Free189462142024-01-06 5:50:47115 days ago1704520247IN
Maker: Contract 1
0 ETH0.0015619315.25629181
Bite188504352023-12-23 18:55:59129 days ago1703357759IN
Maker: Contract 1
0 ETH0.0030140422.66604833
Exit187061782023-12-03 13:31:47149 days ago1701610307IN
Maker: Contract 1
0 ETH0.0026984928.5105726
Exit187061292023-12-03 13:21:59149 days ago1701609719IN
Maker: Contract 1
0 ETH0.0028210330.96021691
Free186973722023-12-02 7:57:47150 days ago1701503867IN
Maker: Contract 1
0 ETH0.0035339934.51031903
Exit185711182023-11-14 15:44:23168 days ago1699976663IN
Maker: Contract 1
0 ETH0.0053849756.13323926
Bite184829532023-11-02 7:35:47180 days ago1698910547IN
Maker: Contract 1
0 ETH0.0024600618.49840384
Bite184069712023-10-22 16:17:59191 days ago1697991479IN
Maker: Contract 1
0 ETH0.001498589.98472995
Bite182981422023-10-07 10:54:59206 days ago1696676099IN
Maker: Contract 1
0 ETH0.000679335.10822662
Bite182833012023-10-05 9:05:23208 days ago1696496723IN
Maker: Contract 1
0 ETH0.0013354810.04218391
Bite182701392023-10-03 12:53:59210 days ago1696337639IN
Maker: Contract 1
0 ETH0.0022726317.09054256
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To Value
47520112017-12-18 3:11:112325 days ago1513566671  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SaiTub

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-12-18
*/

// hevm: flattened sources of src/tub.sol
pragma solidity ^0.4.18;

////// lib/ds-guard/lib/ds-auth/src/auth.sol
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* pragma solidity ^0.4.13; */

contract DSAuthority {
    function canCall(
        address src, address dst, bytes4 sig
    ) public view returns (bool);
}

contract DSAuthEvents {
    event LogSetAuthority (address indexed authority);
    event LogSetOwner     (address indexed owner);
}

contract DSAuth is DSAuthEvents {
    DSAuthority  public  authority;
    address      public  owner;

    function DSAuth() public {
        owner = msg.sender;
        LogSetOwner(msg.sender);
    }

    function setOwner(address owner_)
        public
        auth
    {
        owner = owner_;
        LogSetOwner(owner);
    }

    function setAuthority(DSAuthority authority_)
        public
        auth
    {
        authority = authority_;
        LogSetAuthority(authority);
    }

    modifier auth {
        require(isAuthorized(msg.sender, msg.sig));
        _;
    }

    function isAuthorized(address src, bytes4 sig) internal view returns (bool) {
        if (src == address(this)) {
            return true;
        } else if (src == owner) {
            return true;
        } else if (authority == DSAuthority(0)) {
            return false;
        } else {
            return authority.canCall(src, this, sig);
        }
    }
}

////// lib/ds-spell/lib/ds-note/src/note.sol
/// note.sol -- the `note' modifier, for logging calls as events

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* pragma solidity ^0.4.13; */

contract DSNote {
    event LogNote(
        bytes4   indexed  sig,
        address  indexed  guy,
        bytes32  indexed  foo,
        bytes32  indexed  bar,
        uint              wad,
        bytes             fax
    ) anonymous;

    modifier note {
        bytes32 foo;
        bytes32 bar;

        assembly {
            foo := calldataload(4)
            bar := calldataload(36)
        }

        LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data);

        _;
    }
}

////// lib/ds-thing/lib/ds-math/src/math.sol
/// math.sol -- mixin for inline numerical wizardry

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* pragma solidity ^0.4.13; */

contract DSMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x);
    }
    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x);
    }
    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x);
    }

    function min(uint x, uint y) internal pure returns (uint z) {
        return x <= y ? x : y;
    }
    function max(uint x, uint y) internal pure returns (uint z) {
        return x >= y ? x : y;
    }
    function imin(int x, int y) internal pure returns (int z) {
        return x <= y ? x : y;
    }
    function imax(int x, int y) internal pure returns (int z) {
        return x >= y ? x : y;
    }

    uint constant WAD = 10 ** 18;
    uint constant RAY = 10 ** 27;

    function wmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), WAD / 2) / WAD;
    }
    function rmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), RAY / 2) / RAY;
    }
    function wdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, WAD), y / 2) / y;
    }
    function rdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, RAY), y / 2) / y;
    }

    // This famous algorithm is called "exponentiation by squaring"
    // and calculates x^n with x as fixed-point and n as regular unsigned.
    //
    // It's O(log n), instead of O(n) for naive repeated multiplication.
    //
    // These facts are why it works:
    //
    //  If n is even, then x^n = (x^2)^(n/2).
    //  If n is odd,  then x^n = x * x^(n-1),
    //   and applying the equation for even x gives
    //    x^n = x * (x^2)^((n-1) / 2).
    //
    //  Also, EVM division is flooring and
    //    floor[(n-1) / 2] = floor[n / 2].
    //
    function rpow(uint x, uint n) internal pure returns (uint z) {
        z = n % 2 != 0 ? x : RAY;

        for (n /= 2; n != 0; n /= 2) {
            x = rmul(x, x);

            if (n % 2 != 0) {
                z = rmul(z, x);
            }
        }
    }
}

////// lib/ds-thing/src/thing.sol
// thing.sol - `auth` with handy mixins. your things should be DSThings

// Copyright (C) 2017  DappHub, LLC

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* pragma solidity ^0.4.13; */

/* import 'ds-auth/auth.sol'; */
/* import 'ds-note/note.sol'; */
/* import 'ds-math/math.sol'; */

contract DSThing is DSAuth, DSNote, DSMath {

    function S(string s) internal pure returns (bytes4) {
        return bytes4(keccak256(s));
    }

}

////// lib/ds-token/lib/ds-stop/src/stop.sol
/// stop.sol -- mixin for enable/disable functionality

// Copyright (C) 2017  DappHub, LLC

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* pragma solidity ^0.4.13; */

/* import "ds-auth/auth.sol"; */
/* import "ds-note/note.sol"; */

contract DSStop is DSNote, DSAuth {

    bool public stopped;

    modifier stoppable {
        require(!stopped);
        _;
    }
    function stop() public auth note {
        stopped = true;
    }
    function start() public auth note {
        stopped = false;
    }

}

////// lib/ds-token/lib/erc20/src/erc20.sol
/// erc20.sol -- API for the ERC20 token standard

// See <https://github.com/ethereum/EIPs/issues/20>.

// This file likely does not meet the threshold of originality
// required for copyright to apply.  As a result, this is free and
// unencumbered software belonging to the public domain.

/* pragma solidity ^0.4.8; */

contract ERC20Events {
    event Approval(address indexed src, address indexed guy, uint wad);
    event Transfer(address indexed src, address indexed dst, uint wad);
}

contract ERC20 is ERC20Events {
    function totalSupply() public view returns (uint);
    function balanceOf(address guy) public view returns (uint);
    function allowance(address src, address guy) public view returns (uint);

    function approve(address guy, uint wad) public returns (bool);
    function transfer(address dst, uint wad) public returns (bool);
    function transferFrom(
        address src, address dst, uint wad
    ) public returns (bool);
}

////// lib/ds-token/src/base.sol
/// base.sol -- basic ERC20 implementation

// Copyright (C) 2015, 2016, 2017  DappHub, LLC

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* pragma solidity ^0.4.13; */

/* import "erc20/erc20.sol"; */
/* import "ds-math/math.sol"; */

contract DSTokenBase is ERC20, DSMath {
    uint256                                            _supply;
    mapping (address => uint256)                       _balances;
    mapping (address => mapping (address => uint256))  _approvals;

    function DSTokenBase(uint supply) public {
        _balances[msg.sender] = supply;
        _supply = supply;
    }

    function totalSupply() public view returns (uint) {
        return _supply;
    }
    function balanceOf(address src) public view returns (uint) {
        return _balances[src];
    }
    function allowance(address src, address guy) public view returns (uint) {
        return _approvals[src][guy];
    }

    function transfer(address dst, uint wad) public returns (bool) {
        return transferFrom(msg.sender, dst, wad);
    }

    function transferFrom(address src, address dst, uint wad)
        public
        returns (bool)
    {
        if (src != msg.sender) {
            _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad);
        }

        _balances[src] = sub(_balances[src], wad);
        _balances[dst] = add(_balances[dst], wad);

        Transfer(src, dst, wad);

        return true;
    }

    function approve(address guy, uint wad) public returns (bool) {
        _approvals[msg.sender][guy] = wad;

        Approval(msg.sender, guy, wad);

        return true;
    }
}

////// lib/ds-token/src/token.sol
/// token.sol -- ERC20 implementation with minting and burning

// Copyright (C) 2015, 2016, 2017  DappHub, LLC

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* pragma solidity ^0.4.13; */

/* import "ds-stop/stop.sol"; */

/* import "./base.sol"; */

contract DSToken is DSTokenBase(0), DSStop {

    bytes32  public  symbol;
    uint256  public  decimals = 18; // standard token precision. override to customize

    function DSToken(bytes32 symbol_) public {
        symbol = symbol_;
    }

    event Mint(address indexed guy, uint wad);
    event Burn(address indexed guy, uint wad);

    function approve(address guy) public stoppable returns (bool) {
        return super.approve(guy, uint(-1));
    }

    function approve(address guy, uint wad) public stoppable returns (bool) {
        return super.approve(guy, wad);
    }

    function transferFrom(address src, address dst, uint wad)
        public
        stoppable
        returns (bool)
    {
        if (src != msg.sender && _approvals[src][msg.sender] != uint(-1)) {
            _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad);
        }

        _balances[src] = sub(_balances[src], wad);
        _balances[dst] = add(_balances[dst], wad);

        Transfer(src, dst, wad);

        return true;
    }

    function push(address dst, uint wad) public {
        transferFrom(msg.sender, dst, wad);
    }
    function pull(address src, uint wad) public {
        transferFrom(src, msg.sender, wad);
    }
    function move(address src, address dst, uint wad) public {
        transferFrom(src, dst, wad);
    }

    function mint(uint wad) public {
        mint(msg.sender, wad);
    }
    function burn(uint wad) public {
        burn(msg.sender, wad);
    }
    function mint(address guy, uint wad) public auth stoppable {
        _balances[guy] = add(_balances[guy], wad);
        _supply = add(_supply, wad);
        Mint(guy, wad);
    }
    function burn(address guy, uint wad) public auth stoppable {
        if (guy != msg.sender && _approvals[guy][msg.sender] != uint(-1)) {
            _approvals[guy][msg.sender] = sub(_approvals[guy][msg.sender], wad);
        }

        _balances[guy] = sub(_balances[guy], wad);
        _supply = sub(_supply, wad);
        Burn(guy, wad);
    }

    // Optional token name
    bytes32   public  name = "";

    function setName(bytes32 name_) public auth {
        name = name_;
    }
}

////// lib/ds-value/src/value.sol
/// value.sol - a value is a simple thing, it can be get and set

// Copyright (C) 2017  DappHub, LLC

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* pragma solidity ^0.4.13; */

/* import 'ds-thing/thing.sol'; */

contract DSValue is DSThing {
    bool    has;
    bytes32 val;
    function peek() public view returns (bytes32, bool) {
        return (val,has);
    }
    function read() public view returns (bytes32) {
        var (wut, haz) = peek();
        assert(haz);
        return wut;
    }
    function poke(bytes32 wut) public note auth {
        val = wut;
        has = true;
    }
    function void() public note auth {  // unset the value
        has = false;
    }
}

////// src/vox.sol
/// vox.sol -- target price feed

// Copyright (C) 2016, 2017  Nikolai Mushegian <[email protected]>
// Copyright (C) 2016, 2017  Daniel Brockman <[email protected]>
// Copyright (C) 2017        Rain Break <[email protected]>

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* pragma solidity ^0.4.18; */

/* import "ds-thing/thing.sol"; */

contract SaiVox is DSThing {
    uint256  _par;
    uint256  _way;

    uint256  public  fix;
    uint256  public  how;
    uint256  public  tau;

    function SaiVox(uint par_) public {
        _par = fix = par_;
        _way = RAY;
        tau  = era();
    }

    function era() public view returns (uint) {
        return block.timestamp;
    }

    function mold(bytes32 param, uint val) public note auth {
        if (param == 'way') _way = val;
    }

    // Dai Target Price (ref per dai)
    function par() public returns (uint) {
        prod();
        return _par;
    }
    function way() public returns (uint) {
        prod();
        return _way;
    }

    function tell(uint256 ray) public note auth {
        fix = ray;
    }
    function tune(uint256 ray) public note auth {
        how = ray;
    }

    function prod() public note {
        var age = era() - tau;
        if (age == 0) return;  // optimised
        tau = era();

        if (_way != RAY) _par = rmul(_par, rpow(_way, age));  // optimised

        if (how == 0) return;  // optimised
        var wag = int128(how * age);
        _way = inj(prj(_way) + (fix < _par ? wag : -wag));
    }

    function inj(int128 x) internal pure returns (uint256) {
        return x >= 0 ? uint256(x) + RAY
            : rdiv(RAY, RAY + uint256(-x));
    }
    function prj(uint256 x) internal pure returns (int128) {
        return x >= RAY ? int128(x - RAY)
            : int128(RAY) - int128(rdiv(RAY, x));
    }
}

////// src/tub.sol
/// tub.sol -- simplified CDP engine (baby brother of `vat')

// Copyright (C) 2017  Nikolai Mushegian <[email protected]>
// Copyright (C) 2017  Daniel Brockman <[email protected]>
// Copyright (C) 2017  Rain Break <[email protected]>

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* pragma solidity ^0.4.18; */

/* import "ds-thing/thing.sol"; */
/* import "ds-token/token.sol"; */
/* import "ds-value/value.sol"; */

/* import "./vox.sol"; */

contract SaiTubEvents {
    event LogNewCup(address indexed lad, bytes32 cup);
}

contract SaiTub is DSThing, SaiTubEvents {
    DSToken  public  sai;  // Stablecoin
    DSToken  public  sin;  // Debt (negative sai)

    DSToken  public  skr;  // Abstracted collateral
    ERC20    public  gem;  // Underlying collateral

    DSToken  public  gov;  // Governance token

    SaiVox   public  vox;  // Target price feed
    DSValue  public  pip;  // Reference price feed
    DSValue  public  pep;  // Governance price feed

    address  public  tap;  // Liquidator
    address  public  pit;  // Governance Vault

    uint256  public  axe;  // Liquidation penalty
    uint256  public  cap;  // Debt ceiling
    uint256  public  mat;  // Liquidation ratio
    uint256  public  tax;  // Stability fee
    uint256  public  fee;  // Governance fee
    uint256  public  gap;  // Join-Exit Spread

    bool     public  off;  // Cage flag
    bool     public  out;  // Post cage exit

    uint256  public  fit;  // REF per SKR (just before settlement)

    uint256  public  rho;  // Time of last drip
    uint256         _chi;  // Accumulated Tax Rates
    uint256         _rhi;  // Accumulated Tax + Fee Rates
    uint256  public  rum;  // Total normalised debt

    uint256                   public  cupi;
    mapping (bytes32 => Cup)  public  cups;

    struct Cup {
        address  lad;      // CDP owner
        uint256  ink;      // Locked collateral (in SKR)
        uint256  art;      // Outstanding normalised debt (tax only)
        uint256  ire;      // Outstanding normalised debt
    }

    function lad(bytes32 cup) public view returns (address) {
        return cups[cup].lad;
    }
    function ink(bytes32 cup) public view returns (uint) {
        return cups[cup].ink;
    }
    function tab(bytes32 cup) public returns (uint) {
        return rmul(cups[cup].art, chi());
    }
    function rap(bytes32 cup) public returns (uint) {
        return sub(rmul(cups[cup].ire, rhi()), tab(cup));
    }

    // Total CDP Debt
    function din() public returns (uint) {
        return rmul(rum, chi());
    }
    // Backing collateral
    function air() public view returns (uint) {
        return skr.balanceOf(this);
    }
    // Raw collateral
    function pie() public view returns (uint) {
        return gem.balanceOf(this);
    }

    //------------------------------------------------------------------

    function SaiTub(
        DSToken  sai_,
        DSToken  sin_,
        DSToken  skr_,
        ERC20    gem_,
        DSToken  gov_,
        DSValue  pip_,
        DSValue  pep_,
        SaiVox   vox_,
        address  pit_
    ) public {
        gem = gem_;
        skr = skr_;

        sai = sai_;
        sin = sin_;

        gov = gov_;
        pit = pit_;

        pip = pip_;
        pep = pep_;
        vox = vox_;

        axe = RAY;
        mat = RAY;
        tax = RAY;
        fee = RAY;
        gap = WAD;

        _chi = RAY;
        _rhi = RAY;

        rho = era();
    }

    function era() public constant returns (uint) {
        return block.timestamp;
    }

    //--Risk-parameter-config-------------------------------------------

    function mold(bytes32 param, uint val) public note auth {
        if      (param == 'cap') cap = val;
        else if (param == 'mat') { require(val >= RAY); mat = val; }
        else if (param == 'tax') { require(val >= RAY); drip(); tax = val; }
        else if (param == 'fee') { require(val >= RAY); drip(); fee = val; }
        else if (param == 'axe') { require(val >= RAY); axe = val; }
        else if (param == 'gap') { require(val >= WAD); gap = val; }
        else return;
    }

    //--Price-feed-setters----------------------------------------------

    function setPip(DSValue pip_) public note auth {
        pip = pip_;
    }
    function setPep(DSValue pep_) public note auth {
        pep = pep_;
    }
    function setVox(SaiVox vox_) public note auth {
        vox = vox_;
    }

    //--Tap-setter------------------------------------------------------
    function turn(address tap_) public note {
        require(tap  == 0);
        require(tap_ != 0);
        tap = tap_;
    }

    //--Collateral-wrapper----------------------------------------------

    // Wrapper ratio (gem per skr)
    function per() public view returns (uint ray) {
        return skr.totalSupply() == 0 ? RAY : rdiv(pie(), skr.totalSupply());
    }
    // Join price (gem per skr)
    function ask(uint wad) public view returns (uint) {
        return rmul(wad, wmul(per(), gap));
    }
    // Exit price (gem per skr)
    function bid(uint wad) public view returns (uint) {
        return rmul(wad, wmul(per(), sub(2 * WAD, gap)));
    }
    function join(uint wad) public note {
        require(!off);
        require(ask(wad) > 0);
        require(gem.transferFrom(msg.sender, this, ask(wad)));
        skr.mint(msg.sender, wad);
    }
    function exit(uint wad) public note {
        require(!off || out);
        require(gem.transfer(msg.sender, bid(wad)));
        skr.burn(msg.sender, wad);
    }

    //--Stability-fee-accumulation--------------------------------------

    // Accumulated Rates
    function chi() public returns (uint) {
        drip();
        return _chi;
    }
    function rhi() public returns (uint) {
        drip();
        return _rhi;
    }
    function drip() public note {
        if (off) return;

        var rho_ = era();
        var age = rho_ - rho;
        if (age == 0) return;    // optimised
        rho = rho_;

        var inc = RAY;

        if (tax != RAY) {  // optimised
            var _chi_ = _chi;
            inc = rpow(tax, age);
            _chi = rmul(_chi, inc);
            sai.mint(tap, rmul(sub(_chi, _chi_), rum));
        }

        // optimised
        if (fee != RAY) inc = rmul(inc, rpow(fee, age));
        if (inc != RAY) _rhi = rmul(_rhi, inc);
    }


    //--CDP-risk-indicator----------------------------------------------

    // Abstracted collateral price (ref per skr)
    function tag() public view returns (uint wad) {
        return off ? fit : wmul(per(), uint(pip.read()));
    }
    // Returns true if cup is well-collateralized
    function safe(bytes32 cup) public returns (bool) {
        var pro = rmul(tag(), ink(cup));
        var con = rmul(vox.par(), tab(cup));
        var min = rmul(con, mat);
        return pro >= min;
    }


    //--CDP-operations--------------------------------------------------

    function open() public note returns (bytes32 cup) {
        require(!off);
        cupi = add(cupi, 1);
        cup = bytes32(cupi);
        cups[cup].lad = msg.sender;
        LogNewCup(msg.sender, cup);
    }
    function give(bytes32 cup, address guy) public note {
        require(msg.sender == cups[cup].lad);
        require(guy != 0);
        cups[cup].lad = guy;
    }

    function lock(bytes32 cup, uint wad) public note {
        require(!off);
        cups[cup].ink = add(cups[cup].ink, wad);
        skr.pull(msg.sender, wad);
        require(cups[cup].ink == 0 || cups[cup].ink > 0.005 ether);
    }
    function free(bytes32 cup, uint wad) public note {
        require(msg.sender == cups[cup].lad);
        cups[cup].ink = sub(cups[cup].ink, wad);
        skr.push(msg.sender, wad);
        require(safe(cup));
        require(cups[cup].ink == 0 || cups[cup].ink > 0.005 ether);
    }

    function draw(bytes32 cup, uint wad) public note {
        require(!off);
        require(msg.sender == cups[cup].lad);
        require(rdiv(wad, chi()) > 0);

        cups[cup].art = add(cups[cup].art, rdiv(wad, chi()));
        rum = add(rum, rdiv(wad, chi()));

        cups[cup].ire = add(cups[cup].ire, rdiv(wad, rhi()));
        sai.mint(cups[cup].lad, wad);

        require(safe(cup));
        require(sai.totalSupply() <= cap);
    }
    function wipe(bytes32 cup, uint wad) public note {
        require(!off);

        var owe = rmul(wad, rdiv(rap(cup), tab(cup)));

        cups[cup].art = sub(cups[cup].art, rdiv(wad, chi()));
        rum = sub(rum, rdiv(wad, chi()));

        cups[cup].ire = sub(cups[cup].ire, rdiv(add(wad, owe), rhi()));
        sai.burn(msg.sender, wad);

        var (val, ok) = pep.peek();
        if (ok && val != 0) gov.move(msg.sender, pit, wdiv(owe, uint(val)));
    }

    function shut(bytes32 cup) public note {
        require(!off);
        require(msg.sender == cups[cup].lad);
        if (tab(cup) != 0) wipe(cup, tab(cup));
        if (ink(cup) != 0) free(cup, ink(cup));
        delete cups[cup];
    }

    function bite(bytes32 cup) public note {
        require(!safe(cup) || off);

        // Take on all of the debt, except unpaid fees
        var rue = tab(cup);
        sin.mint(tap, rue);
        rum = sub(rum, cups[cup].art);
        cups[cup].art = 0;
        cups[cup].ire = 0;

        // Amount owed in SKR, including liquidation penalty
        var owe = rdiv(rmul(rmul(rue, axe), vox.par()), tag());

        if (owe > cups[cup].ink) {
            owe = cups[cup].ink;
        }

        skr.push(tap, owe);
        cups[cup].ink = sub(cups[cup].ink, owe);
    }

    //------------------------------------------------------------------

    function cage(uint fit_, uint jam) public note auth {
        require(!off && fit_ != 0);
        off = true;
        axe = RAY;
        gap = WAD;
        fit = fit_;         // ref per skr
        require(gem.transfer(tap, jam));
    }
    function flow() public note auth {
        require(off);
        out = true;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"wad","type":"uint256"}],"name":"join","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"skr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gov","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner_","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"era","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"cup","type":"bytes32"}],"name":"ink","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rho","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"air","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rhi","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"flow","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"cup","type":"bytes32"}],"name":"bite","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"cup","type":"bytes32"},{"name":"wad","type":"uint256"}],"name":"draw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"wad","type":"uint256"}],"name":"bid","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cupi","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"axe","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tag","outputs":[{"name":"wad","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"off","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vox","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"cup","type":"bytes32"}],"name":"rap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"cup","type":"bytes32"},{"name":"wad","type":"uint256"}],"name":"wipe","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"authority_","type":"address"}],"name":"setAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gem","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tap_","type":"address"}],"name":"turn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"per","outputs":[{"name":"ray","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"wad","type":"uint256"}],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pip_","type":"address"}],"name":"setPip","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pie","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fit_","type":"uint256"},{"name":"jam","type":"uint256"}],"name":"cage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sai","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"param","type":"bytes32"},{"name":"val","type":"uint256"}],"name":"mold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"drip","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"cup","type":"bytes32"},{"name":"wad","type":"uint256"}],"name":"free","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mat","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pep","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"out","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"cup","type":"bytes32"},{"name":"wad","type":"uint256"}],"name":"lock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"cup","type":"bytes32"}],"name":"shut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"cup","type":"bytes32"},{"name":"guy","type":"address"}],"name":"give","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"chi","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"vox_","type":"address"}],"name":"setVox","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pip","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"pep_","type":"address"}],"name":"setPep","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"fee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"cup","type":"bytes32"}],"name":"lad","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"din","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"wad","type":"uint256"}],"name":"ask","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"cup","type":"bytes32"}],"name":"safe","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pit","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"cup","type":"bytes32"}],"name":"tab","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"open","outputs":[{"name":"cup","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tap","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"cups","outputs":[{"name":"lad","type":"address"},{"name":"ink","type":"uint256"},{"name":"art","type":"uint256"},{"name":"ire","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"sai_","type":"address"},{"name":"sin_","type":"address"},{"name":"skr_","type":"address"},{"name":"gem_","type":"address"},{"name":"gov_","type":"address"},{"name":"pip_","type":"address"},{"name":"pep_","type":"address"},{"name":"vox_","type":"address"},{"name":"pit_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"lad","type":"address"},{"indexed":false,"name":"cup","type":"bytes32"}],"name":"LogNewCup","type":"event"},{"anonymous":true,"inputs":[{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":true,"name":"guy","type":"address"},{"indexed":true,"name":"foo","type":"bytes32"},{"indexed":true,"name":"bar","type":"bytes32"},{"indexed":false,"name":"wad","type":"uint256"},{"indexed":false,"name":"fax","type":"bytes"}],"name":"LogNote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"authority","type":"address"}],"name":"LogSetAuthority","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"LogSetOwner","type":"event"}]

6060604052341561000f57600080fd5b6040516101208062002a2383398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805160018054600160a060020a03191633600160a060020a031690811790915590925090507fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a260058054600160a060020a0319908116600160a060020a03898116919091179092556004805482168a84161790556002805482168c84161790556003805482168b8416179055600680548216888416179055600b80548216848416179055600880548216878416179055600980548216868416179055600780549091169184169190911790556b033b2e3c9fd0803ce8000000600c819055600e819055600f8190556010819055670de0b6b3a7640000601155601581905560165561017b64010000000061018d8102610a6c1704565b60145550610191975050505050505050565b4290565b61288280620001a16000396000f3006060604052600436106102b05763ffffffff60e060020a600035041663049878f381146102b5578063071bafb5146102cd5780630f8a771e146102fc57806312d43a511461030f57806313af403514610322578063143e55e0146103415780631f3634ed1461036657806320aba08b1461037c57806327e7e21e1461038f578063338a0261146103a2578063343aad82146103b5578063355274ea146103c857806340cc8854146103db578063440f19ba146103f1578063454a2ab31461040a5780634995543114610420578063509bf2bf1461043357806351f91066146104465780636626b26d1461045957806367550a35146104805780636c32c0a6146104935780636f78ee0d146104a657806373b38101146104bc5780637a9e5e4b146104d55780637bd2bea7146104f45780637e74325f146105075780637ec9c3b8146105265780637f8661a11461053957806382bf9a751461054f5780638a95a7461461056e5780638ceedb47146105815780638cf0c1911461059a5780638da5cb5b146105ad5780639166cba4146105c057806392b0d721146105d357806399c8d556146105ec5780639f678cca146105ff578063a5cd184e14610612578063ab0783da1461062b578063ace237f51461063e578063b2a1449b14610651578063b3b77a5114610664578063b84d21061461067d578063baa8529c14610693578063bf7e214f146106b5578063c8e13bb4146106c8578063c92aecc4146106db578063cf48d1a6146106ee578063d741e2f91461070d578063d9c27cc614610720578063ddca3f431461073f578063de5f551714610752578063e0ae96e914610768578063e47e7e661461077b578063e95823ad14610791578063f03c7c6e146107a7578063f7c8d634146107ba578063fcfff16f146107d0578063fd221031146107e3578063fdac0025146107f6575b600080fd5b34156102c057600080fd5b6102cb600435610849565b005b34156102d857600080fd5b6102e06109cd565b604051600160a060020a03909116815260200160405180910390f35b341561030757600080fd5b6102e06109dc565b341561031a57600080fd5b6102e06109eb565b341561032d57600080fd5b6102cb600160a060020a03600435166109fa565b341561034c57600080fd5b610354610a6c565b60405190815260200160405180910390f35b341561037157600080fd5b610354600435610a70565b341561038757600080fd5b610354610a85565b341561039a57600080fd5b610354610a8b565b34156103ad57600080fd5b610354610b05565b34156103c057600080fd5b6102cb610b16565b34156103d357600080fd5b610354610bb1565b34156103e657600080fd5b6102cb600435610bb7565b34156103fc57600080fd5b6102cb600435602435610e4b565b341561041557600080fd5b610354600435611077565b341561042b57600080fd5b6103546110af565b341561043e57600080fd5b6103546110b5565b341561045157600080fd5b6103546110bb565b341561046457600080fd5b61046c611149565b604051901515815260200160405180910390f35b341561048b57600080fd5b6102e0611152565b341561049e57600080fd5b610354611161565b34156104b157600080fd5b610354600435611167565b34156104c757600080fd5b6102cb600435602435611197565b34156104e057600080fd5b6102cb600160a060020a0360043516611422565b34156104ff57600080fd5b6102e0611494565b341561051257600080fd5b6102cb600160a060020a03600435166114a3565b341561053157600080fd5b610354611548565b341561054457600080fd5b6102cb600435611636565b341561055a57600080fd5b6102cb600160a060020a0360043516611793565b341561057957600080fd5b61035461182e565b341561058c57600080fd5b6102cb600435602435611889565b34156105a557600080fd5b6103546119d7565b34156105b857600080fd5b6102e06119dd565b34156105cb57600080fd5b6102e06119ec565b34156105de57600080fd5b6102cb6004356024356119fb565b34156105f757600080fd5b610354611c2c565b341561060a57600080fd5b6102cb611c32565b341561061d57600080fd5b6102cb600435602435611dd6565b341561063657600080fd5b610354611f47565b341561064957600080fd5b6102e0611f4d565b341561065c57600080fd5b61046c611f5c565b341561066f57600080fd5b6102cb600435602435611f6a565b341561068857600080fd5b6102cb6004356120ad565b341561069e57600080fd5b6102cb600435600160a060020a03602435166121ac565b34156106c057600080fd5b6102e061226e565b34156106d357600080fd5b61035461227d565b34156106e657600080fd5b610354612283565b34156106f957600080fd5b6102cb600160a060020a0360043516612294565b341561071857600080fd5b6102e061232f565b341561072b57600080fd5b6102cb600160a060020a036004351661233e565b341561074a57600080fd5b6103546123d9565b341561075d57600080fd5b6102e06004356123df565b341561077357600080fd5b6103546123fa565b341561078657600080fd5b61035460043561240a565b341561079c57600080fd5b61046c600435612423565b34156107b257600080fd5b6102e06124ca565b34156107c557600080fd5b6103546004356124d9565b34156107db57600080fd5b6103546124f7565b34156107ee57600080fd5b6102e06125d5565b341561080157600080fd5b61080c6004356125e4565b6040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390f35b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff16156108af57600080fd5b60006108ba8461240a565b116108c457600080fd5b600554600160a060020a03166323b872dd33306108e08761240a565b60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561093857600080fd5b6102c65a03f1151561094957600080fd5b50505060405180519050151561095e57600080fd5b600454600160a060020a03166340c10f19338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156109b457600080fd5b6102c65a03f115156109c557600080fd5b505050505050565b600354600160a060020a031681565b600454600160a060020a031681565b600654600160a060020a031681565b610a1033600035600160e060020a031916612615565b1515610a1b57600080fd5b60018054600160a060020a031916600160a060020a038381169190911791829055167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b4290565b60009081526019602052604090206001015490565b60145481565b600454600090600160a060020a03166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ae657600080fd5b6102c65a03f11515610af757600080fd5b505050604051805191505090565b6000610b0f611c32565b5060165490565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4610b8233600035600160e060020a031916612615565b1515610b8d57600080fd5b60125460ff161515610b9e57600080fd5b50506012805461ff001916610100179055565b600d5481565b6000806004356024358082600160a060020a033316600160e060020a031986351634873660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4610c1685612423565b1580610c24575060125460ff165b1515610c2f57600080fd5b610c38856124d9565b600354600a54919550600160a060020a03908116916340c10f1991168660405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610c9857600080fd5b6102c65a03f11515610ca957600080fd5b5050601754600087815260196020526040902060020154610cca925061270b565b60175560008581526019602052604081206002810182905560030155600c54610d7190610d6490610cfc90879061271b565b600754600160a060020a031663495d32cb6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d4457600080fd5b6102c65a03f11515610d5557600080fd5b5050506040518051905061271b565b610d6c6110bb565b61275e565b600086815260196020526040902060010154909350831115610da25760008581526019602052604090206001015492505b600454600a54600160a060020a039182169163b753a98c91168560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610dff57600080fd5b6102c65a03f11515610e1057600080fd5b505050600085815260196020526040902060010154610e2f908461270b565b6000958652601960205260409095206001019490945550505050565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff1615610eb157600080fd5b60008481526019602052604090205433600160a060020a03908116911614610ed857600080fd5b6000610ee684610d6c612283565b11610ef057600080fd5b600084815260196020526040902060020154610f1790610f1285610d6c612283565b612782565b600085815260196020526040902060020155601754610f3c90610f1285610d6c612283565b601755600084815260196020526040902060030154610f6190610f1285610d6c610b05565b6000858152601960205260409081902060038101929092556002549154600160a060020a03928316926340c10f199291169086905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610fd657600080fd5b6102c65a03f11515610fe757600080fd5b505050610ff384612423565b1515610ffe57600080fd5b600d54600254600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561104957600080fd5b6102c65a03f1151561105a57600080fd5b505050604051805190501115151561107157600080fd5b50505050565b60006110a9826110a4611088611548565b61109f670de0b6b3a764000060020260115461270b565b612792565b61271b565b92915050565b60185481565b600c5481565b60125460009060ff166111405761113b6110d3611548565b600854600160a060020a03166357de26a46000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561111b57600080fd5b6102c65a03f1151561112c57600080fd5b50505060405180519050612792565b611144565b6013545b905090565b60125460ff1681565b600754600160a060020a031681565b60115481565b6000818152601960205260408120600301546110a990611189906110a4610b05565b611192846124d9565b61270b565b600080806004356024358082600160a060020a033316600160e060020a031986351634873660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff16156111fe57600080fd5b611217866110a461120e8a611167565b610d6c8b6124d9565b60008881526019602052604090206002015490955061123c9061119288610d6c612283565b6000888152601960205260409020600201556017546112619061119288610d6c612283565b60175560008781526019602052604090206003015461128f906111926112878989612782565b610d6c610b05565b6000888152601960205260409081902060030191909155600254600160a060020a031690639dc29fac90339089905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156112fe57600080fd5b6102c65a03f1151561130f57600080fd5b5050600954600160a060020a031690506359e02dd76000604051604001526040518163ffffffff1660e060020a0281526004016040805180830381600087803b151561135a57600080fd5b6102c65a03f1151561136b57600080fd5b505050604051805190602001805190509350935082801561138b57508315155b1561141957600654600b54600160a060020a039182169163bb35783b913391166113b589896127ba565b60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b151561140457600080fd5b6102c65a03f1151561141557600080fd5b5050505b50505050505050565b61143833600035600160e060020a031916612615565b151561144357600080fd5b60008054600160a060020a031916600160a060020a038381169190911791829055167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600554600160a060020a031681565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4600a54600160a060020a03161561150f57600080fd5b600160a060020a038316151561152457600080fd5b5050600a8054600160a060020a031916600160a060020a0392909216919091179055565b600454600090600160a060020a03166318160ddd82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561159257600080fd5b6102c65a03f115156115a357600080fd5b50505060405180511590506116255761113b6115bd61182e565b600454600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561160557600080fd5b6102c65a03f1151561161657600080fd5b5050506040518051905061275e565b506b033b2e3c9fd0803ce800000090565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff1615806116a55750601254610100900460ff165b15156116b057600080fd5b600554600160a060020a031663a9059cbb336116cb86611077565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561171757600080fd5b6102c65a03f1151561172857600080fd5b50505060405180519050151561173d57600080fd5b600454600160a060020a0316639dc29fac338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156109b457600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a46117ff33600035600160e060020a031916612615565b151561180a57600080fd5b505060088054600160a060020a031916600160a060020a0392909216919091179055565b600554600090600160a060020a03166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ae657600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a46118f533600035600160e060020a031916612615565b151561190057600080fd5b60125460ff1615801561191257508315155b151561191d57600080fd5b6012805460ff191660011790556b033b2e3c9fd0803ce8000000600c55670de0b6b3a76400006011556013849055600554600a54600160a060020a039182169163a9059cbb91168560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156119b157600080fd5b6102c65a03f115156119c257600080fd5b50505060405180519050151561107157600080fd5b60175481565b600154600160a060020a031681565b600254600160a060020a031681565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4611a6733600035600160e060020a031916612615565b1515611a7257600080fd5b7f6361700000000000000000000000000000000000000000000000000000000000841415611aa457600d839055611071565b7f6d61740000000000000000000000000000000000000000000000000000000000841415611aef576b033b2e3c9fd0803ce8000000831015611ae557600080fd5b600e839055611071565b7f7461780000000000000000000000000000000000000000000000000000000000841415611b42576b033b2e3c9fd0803ce8000000831015611b3057600080fd5b611b38611c32565b600f839055611071565b7f6665650000000000000000000000000000000000000000000000000000000000841415611b95576b033b2e3c9fd0803ce8000000831015611b8357600080fd5b611b8b611c32565b6010839055611071565b7f6178650000000000000000000000000000000000000000000000000000000000841415611be0576b033b2e3c9fd0803ce8000000831015611bd657600080fd5b600c839055611071565b7f6761700000000000000000000000000000000000000000000000000000000000841415611c2757670de0b6b3a7640000831015611c1d57600080fd5b6011839055611071565b611071565b600f5481565b60008080806004356024358082600160a060020a033316600160e060020a031986351634873660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff1615611c9a576109c5565b611ca2610a6c565b9550601454860394508460001415611cb9576109c5565b6014869055600f546b033b2e3c9fd0803ce800000094508414611d84576015549250611ce7600f54866127d2565b9350611cf56015548561271b565b6015819055600254600a54600160a060020a03918216926340c10f199290911690611d2c90611d24908861270b565b60175461271b565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611d6f57600080fd5b6102c65a03f11515611d8057600080fd5b5050505b6010546b033b2e3c9fd0803ce800000014611dac57611da9846110a4601054886127d2565b93505b6b033b2e3c9fd0803ce800000084146109c557611dcb6016548561271b565b601655505050505050565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460008481526019602052604090205433600160a060020a03908116911614611e5357600080fd5b600084815260196020526040902060010154611e6f908461270b565b6000858152601960205260409081902060010191909155600454600160a060020a03169063b753a98c90339086905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611ede57600080fd5b6102c65a03f11515611eef57600080fd5b505050611efb84612423565b1515611f0657600080fd5b6000848152601960205260409020600101541580611f3c57506000848152601960205260409020600101546611c37937e0800090115b151561107157600080fd5b600e5481565b600954600160a060020a031681565b601254610100900460ff1681565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff1615611fd057600080fd5b600084815260196020526040902060010154611fec9084612782565b6000858152601960205260409081902060010191909155600454600160a060020a03169063f2d5d56b90339086905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561205b57600080fd5b6102c65a03f1151561206c57600080fd5b5050506000848152601960205260409020600101541580611f3c57506000848152601960205260409020600101546611c37937e08000901161107157600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff161561211357600080fd5b60008381526019602052604090205433600160a060020a0390811691161461213a57600080fd5b612143836124d9565b1561215a5761215a83612155856124d9565b611197565b61216383610a70565b1561217a5761217a8361217585610a70565b611dd6565b505060009081526019602052604081208054600160a060020a0319168155600181018290556002810182905560030155565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460008481526019602052604090205433600160a060020a0390811691161461222957600080fd5b600160a060020a038316151561223e57600080fd5b50506000918252601960205260409091208054600160a060020a031916600160a060020a03909216919091179055565b600054600160a060020a031681565b60135481565b600061228d611c32565b5060155490565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a461230033600035600160e060020a031916612615565b151561230b57600080fd5b505060078054600160a060020a031916600160a060020a0392909216919091179055565b600854600160a060020a031681565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a46123aa33600035600160e060020a031916612615565b15156123b557600080fd5b505060098054600160a060020a031916600160a060020a0392909216919091179055565b60105481565b600090815260196020526040902054600160a060020a031690565b60006111446017546110a4612283565b60006110a9826110a461241b611548565b601154612792565b60008060008061243d6124346110bb565b6110a487610a70565b6007549093506124b090600160a060020a031663495d32cb6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561248c57600080fd5b6102c65a03f1151561249d57600080fd5b505050604051805190506110a4876124d9565b91506124be82600e5461271b565b90921015949350505050565b600b54600160a060020a031681565b6000818152601960205260408120600201546110a9906110a4612283565b60006004356024358082600160a060020a033316600160e060020a031986351634873660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff161561255c57600080fd5b6125696018546001612782565b6018819055600081815260196020526040908190208054600160a060020a03191633600160a060020a03169081179091559194507f89b8893b806db50897c8e2362c71571cfaeb9761ee40727f683f1793cda9df169085905190815260200160405180910390a2505090565b600a54600160a060020a031681565b6019602052600090815260409020805460018201546002830154600390930154600160a060020a0390921692909184565b600030600160a060020a031683600160a060020a03161415612639575060016110a9565b600154600160a060020a0384811691161415612657575060016110a9565b600054600160a060020a03161515612671575060006110a9565b60008054600160a060020a03169063b7009613908590309086906040516020015260405160e060020a63ffffffff8616028152600160a060020a039384166004820152919092166024820152600160e060020a03199091166044820152606401602060405180830381600087803b15156126ea57600080fd5b6102c65a03f115156126fb57600080fd5b5050506040518051949350505050565b808203828111156110a957600080fd5b60006b033b2e3c9fd0803ce800000061274d612737858561282e565b60026b033b2e3c9fd0803ce80000005b04612782565b81151561275657fe5b049392505050565b60008161274d61277a856b033b2e3c9fd0803ce800000061282e565b600285612747565b808201828110156110a957600080fd5b6000670de0b6b3a764000061274d6127aa858561282e565b6002670de0b6b3a7640000612747565b60008161274d61277a85670de0b6b3a764000061282e565b60006002820615156127f0576b033b2e3c9fd0803ce80000006127f2565b825b90506002820491505b81156110a95761280b838461271b565b9250600282061561282357612820818461271b565b90505b6002820491506127fb565b600081158061284b57505080820282828281151561284857fe5b04145b15156110a957600080fd00a165627a7a72305820ea44dc4fd11cb9cfac4feb3bb7d7020723d56b79a953b9c62e00db617a06e100002900000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a2326035900000000000000000000000079f6d0f646706e1261acf0b93dcb864f357d4680000000000000000000000000f53ad2c6851052a81b42133467480961b2321c09000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2000000000000000000000000729d19f657bd0614b4985cf1d82531c67569197b00000000000000000000000099041f808d598b782d5a3e498681c2452a31da080000000000000000000000009b0f70df76165442ca6092939132bbaea77f2d7a00000000000000000000000069076e44a9c70a67d5b79d95795aba299083c275

Deployed Bytecode

0x6060604052600436106102b05763ffffffff60e060020a600035041663049878f381146102b5578063071bafb5146102cd5780630f8a771e146102fc57806312d43a511461030f57806313af403514610322578063143e55e0146103415780631f3634ed1461036657806320aba08b1461037c57806327e7e21e1461038f578063338a0261146103a2578063343aad82146103b5578063355274ea146103c857806340cc8854146103db578063440f19ba146103f1578063454a2ab31461040a5780634995543114610420578063509bf2bf1461043357806351f91066146104465780636626b26d1461045957806367550a35146104805780636c32c0a6146104935780636f78ee0d146104a657806373b38101146104bc5780637a9e5e4b146104d55780637bd2bea7146104f45780637e74325f146105075780637ec9c3b8146105265780637f8661a11461053957806382bf9a751461054f5780638a95a7461461056e5780638ceedb47146105815780638cf0c1911461059a5780638da5cb5b146105ad5780639166cba4146105c057806392b0d721146105d357806399c8d556146105ec5780639f678cca146105ff578063a5cd184e14610612578063ab0783da1461062b578063ace237f51461063e578063b2a1449b14610651578063b3b77a5114610664578063b84d21061461067d578063baa8529c14610693578063bf7e214f146106b5578063c8e13bb4146106c8578063c92aecc4146106db578063cf48d1a6146106ee578063d741e2f91461070d578063d9c27cc614610720578063ddca3f431461073f578063de5f551714610752578063e0ae96e914610768578063e47e7e661461077b578063e95823ad14610791578063f03c7c6e146107a7578063f7c8d634146107ba578063fcfff16f146107d0578063fd221031146107e3578063fdac0025146107f6575b600080fd5b34156102c057600080fd5b6102cb600435610849565b005b34156102d857600080fd5b6102e06109cd565b604051600160a060020a03909116815260200160405180910390f35b341561030757600080fd5b6102e06109dc565b341561031a57600080fd5b6102e06109eb565b341561032d57600080fd5b6102cb600160a060020a03600435166109fa565b341561034c57600080fd5b610354610a6c565b60405190815260200160405180910390f35b341561037157600080fd5b610354600435610a70565b341561038757600080fd5b610354610a85565b341561039a57600080fd5b610354610a8b565b34156103ad57600080fd5b610354610b05565b34156103c057600080fd5b6102cb610b16565b34156103d357600080fd5b610354610bb1565b34156103e657600080fd5b6102cb600435610bb7565b34156103fc57600080fd5b6102cb600435602435610e4b565b341561041557600080fd5b610354600435611077565b341561042b57600080fd5b6103546110af565b341561043e57600080fd5b6103546110b5565b341561045157600080fd5b6103546110bb565b341561046457600080fd5b61046c611149565b604051901515815260200160405180910390f35b341561048b57600080fd5b6102e0611152565b341561049e57600080fd5b610354611161565b34156104b157600080fd5b610354600435611167565b34156104c757600080fd5b6102cb600435602435611197565b34156104e057600080fd5b6102cb600160a060020a0360043516611422565b34156104ff57600080fd5b6102e0611494565b341561051257600080fd5b6102cb600160a060020a03600435166114a3565b341561053157600080fd5b610354611548565b341561054457600080fd5b6102cb600435611636565b341561055a57600080fd5b6102cb600160a060020a0360043516611793565b341561057957600080fd5b61035461182e565b341561058c57600080fd5b6102cb600435602435611889565b34156105a557600080fd5b6103546119d7565b34156105b857600080fd5b6102e06119dd565b34156105cb57600080fd5b6102e06119ec565b34156105de57600080fd5b6102cb6004356024356119fb565b34156105f757600080fd5b610354611c2c565b341561060a57600080fd5b6102cb611c32565b341561061d57600080fd5b6102cb600435602435611dd6565b341561063657600080fd5b610354611f47565b341561064957600080fd5b6102e0611f4d565b341561065c57600080fd5b61046c611f5c565b341561066f57600080fd5b6102cb600435602435611f6a565b341561068857600080fd5b6102cb6004356120ad565b341561069e57600080fd5b6102cb600435600160a060020a03602435166121ac565b34156106c057600080fd5b6102e061226e565b34156106d357600080fd5b61035461227d565b34156106e657600080fd5b610354612283565b34156106f957600080fd5b6102cb600160a060020a0360043516612294565b341561071857600080fd5b6102e061232f565b341561072b57600080fd5b6102cb600160a060020a036004351661233e565b341561074a57600080fd5b6103546123d9565b341561075d57600080fd5b6102e06004356123df565b341561077357600080fd5b6103546123fa565b341561078657600080fd5b61035460043561240a565b341561079c57600080fd5b61046c600435612423565b34156107b257600080fd5b6102e06124ca565b34156107c557600080fd5b6103546004356124d9565b34156107db57600080fd5b6103546124f7565b34156107ee57600080fd5b6102e06125d5565b341561080157600080fd5b61080c6004356125e4565b6040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390f35b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff16156108af57600080fd5b60006108ba8461240a565b116108c457600080fd5b600554600160a060020a03166323b872dd33306108e08761240a565b60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561093857600080fd5b6102c65a03f1151561094957600080fd5b50505060405180519050151561095e57600080fd5b600454600160a060020a03166340c10f19338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156109b457600080fd5b6102c65a03f115156109c557600080fd5b505050505050565b600354600160a060020a031681565b600454600160a060020a031681565b600654600160a060020a031681565b610a1033600035600160e060020a031916612615565b1515610a1b57600080fd5b60018054600160a060020a031916600160a060020a038381169190911791829055167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b4290565b60009081526019602052604090206001015490565b60145481565b600454600090600160a060020a03166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ae657600080fd5b6102c65a03f11515610af757600080fd5b505050604051805191505090565b6000610b0f611c32565b5060165490565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4610b8233600035600160e060020a031916612615565b1515610b8d57600080fd5b60125460ff161515610b9e57600080fd5b50506012805461ff001916610100179055565b600d5481565b6000806004356024358082600160a060020a033316600160e060020a031986351634873660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4610c1685612423565b1580610c24575060125460ff165b1515610c2f57600080fd5b610c38856124d9565b600354600a54919550600160a060020a03908116916340c10f1991168660405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610c9857600080fd5b6102c65a03f11515610ca957600080fd5b5050601754600087815260196020526040902060020154610cca925061270b565b60175560008581526019602052604081206002810182905560030155600c54610d7190610d6490610cfc90879061271b565b600754600160a060020a031663495d32cb6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d4457600080fd5b6102c65a03f11515610d5557600080fd5b5050506040518051905061271b565b610d6c6110bb565b61275e565b600086815260196020526040902060010154909350831115610da25760008581526019602052604090206001015492505b600454600a54600160a060020a039182169163b753a98c91168560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610dff57600080fd5b6102c65a03f11515610e1057600080fd5b505050600085815260196020526040902060010154610e2f908461270b565b6000958652601960205260409095206001019490945550505050565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff1615610eb157600080fd5b60008481526019602052604090205433600160a060020a03908116911614610ed857600080fd5b6000610ee684610d6c612283565b11610ef057600080fd5b600084815260196020526040902060020154610f1790610f1285610d6c612283565b612782565b600085815260196020526040902060020155601754610f3c90610f1285610d6c612283565b601755600084815260196020526040902060030154610f6190610f1285610d6c610b05565b6000858152601960205260409081902060038101929092556002549154600160a060020a03928316926340c10f199291169086905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610fd657600080fd5b6102c65a03f11515610fe757600080fd5b505050610ff384612423565b1515610ffe57600080fd5b600d54600254600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561104957600080fd5b6102c65a03f1151561105a57600080fd5b505050604051805190501115151561107157600080fd5b50505050565b60006110a9826110a4611088611548565b61109f670de0b6b3a764000060020260115461270b565b612792565b61271b565b92915050565b60185481565b600c5481565b60125460009060ff166111405761113b6110d3611548565b600854600160a060020a03166357de26a46000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561111b57600080fd5b6102c65a03f1151561112c57600080fd5b50505060405180519050612792565b611144565b6013545b905090565b60125460ff1681565b600754600160a060020a031681565b60115481565b6000818152601960205260408120600301546110a990611189906110a4610b05565b611192846124d9565b61270b565b600080806004356024358082600160a060020a033316600160e060020a031986351634873660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff16156111fe57600080fd5b611217866110a461120e8a611167565b610d6c8b6124d9565b60008881526019602052604090206002015490955061123c9061119288610d6c612283565b6000888152601960205260409020600201556017546112619061119288610d6c612283565b60175560008781526019602052604090206003015461128f906111926112878989612782565b610d6c610b05565b6000888152601960205260409081902060030191909155600254600160a060020a031690639dc29fac90339089905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156112fe57600080fd5b6102c65a03f1151561130f57600080fd5b5050600954600160a060020a031690506359e02dd76000604051604001526040518163ffffffff1660e060020a0281526004016040805180830381600087803b151561135a57600080fd5b6102c65a03f1151561136b57600080fd5b505050604051805190602001805190509350935082801561138b57508315155b1561141957600654600b54600160a060020a039182169163bb35783b913391166113b589896127ba565b60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b151561140457600080fd5b6102c65a03f1151561141557600080fd5b5050505b50505050505050565b61143833600035600160e060020a031916612615565b151561144357600080fd5b60008054600160a060020a031916600160a060020a038381169190911791829055167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600554600160a060020a031681565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4600a54600160a060020a03161561150f57600080fd5b600160a060020a038316151561152457600080fd5b5050600a8054600160a060020a031916600160a060020a0392909216919091179055565b600454600090600160a060020a03166318160ddd82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561159257600080fd5b6102c65a03f115156115a357600080fd5b50505060405180511590506116255761113b6115bd61182e565b600454600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561160557600080fd5b6102c65a03f1151561161657600080fd5b5050506040518051905061275e565b506b033b2e3c9fd0803ce800000090565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff1615806116a55750601254610100900460ff165b15156116b057600080fd5b600554600160a060020a031663a9059cbb336116cb86611077565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561171757600080fd5b6102c65a03f1151561172857600080fd5b50505060405180519050151561173d57600080fd5b600454600160a060020a0316639dc29fac338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156109b457600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a46117ff33600035600160e060020a031916612615565b151561180a57600080fd5b505060088054600160a060020a031916600160a060020a0392909216919091179055565b600554600090600160a060020a03166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ae657600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a46118f533600035600160e060020a031916612615565b151561190057600080fd5b60125460ff1615801561191257508315155b151561191d57600080fd5b6012805460ff191660011790556b033b2e3c9fd0803ce8000000600c55670de0b6b3a76400006011556013849055600554600a54600160a060020a039182169163a9059cbb91168560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156119b157600080fd5b6102c65a03f115156119c257600080fd5b50505060405180519050151561107157600080fd5b60175481565b600154600160a060020a031681565b600254600160a060020a031681565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4611a6733600035600160e060020a031916612615565b1515611a7257600080fd5b7f6361700000000000000000000000000000000000000000000000000000000000841415611aa457600d839055611071565b7f6d61740000000000000000000000000000000000000000000000000000000000841415611aef576b033b2e3c9fd0803ce8000000831015611ae557600080fd5b600e839055611071565b7f7461780000000000000000000000000000000000000000000000000000000000841415611b42576b033b2e3c9fd0803ce8000000831015611b3057600080fd5b611b38611c32565b600f839055611071565b7f6665650000000000000000000000000000000000000000000000000000000000841415611b95576b033b2e3c9fd0803ce8000000831015611b8357600080fd5b611b8b611c32565b6010839055611071565b7f6178650000000000000000000000000000000000000000000000000000000000841415611be0576b033b2e3c9fd0803ce8000000831015611bd657600080fd5b600c839055611071565b7f6761700000000000000000000000000000000000000000000000000000000000841415611c2757670de0b6b3a7640000831015611c1d57600080fd5b6011839055611071565b611071565b600f5481565b60008080806004356024358082600160a060020a033316600160e060020a031986351634873660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff1615611c9a576109c5565b611ca2610a6c565b9550601454860394508460001415611cb9576109c5565b6014869055600f546b033b2e3c9fd0803ce800000094508414611d84576015549250611ce7600f54866127d2565b9350611cf56015548561271b565b6015819055600254600a54600160a060020a03918216926340c10f199290911690611d2c90611d24908861270b565b60175461271b565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611d6f57600080fd5b6102c65a03f11515611d8057600080fd5b5050505b6010546b033b2e3c9fd0803ce800000014611dac57611da9846110a4601054886127d2565b93505b6b033b2e3c9fd0803ce800000084146109c557611dcb6016548561271b565b601655505050505050565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460008481526019602052604090205433600160a060020a03908116911614611e5357600080fd5b600084815260196020526040902060010154611e6f908461270b565b6000858152601960205260409081902060010191909155600454600160a060020a03169063b753a98c90339086905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611ede57600080fd5b6102c65a03f11515611eef57600080fd5b505050611efb84612423565b1515611f0657600080fd5b6000848152601960205260409020600101541580611f3c57506000848152601960205260409020600101546611c37937e0800090115b151561107157600080fd5b600e5481565b600954600160a060020a031681565b601254610100900460ff1681565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff1615611fd057600080fd5b600084815260196020526040902060010154611fec9084612782565b6000858152601960205260409081902060010191909155600454600160a060020a03169063f2d5d56b90339086905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561205b57600080fd5b6102c65a03f1151561206c57600080fd5b5050506000848152601960205260409020600101541580611f3c57506000848152601960205260409020600101546611c37937e08000901161107157600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff161561211357600080fd5b60008381526019602052604090205433600160a060020a0390811691161461213a57600080fd5b612143836124d9565b1561215a5761215a83612155856124d9565b611197565b61216383610a70565b1561217a5761217a8361217585610a70565b611dd6565b505060009081526019602052604081208054600160a060020a0319168155600181018290556002810182905560030155565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460008481526019602052604090205433600160a060020a0390811691161461222957600080fd5b600160a060020a038316151561223e57600080fd5b50506000918252601960205260409091208054600160a060020a031916600160a060020a03909216919091179055565b600054600160a060020a031681565b60135481565b600061228d611c32565b5060155490565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a461230033600035600160e060020a031916612615565b151561230b57600080fd5b505060078054600160a060020a031916600160a060020a0392909216919091179055565b600854600160a060020a031681565b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a46123aa33600035600160e060020a031916612615565b15156123b557600080fd5b505060098054600160a060020a031916600160a060020a0392909216919091179055565b60105481565b600090815260196020526040902054600160a060020a031690565b60006111446017546110a4612283565b60006110a9826110a461241b611548565b601154612792565b60008060008061243d6124346110bb565b6110a487610a70565b6007549093506124b090600160a060020a031663495d32cb6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561248c57600080fd5b6102c65a03f1151561249d57600080fd5b505050604051805190506110a4876124d9565b91506124be82600e5461271b565b90921015949350505050565b600b54600160a060020a031681565b6000818152601960205260408120600201546110a9906110a4612283565b60006004356024358082600160a060020a033316600160e060020a031986351634873660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a460125460ff161561255c57600080fd5b6125696018546001612782565b6018819055600081815260196020526040908190208054600160a060020a03191633600160a060020a03169081179091559194507f89b8893b806db50897c8e2362c71571cfaeb9761ee40727f683f1793cda9df169085905190815260200160405180910390a2505090565b600a54600160a060020a031681565b6019602052600090815260409020805460018201546002830154600390930154600160a060020a0390921692909184565b600030600160a060020a031683600160a060020a03161415612639575060016110a9565b600154600160a060020a0384811691161415612657575060016110a9565b600054600160a060020a03161515612671575060006110a9565b60008054600160a060020a03169063b7009613908590309086906040516020015260405160e060020a63ffffffff8616028152600160a060020a039384166004820152919092166024820152600160e060020a03199091166044820152606401602060405180830381600087803b15156126ea57600080fd5b6102c65a03f115156126fb57600080fd5b5050506040518051949350505050565b808203828111156110a957600080fd5b60006b033b2e3c9fd0803ce800000061274d612737858561282e565b60026b033b2e3c9fd0803ce80000005b04612782565b81151561275657fe5b049392505050565b60008161274d61277a856b033b2e3c9fd0803ce800000061282e565b600285612747565b808201828110156110a957600080fd5b6000670de0b6b3a764000061274d6127aa858561282e565b6002670de0b6b3a7640000612747565b60008161274d61277a85670de0b6b3a764000061282e565b60006002820615156127f0576b033b2e3c9fd0803ce80000006127f2565b825b90506002820491505b81156110a95761280b838461271b565b9250600282061561282357612820818461271b565b90505b6002820491506127fb565b600081158061284b57505080820282828281151561284857fe5b04145b15156110a957600080fd00a165627a7a72305820ea44dc4fd11cb9cfac4feb3bb7d7020723d56b79a953b9c62e00db617a06e1000029

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

00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a2326035900000000000000000000000079f6d0f646706e1261acf0b93dcb864f357d4680000000000000000000000000f53ad2c6851052a81b42133467480961b2321c09000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2000000000000000000000000729d19f657bd0614b4985cf1d82531c67569197b00000000000000000000000099041f808d598b782d5a3e498681c2452a31da080000000000000000000000009b0f70df76165442ca6092939132bbaea77f2d7a00000000000000000000000069076e44a9c70a67d5b79d95795aba299083c275

-----Decoded View---------------
Arg [0] : sai_ (address): 0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359
Arg [1] : sin_ (address): 0x79F6D0f646706E1261aCF0b93DCB864f357d4680
Arg [2] : skr_ (address): 0xf53AD2c6851052A81B42133467480961B2321C09
Arg [3] : gem_ (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [4] : gov_ (address): 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2
Arg [5] : pip_ (address): 0x729D19f657BD0614b4985Cf1D82531c67569197B
Arg [6] : pep_ (address): 0x99041F808D598B782D5a3e498681C2452A31da08
Arg [7] : vox_ (address): 0x9B0F70Df76165442ca6092939132bBAEA77f2d7A
Arg [8] : pit_ (address): 0x69076e44a9C70a67D5b79d95795Aba299083c275

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a23260359
Arg [1] : 00000000000000000000000079f6d0f646706e1261acf0b93dcb864f357d4680
Arg [2] : 000000000000000000000000f53ad2c6851052a81b42133467480961b2321c09
Arg [3] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [4] : 0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2
Arg [5] : 000000000000000000000000729d19f657bd0614b4985cf1d82531c67569197b
Arg [6] : 00000000000000000000000099041f808d598b782d5a3e498681c2452a31da08
Arg [7] : 0000000000000000000000009b0f70df76165442ca6092939132bbaea77f2d7a
Arg [8] : 00000000000000000000000069076e44a9c70a67d5b79d95795aba299083c275


Swarm Source

bzzr://ea44dc4fd11cb9cfac4feb3bb7d7020723d56b79a953b9c62e00db617a06e100

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.