Contract 0x5d5Bea9f0Fc13d967511668a60a3369fD53F784F 3

 

Contract Overview

Balance:
0 Ether

EtherValue:
$0.00

Token:
Txn Hash Method
Index
From
To
Value
0xd977959568bf1da7b61ef10e6e6955af51002bab049172de49f4ef0e341b398aClaim265888052022-09-30 23:25:1214 mins ago0xff53e3a27b7252148e0f1daf4a00261eee59177f IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000341142220.001
0x2494be29924cd36776c964de24d0dda6327db927ded5853bf4c39f9270b6b584Claim265850912022-09-30 22:45:1754 mins ago 0x442ed3e7d89d44180ea826675c5d6e5b350e0f4c IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000372913540.001
0xf82143b5595a7436fd6e1914f5ec2bf71099f2b04cbeffac8a73d5c049c2f156Claim265850342022-09-30 22:44:4755 mins ago 0x442ed3e7d89d44180ea826675c5d6e5b350e0f4c IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000372913540.001
0x3981ff572fc6a631b11498bf74efe0804c8f54244c15d24862d9ae7ca02230dbClaim265845502022-09-30 22:36:551 hr 2 mins ago0xdbab0b75921e3008fd0bb621a8248d969d2d2f0d IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000462981210.001
0xc8024ba6e4fcb04c7de819e48511d6014b544d456a27a769b6fe8557863d1cb2Claim265835732022-09-30 22:25:481 hr 14 mins ago0x3bc29ca7ff3bb9a205a766d31c1cdd6917202734 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000594439160.001
0x0667630e2344bb8839dbfff5936a4eb66f6cbd5c584c148a0670a982ee4e6c88Claim265834372022-09-30 22:24:181 hr 15 mins ago0x3bc29ca7ff3bb9a205a766d31c1cdd6917202734 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000510308310.001
0xde449d11fd5ed5a3654ca53b5e82f7bef7eabda18a2762d5d5ab003e3195b757Claim265832022022-09-30 22:21:291 hr 18 mins ago0x3bc29ca7ff3bb9a205a766d31c1cdd6917202734 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000773127790.001
0xe4a5a361546a7b01e8e0bd1851597fb82cdda0ce74334a1e48416eea56e7dda1Claim265826762022-09-30 22:15:081 hr 24 mins ago0xf09b9d7949876a20ca071b42fda58b80563a7686 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000574375370.001
0x84548d79b5746b4ef0429c178ce6b61b71b62a8f048c3285008c2848789dd983Claim265825452022-09-30 22:13:521 hr 26 mins ago0xe9eb5b18f6a6098eae9d38d03dbfdc924bd757e9 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000466696950.001
0xa63c579eb0b595dcaed867c3a8e6d78c8311dd0335f54686263861d7516cc7eaClaim265825432022-09-30 22:13:521 hr 26 mins ago0xa669070d106e96cc2390523e9745b425a1b3a0e0 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000466871440.001
0x85e9289259e3fa728228ac997259e7cde14120b07252bf5abebe1ae7fce999e2Claim265793582022-09-30 21:52:541 hr 46 mins ago0x276528ee28e808b8bcc3a660ed3ca0e3a368ed78 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.000047188530.001
0x3cb3643a67ae1044b85298c5ad5a603266ea08b84ea53d198fae8dcf9cac3628Claim265789482022-09-30 21:48:361 hr 51 mins ago0x08072a5fbc90eed1ca4fb863c1df8aa1fec61cfa IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000481943280.001
0x99cb6353682cc30d3a76a4992fb24b0b96f228ca33fa8575ff7ef2ecda91035fClaim265789012022-09-30 21:48:061 hr 51 mins ago0x08072a5fbc90eed1ca4fb863c1df8aa1fec61cfa IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.000054444960.001
0x41ccc945d8e17a1ad33e553ab82644e92e9bd1d61fdb9049751e435616079713Claim265788372022-09-30 21:47:361 hr 52 mins ago0xfffa889f71003f256f0e14b48e54fa2dad1f2ff0 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000549891550.001
0x5803dc7a21c0b89d9e9fb2b341987b059d18f445d98dc74c0ea3faf28412fe71Claim265787972022-09-30 21:47:061 hr 52 mins ago0xfffa889f71003f256f0e14b48e54fa2dad1f2ff0 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000549446350.001
0xf10dc760843450530385a7eec6a8fe871c20ec61609e4ee66560e9e4c6855e55Claim265787632022-09-30 21:46:511 hr 53 mins ago0xfffa889f71003f256f0e14b48e54fa2dad1f2ff0 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000549446350.001
0x386b71d9867c95e22f7be7e1fc7cb053295783334294a228d27da83e684a4d22Claim265786632022-09-30 21:45:501 hr 54 mins ago0xfffa889f71003f256f0e14b48e54fa2dad1f2ff0 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000671530140.001
0xf32fba095d93c0822636112a7acf14c69743f79f8d2822ffeba4f9eb3074ed69Claim265784042022-09-30 21:43:481 hr 56 mins ago0x95b05f935655c37ada2088c5767e5006f230b068 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000702202810.001
0xaa72bdb74758a54aa8acccc11bed56d7bdb4ea802985ec244fe487defb14c869Claim265783582022-09-30 21:43:181 hr 56 mins ago0x8e88687cabfb21fa7eea14fc445e705d9640b5f6 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000702878730.001
0xf71ab8649c415cfd56237a7fde5adfef8dcfc7a2cfb5f2455d5d6cca0d950a2aClaim265782512022-09-30 21:42:161 hr 57 mins ago0x4a4d72082d31f2f7051558b5c41ead5aa7beeb03 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000702522660.001
0x84b330302c3aa21a3b1520485d6d0000c7ffa8e6d3ea825ec32f4e98700bae5eClaim265741032022-09-30 20:58:262 hrs 41 mins ago0xba1b35eb69052aef4ce95abc0c38e0ff67410aef IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000574451420.001
0x85df754cd58472a83eb571b03fbd42efafdad630e90994f75a63b4193ebea18eClaim265741022022-09-30 20:58:262 hrs 41 mins ago0x95b05f935655c37ada2088c5767e5006f230b068 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.000057426390.001
0x13279ca0e3650b627c2d716b0ce84497740c4f156a733ce7b89afbd919399f2eClaim265740692022-09-30 20:58:112 hrs 41 mins ago0xba1b35eb69052aef4ce95abc0c38e0ff67410aef IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000574299980.001
0x5181fc26161341ff346ce49518d7965c309c3bb92dd75a678fb9631ac21652deClaim265739932022-09-30 20:57:412 hrs 42 mins ago0xba1b35eb69052aef4ce95abc0c38e0ff67410aef IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000577611630.001
0xd615049993a3be701431bccbde0a2c2e184f8c5f4bc503512b27436fc10cf6a1Claim265738262022-09-30 20:56:112 hrs 43 mins ago0x95b05f935655c37ada2088c5767e5006f230b068 IN  0x5d5bea9f0fc13d967511668a60a3369fd53f784f0 Ether0.0000572994030.001
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd977959568bf1da7b61ef10e6e6955af51002bab049172de49f4ef0e341b398a265888052022-09-30 23:25:1214 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xd977959568bf1da7b61ef10e6e6955af51002bab049172de49f4ef0e341b398a265888052022-09-30 23:25:1214 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xd977959568bf1da7b61ef10e6e6955af51002bab049172de49f4ef0e341b398a265888052022-09-30 23:25:1214 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xd977959568bf1da7b61ef10e6e6955af51002bab049172de49f4ef0e341b398a265888052022-09-30 23:25:1214 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xd977959568bf1da7b61ef10e6e6955af51002bab049172de49f4ef0e341b398a265888052022-09-30 23:25:1214 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0x2494be29924cd36776c964de24d0dda6327db927ded5853bf4c39f9270b6b584265850912022-09-30 22:45:1754 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0x2494be29924cd36776c964de24d0dda6327db927ded5853bf4c39f9270b6b584265850912022-09-30 22:45:1754 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0x2494be29924cd36776c964de24d0dda6327db927ded5853bf4c39f9270b6b584265850912022-09-30 22:45:1754 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0x2494be29924cd36776c964de24d0dda6327db927ded5853bf4c39f9270b6b584265850912022-09-30 22:45:1754 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0x2494be29924cd36776c964de24d0dda6327db927ded5853bf4c39f9270b6b584265850912022-09-30 22:45:1754 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xf82143b5595a7436fd6e1914f5ec2bf71099f2b04cbeffac8a73d5c049c2f156265850342022-09-30 22:44:4755 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xf82143b5595a7436fd6e1914f5ec2bf71099f2b04cbeffac8a73d5c049c2f156265850342022-09-30 22:44:4755 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xf82143b5595a7436fd6e1914f5ec2bf71099f2b04cbeffac8a73d5c049c2f156265850342022-09-30 22:44:4755 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xf82143b5595a7436fd6e1914f5ec2bf71099f2b04cbeffac8a73d5c049c2f156265850342022-09-30 22:44:4755 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xf82143b5595a7436fd6e1914f5ec2bf71099f2b04cbeffac8a73d5c049c2f156265850342022-09-30 22:44:4755 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0x3981ff572fc6a631b11498bf74efe0804c8f54244c15d24862d9ae7ca02230db265845502022-09-30 22:36:551 hr 2 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0x3981ff572fc6a631b11498bf74efe0804c8f54244c15d24862d9ae7ca02230db265845502022-09-30 22:36:551 hr 2 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0x3981ff572fc6a631b11498bf74efe0804c8f54244c15d24862d9ae7ca02230db265845502022-09-30 22:36:551 hr 2 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0x3981ff572fc6a631b11498bf74efe0804c8f54244c15d24862d9ae7ca02230db265845502022-09-30 22:36:551 hr 2 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xc8024ba6e4fcb04c7de819e48511d6014b544d456a27a769b6fe8557863d1cb2265835732022-09-30 22:25:481 hr 14 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xc8024ba6e4fcb04c7de819e48511d6014b544d456a27a769b6fe8557863d1cb2265835732022-09-30 22:25:481 hr 14 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xc8024ba6e4fcb04c7de819e48511d6014b544d456a27a769b6fe8557863d1cb2265835732022-09-30 22:25:481 hr 14 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0xc8024ba6e4fcb04c7de819e48511d6014b544d456a27a769b6fe8557863d1cb2265835732022-09-30 22:25:481 hr 14 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0x0667630e2344bb8839dbfff5936a4eb66f6cbd5c584c148a0670a982ee4e6c88265834372022-09-30 22:24:181 hr 15 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
0x0667630e2344bb8839dbfff5936a4eb66f6cbd5c584c148a0670a982ee4e6c88265834372022-09-30 22:24:181 hr 15 mins ago 0x5d5bea9f0fc13d967511668a60a3369fd53f784f 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e260 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RewardsDistributor

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Optimistic.Etherscan.io on 2022-06-01
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.13;

library Math {
    function max(uint a, uint b) internal pure returns (uint) {
        return a >= b ? a : b;
    }
    function min(uint a, uint b) internal pure returns (uint) {
        return a < b ? a : b;
    }
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
    function cbrt(uint256 n) internal pure returns (uint256) { unchecked {
        uint256 x = 0;
        for (uint256 y = 1 << 255; y > 0; y >>= 3) {
            x <<= 1;
            uint256 z = 3 * x * (x + 1) + 1;
            if (n / y >= z) {
                n -= y * z;
                x += 1;
            }
        }
        return x;
    }}
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function transfer(address recipient, uint amount) external returns (bool);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function balanceOf(address) external view returns (uint);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

interface IRewardsDistributor {
    function checkpoint_token() external;
    function checkpoint_total_supply() external;
}

interface IVotingEscrow {

    struct Point {
        int128 bias;
        int128 slope; // # -dweight / dt
        uint256 ts;
        uint256 blk; // block
    }

    function token() external view returns (address);
    function team() external returns (address);
    function epoch() external view returns (uint);
    function point_history(uint loc) external view returns (Point memory);
    function user_point_history(uint tokenId, uint loc) external view returns (Point memory);
    function user_point_epoch(uint tokenId) external view returns (uint);

    function ownerOf(uint) external view returns (address);
    function isApprovedOrOwner(address, uint) external view returns (bool);
    function transferFrom(address, address, uint) external;

    function voting(uint tokenId) external;
    function abstain(uint tokenId) external;
    function attach(uint tokenId) external;
    function detach(uint tokenId) external;

    function checkpoint() external;
    function deposit_for(uint tokenId, uint value) external;
    function create_lock_for(uint, uint, address) external returns (uint);

    function balanceOfNFT(uint) external view returns (uint);
    function totalSupply() external view returns (uint);
}

/*

@title Curve Fee Distribution modified for ve(3,3) emissions
@author Curve Finance, andrecronje
@license MIT

*/

contract RewardsDistributor is IRewardsDistributor {

    event CheckpointToken(
        uint time,
        uint tokens
    );

    event Claimed(
        uint tokenId,
        uint amount,
        uint claim_epoch,
        uint max_epoch
    );

    uint constant WEEK = 7 * 86400;

    uint public start_time;
    uint public time_cursor;
    mapping(uint => uint) public time_cursor_of;
    mapping(uint => uint) public user_epoch_of;

    uint public last_token_time;
    uint[1000000000000000] public tokens_per_week;

    address public voting_escrow;
    address public token;
    uint public token_last_balance;

    uint[1000000000000000] public ve_supply;

    address public depositor;

    constructor(address _voting_escrow) {
        uint _t = block.timestamp / WEEK * WEEK;
        start_time = _t;
        last_token_time = _t;
        time_cursor = _t;
        address _token = IVotingEscrow(_voting_escrow).token();
        token = _token;
        voting_escrow = _voting_escrow;
        depositor = msg.sender;
        require(IERC20(_token).approve(_voting_escrow, type(uint).max));
    }

    function timestamp() external view returns (uint) {
        return block.timestamp / WEEK * WEEK;
    }

    function _checkpoint_token() internal {
        uint token_balance = IERC20(token).balanceOf(address(this));
        uint to_distribute = token_balance - token_last_balance;
        token_last_balance = token_balance;

        uint t = last_token_time;
        uint since_last = block.timestamp - t;
        last_token_time = block.timestamp;
        uint this_week = t / WEEK * WEEK;
        uint next_week = 0;

        for (uint i = 0; i < 20; i++) {
            next_week = this_week + WEEK;
            if (block.timestamp < next_week) {
                if (since_last == 0 && block.timestamp == t) {
                    tokens_per_week[this_week] += to_distribute;
                } else {
                    tokens_per_week[this_week] += to_distribute * (block.timestamp - t) / since_last;
                }
                break;
            } else {
                if (since_last == 0 && next_week == t) {
                    tokens_per_week[this_week] += to_distribute;
                } else {
                    tokens_per_week[this_week] += to_distribute * (next_week - t) / since_last;
                }
            }
            t = next_week;
            this_week = next_week;
        }
        emit CheckpointToken(block.timestamp, to_distribute);
    }

    function checkpoint_token() external {
        assert(msg.sender == depositor);
        _checkpoint_token();
    }

    function _find_timestamp_epoch(address ve, uint _timestamp) internal view returns (uint) {
        uint _min = 0;
        uint _max = IVotingEscrow(ve).epoch();
        for (uint i = 0; i < 128; i++) {
            if (_min >= _max) break;
            uint _mid = (_min + _max + 2) / 2;
            IVotingEscrow.Point memory pt = IVotingEscrow(ve).point_history(_mid);
            if (pt.ts <= _timestamp) {
                _min = _mid;
            } else {
                _max = _mid - 1;
            }
        }
        return _min;
    }

    function _find_timestamp_user_epoch(address ve, uint tokenId, uint _timestamp, uint max_user_epoch) internal view returns (uint) {
        uint _min = 0;
        uint _max = max_user_epoch;
        for (uint i = 0; i < 128; i++) {
            if (_min >= _max) break;
            uint _mid = (_min + _max + 2) / 2;
            IVotingEscrow.Point memory pt = IVotingEscrow(ve).user_point_history(tokenId, _mid);
            if (pt.ts <= _timestamp) {
                _min = _mid;
            } else {
                _max = _mid -1;
            }
        }
        return _min;
    }

    function ve_for_at(uint _tokenId, uint _timestamp) external view returns (uint) {
        address ve = voting_escrow;
        uint max_user_epoch = IVotingEscrow(ve).user_point_epoch(_tokenId);
        uint epoch = _find_timestamp_user_epoch(ve, _tokenId, _timestamp, max_user_epoch);
        IVotingEscrow.Point memory pt = IVotingEscrow(ve).user_point_history(_tokenId, epoch);
        return Math.max(uint(int256(pt.bias - pt.slope * (int128(int256(_timestamp - pt.ts))))), 0);
    }

    function _checkpoint_total_supply() internal {
        address ve = voting_escrow;
        uint t = time_cursor;
        uint rounded_timestamp = block.timestamp / WEEK * WEEK;
        IVotingEscrow(ve).checkpoint();

        for (uint i = 0; i < 20; i++) {
            if (t > rounded_timestamp) {
                break;
            } else {
                uint epoch = _find_timestamp_epoch(ve, t);
                IVotingEscrow.Point memory pt = IVotingEscrow(ve).point_history(epoch);
                int128 dt = 0;
                if (t > pt.ts) {
                    dt = int128(int256(t - pt.ts));
                }
                ve_supply[t] = Math.max(uint(int256(pt.bias - pt.slope * dt)), 0);
            }
            t += WEEK;
        }
        time_cursor = t;
    }

    function checkpoint_total_supply() external {
        _checkpoint_total_supply();
    }

    function _claim(uint _tokenId, address ve, uint _last_token_time) internal returns (uint) {
        uint user_epoch = 0;
        uint to_distribute = 0;

        uint max_user_epoch = IVotingEscrow(ve).user_point_epoch(_tokenId);
        uint _start_time = start_time;

        if (max_user_epoch == 0) return 0;

        uint week_cursor = time_cursor_of[_tokenId];
        if (week_cursor == 0) {
            user_epoch = _find_timestamp_user_epoch(ve, _tokenId, _start_time, max_user_epoch);
        } else {
            user_epoch = user_epoch_of[_tokenId];
        }

        if (user_epoch == 0) user_epoch = 1;

        IVotingEscrow.Point memory user_point = IVotingEscrow(ve).user_point_history(_tokenId, user_epoch);

        if (week_cursor == 0) week_cursor = (user_point.ts + WEEK - 1) / WEEK * WEEK;
        if (week_cursor >= last_token_time) return 0;
        if (week_cursor < _start_time) week_cursor = _start_time;

        IVotingEscrow.Point memory old_user_point;

        for (uint i = 0; i < 50; i++) {
            if (week_cursor >= _last_token_time) break;

            if (week_cursor >= user_point.ts && user_epoch <= max_user_epoch) {
                user_epoch += 1;
                old_user_point = user_point;
                if (user_epoch > max_user_epoch) {
                    user_point = IVotingEscrow.Point(0,0,0,0);
                } else {
                    user_point = IVotingEscrow(ve).user_point_history(_tokenId, user_epoch);
                }
            } else {
                int128 dt = int128(int256(week_cursor - old_user_point.ts));
                uint balance_of = Math.max(uint(int256(old_user_point.bias - dt * old_user_point.slope)), 0);
                if (balance_of == 0 && user_epoch > max_user_epoch) break;
                if (balance_of != 0) {
                    to_distribute += balance_of * tokens_per_week[week_cursor] / ve_supply[week_cursor];
                }
                week_cursor += WEEK;
            }
        }

        user_epoch = Math.min(max_user_epoch, user_epoch - 1);
        user_epoch_of[_tokenId] = user_epoch;
        time_cursor_of[_tokenId] = week_cursor;

        emit Claimed(_tokenId, to_distribute, user_epoch, max_user_epoch);

        return to_distribute;
    }

    function _claimable(uint _tokenId, address ve, uint _last_token_time) internal view returns (uint) {
        uint user_epoch = 0;
        uint to_distribute = 0;

        uint max_user_epoch = IVotingEscrow(ve).user_point_epoch(_tokenId);
        uint _start_time = start_time;

        if (max_user_epoch == 0) return 0;

        uint week_cursor = time_cursor_of[_tokenId];
        if (week_cursor == 0) {
            user_epoch = _find_timestamp_user_epoch(ve, _tokenId, _start_time, max_user_epoch);
        } else {
            user_epoch = user_epoch_of[_tokenId];
        }

        if (user_epoch == 0) user_epoch = 1;

        IVotingEscrow.Point memory user_point = IVotingEscrow(ve).user_point_history(_tokenId, user_epoch);

        if (week_cursor == 0) week_cursor = (user_point.ts + WEEK - 1) / WEEK * WEEK;
        if (week_cursor >= last_token_time) return 0;
        if (week_cursor < _start_time) week_cursor = _start_time;

        IVotingEscrow.Point memory old_user_point;

        for (uint i = 0; i < 50; i++) {
            if (week_cursor >= _last_token_time) break;

            if (week_cursor >= user_point.ts && user_epoch <= max_user_epoch) {
                user_epoch += 1;
                old_user_point = user_point;
                if (user_epoch > max_user_epoch) {
                    user_point = IVotingEscrow.Point(0,0,0,0);
                } else {
                    user_point = IVotingEscrow(ve).user_point_history(_tokenId, user_epoch);
                }
            } else {
                int128 dt = int128(int256(week_cursor - old_user_point.ts));
                uint balance_of = Math.max(uint(int256(old_user_point.bias - dt * old_user_point.slope)), 0);
                if (balance_of == 0 && user_epoch > max_user_epoch) break;
                if (balance_of != 0) {
                    to_distribute += balance_of * tokens_per_week[week_cursor] / ve_supply[week_cursor];
                }
                week_cursor += WEEK;
            }
        }

        return to_distribute;
    }

    function claimable(uint _tokenId) external view returns (uint) {
        uint _last_token_time = last_token_time / WEEK * WEEK;
        return _claimable(_tokenId, voting_escrow, _last_token_time);
    }

    function claim(uint _tokenId) external returns (uint) {
        if (block.timestamp >= time_cursor) _checkpoint_total_supply();
        uint _last_token_time = last_token_time;
        _last_token_time = _last_token_time / WEEK * WEEK;
        uint amount = _claim(_tokenId, voting_escrow, _last_token_time);
        if (amount != 0) {
            IVotingEscrow(voting_escrow).deposit_for(_tokenId, amount);
            token_last_balance -= amount;
        }
        return amount;
    }

    function claim_many(uint[] memory _tokenIds) external returns (bool) {
        if (block.timestamp >= time_cursor) _checkpoint_total_supply();
        uint _last_token_time = last_token_time;
        _last_token_time = _last_token_time / WEEK * WEEK;
        address _voting_escrow = voting_escrow;
        uint total = 0;

        for (uint i = 0; i < _tokenIds.length; i++) {
            uint _tokenId = _tokenIds[i];
            if (_tokenId == 0) break;
            uint amount = _claim(_tokenId, _voting_escrow, _last_token_time);
            if (amount != 0) {
                IVotingEscrow(_voting_escrow).deposit_for(_tokenId, amount);
                total += amount;
            }
        }
        if (total != 0) {
            token_last_balance -= total;
        }

        return true;
    }

    // Once off event on contract initialize
    function setDepositor(address _depositor) external {
        require(msg.sender == depositor);
        depositor = _depositor;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_voting_escrow","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"CheckpointToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claim_epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"max_epoch","type":"uint256"}],"name":"Claimed","type":"event"},{"inputs":[],"name":"checkpoint_token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkpoint_total_supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"claim_many","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"last_token_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"setDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"time_cursor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"time_cursor_of","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token_last_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens_per_week","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"user_epoch_of","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"ve_for_at","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ve_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voting_escrow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162001b9f38038062001b9f83398101604081905262000034916200019f565b600062093a80620000468142620001d1565b620000529190620001f4565b90508060008190555080600481905550806001819055506000826001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d091906200019f565b66038d7ea4c6800680546001600160a01b038381166001600160a01b0319928316811790935566038d7ea4c6800580549188169183168217905566071afd498d00088054909216331790915560405163095ea7b360e01b8152600481019190915260001960248201529192509063095ea7b3906044016020604051808303816000875af115801562000166573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018c919062000222565b6200019657600080fd5b50505062000246565b600060208284031215620001b257600080fd5b81516001600160a01b0381168114620001ca57600080fd5b9392505050565b600082620001ef57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156200021d57634e487b7160e01b600052601160045260246000fd5b500290565b6000602082840312156200023557600080fd5b81518015158114620001ca57600080fd5b61194980620002566000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063834ee417116100ad578063d4dafba811610071578063d4dafba81461024a578063dfe050311461025d578063edf5999714610276578063f2c098b714610289578063fc0c546a1461029c57600080fd5b8063834ee417146101ed578063b21ed502146101f6578063b80777ea146101fe578063c7c4ff4614610206578063d1d58b251461023757600080fd5b8063379607f5116100f4578063379607f514610194578063486d25fe146101a757806368809889146101c75780637f58e8f8146101da578063811a40fe146101e357600080fd5b8063127dcbd31461012657806316aea5c0146101425780631f1db0431461016257806322b04bfc14610185575b600080fd5b61012f60015481565b6040519081526020015b60405180910390f35b61012f610150366004611567565b60036020526000908152604090205481565b6101756101703660046115c7565b6102b5565b6040519015158152602001610139565b61012f66038d7ea4c680075481565b61012f6101a2366004611567565b6103fb565b61012f6101b5366004611567565b60026020526000908152604090205481565b61012f6101d536600461166d565b6104e5565b61012f60045481565b6101eb610628565b005b61012f60005481565b6101eb610652565b61012f61065a565b66071afd498d00085461021f906001600160a01b031681565b6040516001600160a01b039091168152602001610139565b61012f610245366004611567565b610679565b61012f610258366004611567565b6106b9565b66038d7ea4c680055461021f906001600160a01b031681565b61012f610284366004611567565b6106dc565b6101eb61029736600461168f565b6106f2565b66038d7ea4c680065461021f906001600160a01b031681565b600060015442106102c8576102c8610737565b60045462093a806102d981836116ce565b6102e391906116f0565b66038d7ea4c68005549091506001600160a01b03166000805b85518110156103cb5760008682815181106103195761031961170f565b602002602001015190508060000361033157506103cb565b600061033e8286886108da565b905080156103b657604051631dd33fc560e31b815260048101839052602481018290526001600160a01b0386169063ee99fe2890604401600060405180830381600087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b5050505080846103b39190611725565b93505b505080806103c39061173d565b9150506102fc565b5080156103f0578066038d7ea4c6800760008282546103ea9190611756565b90915550505b506001949350505050565b6000600154421061040e5761040e610737565b60045462093a8061041f81836116ce565b61042991906116f0565b66038d7ea4c680055490915060009061044d9085906001600160a01b0316846108da565b905080156104de5766038d7ea4c6800554604051631dd33fc560e31b815260048101869052602481018390526001600160a01b039091169063ee99fe2890604401600060405180830381600087803b1580156104a857600080fd5b505af11580156104bc573d6000803e3d6000fd5b505050508066038d7ea4c6800760008282546104d89190611756565b90915550505b9392505050565b66038d7ea4c680055460405163391044d760e21b8152600481018490526000916001600160a01b0316908290829063e441135c90602401602060405180830381865afa158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d919061176d565b9050600061056d83878785610cfe565b6040516309bb79ed60e11b815260048101889052602481018290529091506000906001600160a01b03851690631376f3da90604401608060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e3919061179d565b905061061d8160400151876105f89190611756565b8260200151610607919061180f565b825161061391906118ad565b600f0b6000610df2565b979650505050505050565b66071afd498d0008546001600160a01b03163314610648576106486118fd565b610650610e09565b565b610650610737565b600062093a8061066a81426116ce565b61067491906116f0565b905090565b60008062093a808060045461068e91906116ce565b61069891906116f0565b66038d7ea4c68005549091506104de9084906001600160a01b031683611066565b66038d7ea4c680088166038d7ea4c6800081106106d557600080fd5b0154905081565b60058166038d7ea4c6800081106106d557600080fd5b66071afd498d0008546001600160a01b0316331461070f57600080fd5b66071afd498d000880546001600160a01b0319166001600160a01b0392909216919091179055565b66038d7ea4c68005546001546001600160a01b0390911690600062093a8061075f81426116ce565b61076991906116f0565b9050826001600160a01b031663c2c4c5c16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a657600080fd5b505af11580156107ba573d6000803e3d6000fd5b5050505060005b60148110156108d2578183116108d25760006107dd8585611403565b60405163d1febfb960e01b8152600481018290529091506000906001600160a01b0387169063d1febfb990602401608060405180830381865afa158015610828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084c919061179d565b90506000816040015186111561086e57604082015161086b9087611756565b90505b61088d818360200151610881919061180f565b835161061391906118ad565b66038d7ea4c680088766038d7ea4c6800081106108ac576108ac61170f565b01555050506108be62093a8084611725565b9250806108ca8161173d565b9150506107c1565b505060015550565b60405163391044d760e21b8152600481018490526000908190819081906001600160a01b0387169063e441135c90602401602060405180830381865afa158015610928573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094c919061176d565b600080549192508290036109675760009450505050506104de565b600088815260026020526040812054908190036109915761098a888a8486610cfe565b94506109a3565b60008981526003602052604090205494505b846000036109b057600194505b6040516309bb79ed60e11b8152600481018a9052602481018690526000906001600160a01b038a1690631376f3da90604401608060405180830381865afa1580156109ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a23919061179d565b905081600003610a685762093a8080600162093a808460400151610a479190611725565b610a519190611756565b610a5b91906116ce565b610a6591906116f0565b91505b6004548210610a8057600096505050505050506104de565b82821015610a8c578291505b6040805160808101825260008082526020820181905291810182905260608101829052905b6032811015610c735789841015610c735782604001518410158015610ad65750858811155b15610b9c57610ae6600189611725565b975082915085881115610b255760405180608001604052806000600f0b81526020016000600f0b81526020016000815260200160008152509250610c61565b6040516309bb79ed60e11b8152600481018d9052602481018990526001600160a01b038c1690631376f3da90604401608060405180830381865afa158015610b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b95919061179d565b9250610c61565b6000826040015185610bae9190611756565b90506000610bd1846020015183610bc5919061180f565b855161061391906118ad565b905080158015610be05750878a115b15610bec575050610c73565b8015610c4f5766038d7ea4c680088666038d7ea4c680008110610c1157610c1161170f565b015460058766038d7ea4c680008110610c2c57610c2c61170f565b0154610c3890836116f0565b610c4291906116ce565b610c4c908a611725565b98505b610c5c62093a8087611725565b955050505b80610c6b8161173d565b915050610ab1565b50610c8885610c8360018a611756565b611558565b60008c8152600360209081526040808320849055600282529182902086905581518e8152908101899052908101829052606081018790529097507fcae2990aa9af8eb1c64713b7eddb3a80bf18e49a94a13fe0d0002b5d61d58f009060800160405180910390a150939998505050505050505050565b60008082815b6080811015610de65781831015610de65760006002610d238486611725565b610d2e906002611725565b610d3891906116ce565b6040516309bb79ed60e11b8152600481018a9052602481018290529091506000906001600160a01b038b1690631376f3da90604401608060405180830381865afa158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae919061179d565b905087816040015111610dc357819450610dd1565b610dce600183611756565b93505b50508080610dde9061173d565b915050610d04565b50909695505050505050565b600081831015610e0257816104de565b5090919050565b66038d7ea4c68006546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7c919061176d565b9050600066038d7ea4c680075482610e949190611756565b66038d7ea4c680078390556004549091506000610eb18242611756565b426004559050600062093a80610ec781856116ce565b610ed191906116f0565b90506000805b601481101561102457610eed62093a8084611725565b915081421015610f765783158015610f0457508442145b15610f3e578560058466038d7ea4c680008110610f2357610f2361170f565b016000828254610f339190611725565b909155506110249050565b83610f498642611756565b610f5390886116f0565b610f5d91906116ce565b60058466038d7ea4c680008110610f2357610f2361170f565b83158015610f8357508482145b15610fbd578560058466038d7ea4c680008110610fa257610fa261170f565b016000828254610fb29190611725565b9091555061100b9050565b83610fc88684611756565b610fd290886116f0565b610fdc91906116ce565b60058466038d7ea4c680008110610ff557610ff561170f565b0160008282546110059190611725565b90915550505b819450819250808061101c9061173d565b915050610ed7565b5060408051428152602081018790527fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d6910160405180910390a1505050505050565b60405163391044d760e21b8152600481018490526000908190819081906001600160a01b0387169063e441135c90602401602060405180830381865afa1580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d8919061176d565b600080549192508290036110f35760009450505050506104de565b6000888152600260205260408120549081900361111d57611116888a8486610cfe565b945061112f565b60008981526003602052604090205494505b8460000361113c57600194505b6040516309bb79ed60e11b8152600481018a9052602481018690526000906001600160a01b038a1690631376f3da90604401608060405180830381865afa15801561118b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111af919061179d565b9050816000036111f45762093a8080600162093a8084604001516111d39190611725565b6111dd9190611756565b6111e791906116ce565b6111f191906116f0565b91505b600454821061120c57600096505050505050506104de565b82821015611218578291505b6040805160808101825260008082526020820181905291810182905260608101829052905b60328110156113f357898410156113f357826040015184101580156112625750858811155b1561132857611272600189611725565b9750829150858811156112b15760405180608001604052806000600f0b81526020016000600f0b815260200160008152602001600081525092506113e1565b6040516309bb79ed60e11b8152600481018d9052602481018990526001600160a01b038c1690631376f3da90604401608060405180830381865afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611321919061179d565b92506113e1565b600082604001518561133a9190611756565b90506000611351846020015183610bc5919061180f565b9050801580156113605750878a115b1561136c5750506113f3565b80156113cf5766038d7ea4c680088666038d7ea4c6800081106113915761139161170f565b015460058766038d7ea4c6800081106113ac576113ac61170f565b01546113b890836116f0565b6113c291906116ce565b6113cc908a611725565b98505b6113dc62093a8087611725565b955050505b806113eb8161173d565b91505061123d565b50949a9950505050505050505050565b600080600090506000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561144a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146e919061176d565b905060005b608081101561154e578183101561154e57600060026114928486611725565b61149d906002611725565b6114a791906116ce565b60405163d1febfb960e01b8152600481018290529091506000906001600160a01b0389169063d1febfb990602401608060405180830381865afa1580156114f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611516919061179d565b90508681604001511161152b57819450611539565b611536600183611756565b93505b505080806115469061173d565b915050611473565b5090949350505050565b6000818310610e0257816104de565b60006020828403121561157957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156115bf576115bf611580565b604052919050565b600060208083850312156115da57600080fd5b823567ffffffffffffffff808211156115f257600080fd5b818501915085601f83011261160657600080fd5b81358181111561161857611618611580565b8060051b9150611629848301611596565b818152918301840191848101908884111561164357600080fd5b938501935b8385101561166157843582529385019390850190611648565b98975050505050505050565b6000806040838503121561168057600080fd5b50508035926020909101359150565b6000602082840312156116a157600080fd5b81356001600160a01b03811681146104de57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000826116eb57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561170a5761170a6116b8565b500290565b634e487b7160e01b600052603260045260246000fd5b60008219821115611738576117386116b8565b500190565b60006001820161174f5761174f6116b8565b5060010190565b600082821015611768576117686116b8565b500390565b60006020828403121561177f57600080fd5b5051919050565b8051600f81900b811461179857600080fd5b919050565b6000608082840312156117af57600080fd5b6040516080810181811067ffffffffffffffff821117156117d2576117d2611580565b6040526117de83611786565b81526117ec60208401611786565b602082015260408301516040820152606083015160608201528091505092915050565b600081600f0b83600f0b60016001607f1b0360008213600084138383048511828216161561183f5761183f6116b8565b6f7fffffffffffffffffffffffffffffff19600085128281168783058712161561186b5761186b6116b8565b60008712925085820587128484161615611887576118876116b8565b8585058712818416161561189d5761189d6116b8565b5050509290910295945050505050565b600081600f0b83600f0b600081128160016001607f1b0319018312811516156118d8576118d86116b8565b8160016001607f1b030183138116156118f3576118f36116b8565b5090039392505050565b634e487b7160e01b600052600160045260246000fdfea2646970667358221220b84f2b69aee5b631b0507ee5c73ad70eae74003f33186732dc46cd0a5d9d178264736f6c634300080d00330000000000000000000000009c7305eb78a432ced5c4d14cac27e8ed569a2e26

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

0000000000000000000000009c7305eb78a432ced5c4d14cac27e8ed569a2e26

-----Decoded View---------------
Arg [0] : _voting_escrow (address): 0x9c7305eb78a432ced5c4d14cac27e8ed569a2e26

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000009c7305eb78a432ced5c4d14cac27e8ed569a2e26


Deployed ByteCode Sourcemap

3259:11456:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3592:23;;;;;;;;;160:25:1;;;148:2;133:18;3592:23:0;;;;;;;;3672:42;;;;;;:::i;:::-;;;;;;;;;;;;;;13697:826;;;;;;:::i;:::-;;:::i;:::-;;;1909:14:1;;1902:22;1884:41;;1872:2;1857:18;13697:826:0;1744:187:1;3873:30:0;;;;;;13191:498;;;;;;:::i;:::-;;:::i;3622:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;7136:492;;;;;;:::i;:::-;;:::i;3723:27::-;;;;;;5843:117;;;:::i;:::-;;3563:22;;;;;;8449:89;;;:::i;4417:105::-;;;:::i;3960:24::-;;;;;-1:-1:-1;;;;;3960:24:0;;;;;;-1:-1:-1;;;;;2353:32:1;;;2335:51;;2323:2;2308:18;3960:24:0;2189:203:1;12977:206:0;;;;;;:::i;:::-;;:::i;3912:39::-;;;;;;:::i;:::-;;:::i;3811:28::-;;;;;-1:-1:-1;;;;;3811:28:0;;;3757:45;;;;;;:::i;:::-;;:::i;14577:135::-;;;;;;:::i;:::-;;:::i;3846:20::-;;;;;-1:-1:-1;;;;;3846:20:0;;;13697:826;13760:4;13800:11;;13781:15;:30;13777:62;;13813:26;:24;:26::i;:::-;13874:15;;3545:9;13919:23;3545:9;13874:15;13919:23;:::i;:::-;:30;;;;:::i;:::-;13985:13;;13900:49;;-1:-1:-1;;;;;;13985:13:0;13960:22;;14036:376;14057:9;:16;14053:1;:20;14036:376;;;14095:13;14111:9;14121:1;14111:12;;;;;;;;:::i;:::-;;;;;;;14095:28;;14142:8;14154:1;14142:13;14138:24;;14157:5;;;14138:24;14177:11;14191:50;14198:8;14208:14;14224:16;14191:6;:50::i;:::-;14177:64;-1:-1:-1;14260:11:0;;14256:145;;14292:59;;-1:-1:-1;;;14292:59:0;;;;;3521:25:1;;;3562:18;;;3555:34;;;-1:-1:-1;;;;;14292:41:0;;;;;3494:18:1;;14292:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14379:6;14370:15;;;;;:::i;:::-;;;14256:145;14080:332;;14075:3;;;;;:::i;:::-;;;;14036:376;;;-1:-1:-1;14426:10:0;;14422:70;;14475:5;14453:18;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;14422:70:0;-1:-1:-1;14511:4:0;;13697:826;-1:-1:-1;;;;13697:826:0:o;13191:498::-;13239:4;13279:11;;13260:15;:30;13256:62;;13292:26;:24;:26::i;:::-;13353:15;;3545:9;13398:23;3545:9;13353:15;13398:23;:::i;:::-;:30;;;;:::i;:::-;13470:13;;13379:49;;-1:-1:-1;13439:11:0;;13453:49;;13460:8;;-1:-1:-1;;;;;13470:13:0;13379:49;13453:6;:49::i;:::-;13439:63;-1:-1:-1;13517:11:0;;13513:145;;13559:13;;13545:58;;-1:-1:-1;;;13545:58:0;;;;;3521:25:1;;;3562:18;;;3555:34;;;-1:-1:-1;;;;;13559:13:0;;;;13545:40;;3494:18:1;;13545:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13640:6;13618:18;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;13513:145:0;13675:6;13191:498;-1:-1:-1;;;13191:498:0:o;7136:492::-;7240:13;;7286:44;;-1:-1:-1;;;7286:44:0;;;;;160:25:1;;;7210:4:0;;-1:-1:-1;;;;;7240:13:0;;7210:4;;7240:13;;7286:34;;133:18:1;;7286:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7264:66;;7341:10;7354:68;7381:2;7385:8;7395:10;7407:14;7354:26;:68::i;:::-;7465:53;;-1:-1:-1;;;7465:53:0;;;;;3521:25:1;;;3562:18;;;3555:34;;;7341:81:0;;-1:-1:-1;7433:29:0;;-1:-1:-1;;;;;7465:36:0;;;;;3494:18:1;;7465:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7433:85;;7536:84;7606:2;:5;;;7593:10;:18;;;;:::i;:::-;7567:2;:8;;;:47;;;;:::i;:::-;7557:7;;:57;;;;:::i;:::-;7550:65;;7618:1;7536:8;:84::i;:::-;7529:91;7136:492;-1:-1:-1;;;;;;;7136:492:0:o;5843:117::-;5912:9;;-1:-1:-1;;;;;5912:9:0;5898:10;:23;5891:31;;;;:::i;:::-;5933:19;:17;:19::i;:::-;5843:117::o;8449:89::-;8504:26;:24;:26::i;4417:105::-;4461:4;3545:9;4485:22;3545:9;4485:15;:22;:::i;:::-;:29;;;;:::i;:::-;4478:36;;4417:105;:::o;12977:206::-;13034:4;13051:21;3545:9;;13075:15;;:22;;;;:::i;:::-;:29;;;;:::i;:::-;13143:13;;13051:53;;-1:-1:-1;13122:53:0;;13133:8;;-1:-1:-1;;;;;13143:13:0;13051:53;13122:10;:53::i;3912:39::-;;;;;;;;;;;;;;;-1:-1:-1;3912:39:0;:::o;3757:45::-;;;;;;;;;;;14577:135;14661:9;;-1:-1:-1;;;;;14661:9:0;14647:10;:23;14639:32;;;;;;14682:9;:22;;-1:-1:-1;;;;;;14682:22:0;-1:-1:-1;;;;;14682:22:0;;;;;;;;;;14577:135::o;7636:805::-;7705:13;;;7738:11;-1:-1:-1;;;;;7705:13:0;;;;7692:10;3545:9;7785:22;3545:9;7785:15;:22;:::i;:::-;:29;;;;:::i;:::-;7760:54;;7839:2;-1:-1:-1;;;;;7825:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7873:6;7868:540;7889:2;7885:1;:6;7868:540;;;7921:17;7917:1;:21;7959:5;7913:460;8005:10;8018:28;8040:2;8044:1;8018:21;:28::i;:::-;8097:38;;-1:-1:-1;;;8097:38:0;;;;;160:25:1;;;8005:41:0;;-1:-1:-1;8065:29:0;;-1:-1:-1;;;;;8097:31:0;;;;;133:18:1;;8097:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8065:70;;8154:9;8194:2;:5;;;8190:1;:9;8186:88;;;8247:5;;;;8243:9;;:1;:9;:::i;:::-;8224:30;;8186:88;8307:50;8349:2;8338;:8;;;:13;;;;:::i;:::-;8328:7;;:23;;;;:::i;8307:50::-;8292:9;8302:1;8292:12;;;;;;;:::i;:::-;;:65;-1:-1:-1;;;8387:9:0;3545;8387;;:::i;:::-;;-1:-1:-1;7893:3:0;;;;:::i;:::-;;;;7868:540;;;-1:-1:-1;;8418:11:0;:15;-1:-1:-1;7636:805:0:o;8546:2323::-;8734:44;;-1:-1:-1;;;8734:44:0;;;;;160:25:1;;;8630:4:0;;;;;;;;-1:-1:-1;;;;;8734:34:0;;;;;133:18:1;;8734:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8789:16;8808:10;;8712:66;;-1:-1:-1;8835:19:0;;;8831:33;;8863:1;8856:8;;;;;;;;8831:33;8877:16;8896:24;;;:14;:24;;;;;;;8935:16;;;8931:200;;8981:69;9008:2;9012:8;9022:11;9035:14;8981:26;:69::i;:::-;8968:82;;8931:200;;;9096:23;;;;:13;:23;;;;;;;-1:-1:-1;8931:200:0;9147:10;9161:1;9147:15;9143:35;;9177:1;9164:14;;9143:35;9231:58;;-1:-1:-1;;;9231:58:0;;;;;3521:25:1;;;3562:18;;;3555:34;;;9191:37:0;;-1:-1:-1;;;;;9231:36:0;;;;;3494:18:1;;9231:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9191:98;;9306:11;9321:1;9306:16;9302:76;;3545:9;;9362:1;3545:9;9339:10;:13;;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;9338:33;;;;:::i;:::-;:40;;;;:::i;:::-;9324:54;;9302:76;9408:15;;9393:11;:30;9389:44;;9432:1;9425:8;;;;;;;;;;9389:44;9462:11;9448;:25;9444:56;;;9489:11;9475:25;;9444:56;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9567:1022:0;9588:2;9584:1;:6;9567:1022;;;9631:16;9616:11;:31;9612:42;9649:5;9612:42;9690:10;:13;;;9675:11;:28;;:60;;;;;9721:14;9707:10;:28;;9675:60;9671:907;;;9756:15;9770:1;9756:15;;:::i;:::-;;;9807:10;9790:27;;9853:14;9840:10;:27;9836:237;;;9905:28;;;;;;;;9925:1;9905:28;;;;;;9927:1;9905:28;;;;;;9929:1;9905:28;;;;9931:1;9905:28;;;9892:41;;9671:907;;9836:237;9995:58;;-1:-1:-1;;;9995:58:0;;;;;3521:25:1;;;3562:18;;;3555:34;;;-1:-1:-1;;;;;9995:36:0;;;;;3494:18:1;;9995:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9982:71;;9671:907;;;10113:9;10153:14;:17;;;10139:11;:31;;;;:::i;:::-;10113:59;;10191:15;10209:74;10257:14;:20;;;10252:2;:25;;;;:::i;:::-;10230:19;;:47;;;;:::i;10209:74::-;10191:92;-1:-1:-1;10306:15:0;;:46;;;;;10338:14;10325:10;:27;10306:46;10302:57;;;10354:5;;;;10302:57;10382:15;;10378:147;;10483:9;10493:11;10483:22;;;;;;;:::i;:::-;;;10452:15;10468:11;10452:28;;;;;;;:::i;:::-;;;10439:41;;:10;:41;:::i;:::-;:66;;;;:::i;:::-;10422:83;;;;:::i;:::-;;;10378:147;10543:19;3545:9;10543:19;;:::i;:::-;;;10094:484;;9671:907;9592:3;;;;:::i;:::-;;;;9567:1022;;;-1:-1:-1;10614:40:0;10623:14;10639;10652:1;10639:10;:14;:::i;:::-;10614:8;:40::i;:::-;10665:23;;;;:13;:23;;;;;;;;:36;;;10712:14;:24;;;;;;:38;;;10768:60;;6501:25:1;;;6542:18;;;6535:34;;;6585:18;;;6578:34;;;6643:2;6628:18;;6621:34;;;10665:36:0;;-1:-1:-1;10768:60:0;;6488:3:1;6473:19;10768:60:0;;;;;;;-1:-1:-1;10848:13:0;;8546:2323;-1:-1:-1;;;;;;;;;8546:2323:0:o;6531:597::-;6654:4;;6707:14;6654:4;6732:367;6753:3;6749:1;:7;6732:367;;;6790:4;6782;:12;6778:23;6796:5;6778:23;6816:9;6848:1;6829:11;6836:4;6829;:11;:::i;:::-;:15;;6843:1;6829:15;:::i;:::-;6828:21;;;;:::i;:::-;6896:51;;-1:-1:-1;;;6896:51:0;;;;;3521:25:1;;;3562:18;;;3555:34;;;6816:33:0;;-1:-1:-1;6864:29:0;;-1:-1:-1;;;;;6896:36:0;;;;;3494:18:1;;6896:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6864:83;;6975:10;6966:2;:5;;;:19;6962:126;;7013:4;7006:11;;6962:126;;;7065:7;7071:1;7065:4;:7;:::i;:::-;7058:14;;6962:126;6763:336;;6758:3;;;;;:::i;:::-;;;;6732:367;;;-1:-1:-1;7116:4:0;;6531:597;-1:-1:-1;;;;;;6531:597:0:o;93:98::-;145:4;174:1;169;:6;;:14;;182:1;169:14;;;-1:-1:-1;178:1:0;;162:21;-1:-1:-1;93:98:0:o;4530:1305::-;4607:5;;4600:38;;-1:-1:-1;;;4600:38:0;;4632:4;4600:38;;;2335:51:1;4579:18:0;;-1:-1:-1;;;;;4607:5:0;;4600:23;;2308:18:1;;4600:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4579:59;;4649:18;4686;;4670:13;:34;;;;:::i;:::-;4715:18;:34;;;4771:15;;4649:55;;-1:-1:-1;4762:6:0;4815:19;4771:15;4815;:19;:::i;:::-;4863:15;4845;:33;4797:37;-1:-1:-1;4889:14:0;3545:9;4906:8;3545:9;4906:1;:8;:::i;:::-;:15;;;;:::i;:::-;4889:32;;4932:14;4968:6;4963:802;4984:2;4980:1;:6;4963:802;;;5020:16;3545:9;5020;:16;:::i;:::-;5008:28;;5073:9;5055:15;:27;5051:639;;;5107:15;;:39;;;;;5145:1;5126:15;:20;5107:39;5103:260;;;5201:13;5171:15;5187:9;5171:26;;;;;;;:::i;:::-;;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;5381:5:0;;-1:-1:-1;5381:5:0;5103:260;5333:10;5310:19;5328:1;5310:15;:19;:::i;:::-;5293:37;;:13;:37;:::i;:::-;:50;;;;:::i;:::-;5263:15;5279:9;5263:26;;;;;;;:::i;5051:639::-;5431:15;;:33;;;;;5463:1;5450:9;:14;5431:33;5427:248;;;5519:13;5489:15;5505:9;5489:26;;;;;;;:::i;:::-;;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;5427:248:0;;-1:-1:-1;5427:248:0;;5645:10;5628:13;5640:1;5628:9;:13;:::i;:::-;5611:31;;:13;:31;:::i;:::-;:44;;;;:::i;:::-;5581:15;5597:9;5581:26;;;;;;;:::i;:::-;;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;;5427:248:0;5708:9;5704:13;;5744:9;5732:21;;4988:3;;;;;:::i;:::-;;;;4963:802;;;-1:-1:-1;5780:47:0;;;5796:15;3521:25:1;;3577:2;3562:18;;3555:34;;;5780:47:0;;3494:18:1;5780:47:0;;;;;;;4568:1267;;;;;;4530:1305::o;10877:2092::-;11074:44;;-1:-1:-1;;;11074:44:0;;;;;160:25:1;;;10970:4:0;;;;;;;;-1:-1:-1;;;;;11074:34:0;;;;;133:18:1;;11074:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11129:16;11148:10;;11052:66;;-1:-1:-1;11175:19:0;;;11171:33;;11203:1;11196:8;;;;;;;;11171:33;11217:16;11236:24;;;:14;:24;;;;;;;11275:16;;;11271:200;;11321:69;11348:2;11352:8;11362:11;11375:14;11321:26;:69::i;:::-;11308:82;;11271:200;;;11436:23;;;;:13;:23;;;;;;;-1:-1:-1;11271:200:0;11487:10;11501:1;11487:15;11483:35;;11517:1;11504:14;;11483:35;11571:58;;-1:-1:-1;;;11571:58:0;;;;;3521:25:1;;;3562:18;;;3555:34;;;11531:37:0;;-1:-1:-1;;;;;11571:36:0;;;;;3494:18:1;;11571:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11531:98;;11646:11;11661:1;11646:16;11642:76;;3545:9;;11702:1;3545:9;11679:10;:13;;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;11678:33;;;;:::i;:::-;:40;;;;:::i;:::-;11664:54;;11642:76;11748:15;;11733:11;:30;11729:44;;11772:1;11765:8;;;;;;;;;;11729:44;11802:11;11788;:25;11784:56;;;11829:11;11815:25;;11784:56;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11907:1022:0;11928:2;11924:1;:6;11907:1022;;;11971:16;11956:11;:31;11952:42;11989:5;11952:42;12030:10;:13;;;12015:11;:28;;:60;;;;;12061:14;12047:10;:28;;12015:60;12011:907;;;12096:15;12110:1;12096:15;;:::i;:::-;;;12147:10;12130:27;;12193:14;12180:10;:27;12176:237;;;12245:28;;;;;;;;12265:1;12245:28;;;;;;12267:1;12245:28;;;;;;12269:1;12245:28;;;;12271:1;12245:28;;;12232:41;;12011:907;;12176:237;12335:58;;-1:-1:-1;;;12335:58:0;;;;;3521:25:1;;;3562:18;;;3555:34;;;-1:-1:-1;;;;;12335:36:0;;;;;3494:18:1;;12335:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12322:71;;12011:907;;;12453:9;12493:14;:17;;;12479:11;:31;;;;:::i;:::-;12453:59;;12531:15;12549:74;12597:14;:20;;;12592:2;:25;;;;:::i;12549:74::-;12531:92;-1:-1:-1;12646:15:0;;:46;;;;;12678:14;12665:10;:27;12646:46;12642:57;;;12694:5;;;;12642:57;12722:15;;12718:147;;12823:9;12833:11;12823:22;;;;;;;:::i;:::-;;;12792:15;12808:11;12792:28;;;;;;;:::i;:::-;;;12779:41;;:10;:41;:::i;:::-;:66;;;;:::i;:::-;12762:83;;;;:::i;:::-;;;12718:147;12883:19;3545:9;12883:19;;:::i;:::-;;;12434:484;;12011:907;11932:3;;;;:::i;:::-;;;;11907:1022;;;-1:-1:-1;12948:13:0;;10877:2092;-1:-1:-1;;;;;;;;;;10877:2092:0:o;5968:555::-;6051:4;6068:9;6080:1;6068:13;;6092:9;6118:2;-1:-1:-1;;;;;6104:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6092:37;;6145:6;6140:354;6161:3;6157:1;:7;6140:354;;;6198:4;6190;:12;6186:23;6204:5;6186:23;6224:9;6256:1;6237:11;6244:4;6237;:11;:::i;:::-;:15;;6251:1;6237:15;:::i;:::-;6236:21;;;;:::i;:::-;6304:37;;-1:-1:-1;;;6304:37:0;;;;;160:25:1;;;6224:33:0;;-1:-1:-1;6272:29:0;;-1:-1:-1;;;;;6304:31:0;;;;;133:18:1;;6304:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6272:69;;6369:10;6360:2;:5;;;:19;6356:127;;6407:4;6400:11;;6356:127;;;6459:8;6466:1;6459:4;:8;:::i;:::-;6452:15;;6356:127;6171:323;;6166:3;;;;;:::i;:::-;;;;6140:354;;;-1:-1:-1;6511:4:0;;5968:555;-1:-1:-1;;;;5968:555:0:o;197:97::-;249:4;277:1;273;:5;:13;;285:1;273:13;;196:180:1;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:127::-;442:10;437:3;433:20;430:1;423:31;473:4;470:1;463:15;497:4;494:1;487:15;513:275;584:2;578:9;649:2;630:13;;-1:-1:-1;;626:27:1;614:40;;684:18;669:34;;705:22;;;666:62;663:88;;;731:18;;:::i;:::-;767:2;760:22;513:275;;-1:-1:-1;513:275:1:o;793:946::-;877:6;908:2;951;939:9;930:7;926:23;922:32;919:52;;;967:1;964;957:12;919:52;1007:9;994:23;1036:18;1077:2;1069:6;1066:14;1063:34;;;1093:1;1090;1083:12;1063:34;1131:6;1120:9;1116:22;1106:32;;1176:7;1169:4;1165:2;1161:13;1157:27;1147:55;;1198:1;1195;1188:12;1147:55;1234:2;1221:16;1256:2;1252;1249:10;1246:36;;;1262:18;;:::i;:::-;1308:2;1305:1;1301:10;1291:20;;1331:28;1355:2;1351;1347:11;1331:28;:::i;:::-;1393:15;;;1463:11;;;1459:20;;;1424:12;;;;1491:19;;;1488:39;;;1523:1;1520;1513:12;1488:39;1547:11;;;;1567:142;1583:6;1578:3;1575:15;1567:142;;;1649:17;;1637:30;;1600:12;;;;1687;;;;1567:142;;;1728:5;793:946;-1:-1:-1;;;;;;;;793:946:1:o;1936:248::-;2004:6;2012;2065:2;2053:9;2044:7;2040:23;2036:32;2033:52;;;2081:1;2078;2071:12;2033:52;-1:-1:-1;;2104:23:1;;;2174:2;2159:18;;;2146:32;;-1:-1:-1;1936:248:1:o;2397:286::-;2456:6;2509:2;2497:9;2488:7;2484:23;2480:32;2477:52;;;2525:1;2522;2515:12;2477:52;2551:23;;-1:-1:-1;;;;;2603:31:1;;2593:42;;2583:70;;2649:1;2646;2639:12;2688:127;2749:10;2744:3;2740:20;2737:1;2730:31;2780:4;2777:1;2770:15;2804:4;2801:1;2794:15;2820:217;2860:1;2886;2876:132;;2930:10;2925:3;2921:20;2918:1;2911:31;2965:4;2962:1;2955:15;2993:4;2990:1;2983:15;2876:132;-1:-1:-1;3022:9:1;;2820:217::o;3042:168::-;3082:7;3148:1;3144;3140:6;3136:14;3133:1;3130:21;3125:1;3118:9;3111:17;3107:45;3104:71;;;3155:18;;:::i;:::-;-1:-1:-1;3195:9:1;;3042:168::o;3215:127::-;3276:10;3271:3;3267:20;3264:1;3257:31;3307:4;3304:1;3297:15;3331:4;3328:1;3321:15;3600:128;3640:3;3671:1;3667:6;3664:1;3661:13;3658:39;;;3677:18;;:::i;:::-;-1:-1:-1;3713:9:1;;3600:128::o;3733:135::-;3772:3;3793:17;;;3790:43;;3813:18;;:::i;:::-;-1:-1:-1;3860:1:1;3849:13;;3733:135::o;3873:125::-;3913:4;3941:1;3938;3935:8;3932:34;;;3946:18;;:::i;:::-;-1:-1:-1;3983:9:1;;3873:125::o;4003:184::-;4073:6;4126:2;4114:9;4105:7;4101:23;4097:32;4094:52;;;4142:1;4139;4132:12;4094:52;-1:-1:-1;4165:16:1;;4003:184;-1:-1:-1;4003:184:1:o;4192:166::-;4270:13;;4323:2;4312:21;;;4302:32;;4292:60;;4348:1;4345;4338:12;4292:60;4192:166;;;:::o;4363:664::-;4455:6;4508:3;4496:9;4487:7;4483:23;4479:33;4476:53;;;4525:1;4522;4515:12;4476:53;4558:2;4552:9;4600:3;4592:6;4588:16;4670:6;4658:10;4655:22;4634:18;4622:10;4619:34;4616:62;4613:88;;;4681:18;;:::i;:::-;4717:2;4710:22;4756:39;4785:9;4756:39;:::i;:::-;4748:6;4741:55;4829:48;4873:2;4862:9;4858:18;4829:48;:::i;:::-;4824:2;4816:6;4812:15;4805:73;4932:2;4921:9;4917:18;4911:25;4906:2;4898:6;4894:15;4887:50;4991:2;4980:9;4976:18;4970:25;4965:2;4957:6;4953:15;4946:50;5015:6;5005:16;;;4363:664;;;;:::o;5032:698::-;5071:7;5119:1;5115:2;5104:17;5156:1;5152:2;5141:17;-1:-1:-1;;;;;5239:1:1;5234:3;5230:11;5269:1;5264:3;5260:11;5316:3;5312:2;5308:12;5303:3;5300:21;5295:2;5291;5287:11;5283:39;5280:65;;;5325:18;;:::i;:::-;-1:-1:-1;;5431:1:1;5422:11;;5449;;;5471:13;;;5462:23;;5445:41;5442:67;;;5489:18;;:::i;:::-;5537:1;5532:3;5528:11;5518:21;;5586:3;5582:2;5577:13;5572:3;5568:23;5563:2;5559;5555:11;5551:41;5548:67;;;5595:18;;:::i;:::-;5662:3;5658:2;5653:13;5648:3;5644:23;5639:2;5635;5631:11;5627:41;5624:67;;;5671:18;;:::i;:::-;-1:-1:-1;;;5711:13:1;;;;;5032:698;-1:-1:-1;;;;;5032:698:1:o;5735:398::-;5774:4;5819:1;5815:2;5804:17;5856:1;5852:2;5841:17;5886:1;5881:3;5877:11;5970:3;-1:-1:-1;;;;;5929:39:1;5925:49;5920:3;5916:59;5911:2;5904:10;5900:76;5897:102;;;5979:18;;:::i;:::-;6068:3;-1:-1:-1;;;;;6028:44:1;6023:3;6019:54;6015:2;6011:63;6008:89;;;6077:18;;:::i;:::-;-1:-1:-1;6114:13:1;;;5735:398;-1:-1:-1;;;5735:398:1:o;6138:127::-;6199:10;6194:3;6190:20;6187:1;6180:31;6230:4;6227:1;6220:15;6254:4;6251:1;6244:15

Swarm Source

ipfs://b84f2b69aee5b631b0507ee5c73ad70eae74003f33186732dc46cd0a5d9d1782
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.