ETH Price: $2,275.44 (+0.12%)

Token

iceCREAM (iceCREAM)
 

Overview

Max Total Supply

85,310.491217176021733405 iceCREAM

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.2.4

Optimization Enabled:
N/A

Other Settings:
MIT license

Contract Source Code (Vyper language format)

# @version 0.2.4
"""
@title Voting Escrow
@author Curve Finance
@license MIT
@notice Votes have a weight depending on time, so that users are
        committed to the future of (whatever they are voting for)
@dev Vote weight decays linearly over time. Lock time cannot be
     more than `MAXTIME` (4 years).
"""

# Voting escrow to have time-weighted votes
# Votes have a weight depending on time, so that users are committed
# to the future of (whatever they are voting for).
# The weight in this implementation is linear, and lock cannot be more than maxtime:
# w ^
# 1 +        /
#   |      /
#   |    /
#   |  /
#   |/
# 0 +--------+------> time
#       maxtime (4 years?)

struct Point:
    bias: int128
    slope: int128  # - dweight / dt
    ts: uint256
    blk: uint256  # block
# We cannot really do block numbers per se b/c slope is per time, not per block
# and per block could be fairly bad b/c Ethereum changes blocktimes.
# What we can do is to extrapolate ***At functions

struct LockedBalance:
    amount: int128
    end: uint256


interface ERC20:
    def decimals() -> uint256: view
    def name() -> String[64]: view
    def symbol() -> String[32]: view
    def transfer(to: address, amount: uint256) -> bool: nonpayable
    def transferFrom(spender: address, to: address, amount: uint256) -> bool: nonpayable


# Interface for checking whether address belongs to a whitelisted
# type of a smart wallet.
# When new types are added - the whole contract is changed
# The check() method is modifying to be able to use caching
# for individual wallet addresses
interface SmartWalletChecker:
    def check(addr: address) -> bool: nonpayable

DEPOSIT_FOR_TYPE: constant(int128) = 0
CREATE_LOCK_TYPE: constant(int128) = 1
INCREASE_LOCK_AMOUNT: constant(int128) = 2
INCREASE_UNLOCK_TIME: constant(int128) = 3

event SetBreaker:
    _break: bool

event CommitOwnership:
    admin: address

event ApplyOwnership:
    admin: address

event Deposit:
    provider: indexed(address)
    value: uint256
    locktime: indexed(uint256)
    type: int128
    ts: uint256

event Withdraw:
    provider: indexed(address)
    value: uint256
    ts: uint256

event Supply:
    prevSupply: uint256
    supply: uint256


WEEK: constant(uint256) = 7 * 86400  # all future times are rounded by week
MAXTIME: constant(uint256) = 4 * 365 * 86400  # 4 years
MULTIPLIER: constant(uint256) = 10 ** 18

token: public(address)
supply: public(uint256)
breaker: public(bool) # breaker, to protect withdraws if anything ever goes wrong


locked: public(HashMap[address, LockedBalance])

epoch: public(uint256)
point_history: public(Point[100000000000000000000000000000])  # epoch -> unsigned point
user_point_history: public(HashMap[address, Point[1000000000]])  # user -> Point[user_epoch]
user_point_epoch: public(HashMap[address, uint256])
slope_changes: public(HashMap[uint256, int128])  # time -> signed slope change

# Aragon's view methods for compatibility
controller: public(address)
transfersEnabled: public(bool)

name: public(String[64])
symbol: public(String[32])
version: public(String[32])
decimals: public(uint256)

# Checker for whitelisted (smart contract) wallets which are allowed to deposit
# The goal is to prevent tokenizing the escrow
future_smart_wallet_checker: public(address)
smart_wallet_checker: public(address)

admin: public(address)  # Can and will be a smart contract
future_admin: public(address)


@external
def __init__(token_addr: address, _name: String[64], _symbol: String[32], _version: String[32]):
    """
    @notice Contract constructor
    @param token_addr `ERC20CRV` token address
    @param _name Token name
    @param _symbol Token symbol
    @param _version Contract version - required for Aragon compatibility
    """
    self.admin = msg.sender
    self.token = token_addr
    self.point_history[0].blk = block.number
    self.point_history[0].ts = block.timestamp
    self.controller = msg.sender
    self.transfersEnabled = True

    _decimals: uint256 = ERC20(token_addr).decimals()
    assert _decimals <= 255
    self.decimals = _decimals

    self.name = _name
    self.symbol = _symbol
    self.version = _version


@external
def set_breaker(_break: bool):
    """
    @notice set _break = True so that users can withdraw, ignoring lock end time
    @param _break Boolean the break state
    """
    assert msg.sender == self.admin  # dev: admin only
    self.breaker = _break
    log SetBreaker(_break)

@external
def commit_transfer_ownership(addr: address):
    """
    @notice Transfer ownership of VotingEscrow contract to `addr`
    @param addr Address to have ownership transferred to
    """
    assert msg.sender == self.admin  # dev: admin only
    self.future_admin = addr
    log CommitOwnership(addr)


@external
def apply_transfer_ownership():
    """
    @notice Apply ownership transfer
    """
    assert msg.sender == self.admin  # dev: admin only
    _admin: address = self.future_admin
    assert _admin != ZERO_ADDRESS  # dev: admin not set
    self.admin = _admin
    log ApplyOwnership(_admin)


@external
def commit_smart_wallet_checker(addr: address):
    """
    @notice Set an external contract to check for approved smart contract wallets
    @param addr Address of Smart contract checker
    """
    assert msg.sender == self.admin
    self.future_smart_wallet_checker = addr


@external
def apply_smart_wallet_checker():
    """
    @notice Apply setting external contract to check approved smart contract wallets
    """
    assert msg.sender == self.admin
    self.smart_wallet_checker = self.future_smart_wallet_checker


@internal
def assert_not_contract(addr: address):
    """
    @notice Check if the call is from a whitelisted smart contract, revert if not
    @param addr Address to be checked
    """
    if addr != tx.origin:
        checker: address = self.smart_wallet_checker
        if checker != ZERO_ADDRESS:
            if SmartWalletChecker(checker).check(addr):
                return
        raise "Smart contract depositors not allowed"


@external
@view
def get_last_user_slope(addr: address) -> int128:
    """
    @notice Get the most recently recorded rate of voting power decrease for `addr`
    @param addr Address of the user wallet
    @return Value of the slope
    """
    uepoch: uint256 = self.user_point_epoch[addr]
    return self.user_point_history[addr][uepoch].slope


@external
@view
def user_point_history__ts(_addr: address, _idx: uint256) -> uint256:
    """
    @notice Get the timestamp for checkpoint `_idx` for `_addr`
    @param _addr User wallet address
    @param _idx User epoch number
    @return Epoch time of the checkpoint
    """
    return self.user_point_history[_addr][_idx].ts


@external
@view
def locked__end(_addr: address) -> uint256:
    """
    @notice Get timestamp when `_addr`'s lock finishes
    @param _addr User wallet
    @return Epoch time of the lock end
    """
    return self.locked[_addr].end


@internal
def _checkpoint(addr: address, old_locked: LockedBalance, new_locked: LockedBalance):
    """
    @notice Record global and per-user data to checkpoint
    @param addr User's wallet address. No user checkpoint if 0x0
    @param old_locked Pevious locked amount / end lock time for the user
    @param new_locked New locked amount / end lock time for the user
    """
    u_old: Point = empty(Point)
    u_new: Point = empty(Point)
    old_dslope: int128 = 0
    new_dslope: int128 = 0
    _epoch: uint256 = self.epoch

    if addr != ZERO_ADDRESS:
        # Calculate slopes and biases
        # Kept at zero when they have to
        if old_locked.end > block.timestamp and old_locked.amount > 0:
            u_old.slope = old_locked.amount / MAXTIME
            u_old.bias = u_old.slope * convert(old_locked.end - block.timestamp, int128)
        if new_locked.end > block.timestamp and new_locked.amount > 0:
            u_new.slope = new_locked.amount / MAXTIME
            u_new.bias = u_new.slope * convert(new_locked.end - block.timestamp, int128)

        # Read values of scheduled changes in the slope
        # old_locked.end can be in the past and in the future
        # new_locked.end can ONLY by in the FUTURE unless everything expired: than zeros
        old_dslope = self.slope_changes[old_locked.end]
        if new_locked.end != 0:
            if new_locked.end == old_locked.end:
                new_dslope = old_dslope
            else:
                new_dslope = self.slope_changes[new_locked.end]

    last_point: Point = Point({bias: 0, slope: 0, ts: block.timestamp, blk: block.number})
    if _epoch > 0:
        last_point = self.point_history[_epoch]
    last_checkpoint: uint256 = last_point.ts
    # initial_last_point is used for extrapolation to calculate block number
    # (approximately, for *At methods) and save them
    # as we cannot figure that out exactly from inside the contract
    initial_last_point: Point = last_point
    block_slope: uint256 = 0  # dblock/dt
    if block.timestamp > last_point.ts:
        block_slope = MULTIPLIER * (block.number - last_point.blk) / (block.timestamp - last_point.ts)
    # If last point is already recorded in this block, slope=0
    # But that's ok b/c we know the block in such case

    # Go over weeks to fill history and calculate what the current point is
    t_i: uint256 = (last_checkpoint / WEEK) * WEEK
    for i in range(255):
        # Hopefully it won't happen that this won't get used in 5 years!
        # If it does, users will be able to withdraw but vote weight will be broken
        t_i += WEEK
        d_slope: int128 = 0
        if t_i > block.timestamp:
            t_i = block.timestamp
        else:
            d_slope = self.slope_changes[t_i]
        last_point.bias -= last_point.slope * convert(t_i - last_checkpoint, int128)
        last_point.slope += d_slope
        if last_point.bias < 0:  # This can happen
            last_point.bias = 0
        if last_point.slope < 0:  # This cannot happen - just in case
            last_point.slope = 0
        last_checkpoint = t_i
        last_point.ts = t_i
        last_point.blk = initial_last_point.blk + block_slope * (t_i - initial_last_point.ts) / MULTIPLIER
        _epoch += 1
        if t_i == block.timestamp:
            last_point.blk = block.number
            break
        else:
            self.point_history[_epoch] = last_point

    self.epoch = _epoch
    # Now point_history is filled until t=now

    if addr != ZERO_ADDRESS:
        # If last point was in this block, the slope change has been applied already
        # But in such case we have 0 slope(s)
        last_point.slope += (u_new.slope - u_old.slope)
        last_point.bias += (u_new.bias - u_old.bias)
        if last_point.slope < 0:
            last_point.slope = 0
        if last_point.bias < 0:
            last_point.bias = 0

    # Record the changed point into history
    self.point_history[_epoch] = last_point

    if addr != ZERO_ADDRESS:
        # Schedule the slope changes (slope is going down)
        # We subtract new_user_slope from [new_locked.end]
        # and add old_user_slope to [old_locked.end]
        if old_locked.end > block.timestamp:
            # old_dslope was <something> - u_old.slope, so we cancel that
            old_dslope += u_old.slope
            if new_locked.end == old_locked.end:
                old_dslope -= u_new.slope  # It was a new deposit, not extension
            self.slope_changes[old_locked.end] = old_dslope

        if new_locked.end > block.timestamp:
            if new_locked.end > old_locked.end:
                new_dslope -= u_new.slope  # old slope disappeared at this point
                self.slope_changes[new_locked.end] = new_dslope
            # else: we recorded it already in old_dslope

        # Now handle user history
        user_epoch: uint256 = self.user_point_epoch[addr] + 1

        self.user_point_epoch[addr] = user_epoch
        u_new.ts = block.timestamp
        u_new.blk = block.number
        self.user_point_history[addr][user_epoch] = u_new


@internal
def _deposit_for(_addr: address, _value: uint256, unlock_time: uint256, locked_balance: LockedBalance, type: int128):
    """
    @notice Deposit and lock tokens for a user
    @param _addr User's wallet address
    @param _value Amount to deposit
    @param unlock_time New time when to unlock the tokens, or 0 if unchanged
    @param locked_balance Previous locked amount / timestamp
    """
    _locked: LockedBalance = locked_balance
    supply_before: uint256 = self.supply

    self.supply = supply_before + _value
    old_locked: LockedBalance = _locked
    # Adding to existing lock, or if a lock is expired - creating a new one
    _locked.amount += convert(_value, int128)
    if unlock_time != 0:
        _locked.end = unlock_time
    self.locked[_addr] = _locked

    # Possibilities:
    # Both old_locked.end could be current or expired (>/< block.timestamp)
    # value == 0 (extend lock) or value > 0 (add to lock or extend lock)
    # _locked.end > block.timestamp (always)
    self._checkpoint(_addr, old_locked, _locked)

    if _value != 0:
        assert ERC20(self.token).transferFrom(_addr, self, _value)

    log Deposit(_addr, _value, _locked.end, type, block.timestamp)
    log Supply(supply_before, supply_before + _value)


@external
def checkpoint():
    """
    @notice Record global data to checkpoint
    """
    self._checkpoint(ZERO_ADDRESS, empty(LockedBalance), empty(LockedBalance))


@external
@nonreentrant('lock')
def deposit_for(_addr: address, _value: uint256):
    """
    @notice Deposit `_value` tokens for `_addr` and add to the lock
    @dev Anyone (even a smart contract) can deposit for someone else, but
         cannot extend their locktime and deposit for a brand new user
    @param _addr User's wallet address
    @param _value Amount to add to user's lock
    """
    _locked: LockedBalance = self.locked[_addr]

    assert _value > 0  # dev: need non-zero value
    assert _locked.amount > 0, "No existing lock found"
    assert _locked.end > block.timestamp, "Cannot add to expired lock. Withdraw"

    self._deposit_for(_addr, _value, 0, self.locked[_addr], DEPOSIT_FOR_TYPE)


@external
@nonreentrant('lock')
def create_lock(_value: uint256, _unlock_time: uint256):
    """
    @notice Deposit `_value` tokens for `msg.sender` and lock until `_unlock_time`
    @param _value Amount to deposit
    @param _unlock_time Epoch time when tokens unlock, rounded down to whole weeks
    """
    self.assert_not_contract(msg.sender)
    unlock_time: uint256 = (_unlock_time / WEEK) * WEEK  # Locktime is rounded down to weeks
    _locked: LockedBalance = self.locked[msg.sender]

    assert _value > 0  # dev: need non-zero value
    assert _locked.amount == 0, "Withdraw old tokens first"
    assert unlock_time > block.timestamp, "Can only lock until time in the future"
    assert unlock_time <= block.timestamp + MAXTIME, "Voting lock can be 4 years max"

    self._deposit_for(msg.sender, _value, unlock_time, _locked, CREATE_LOCK_TYPE)


@external
@nonreentrant('lock')
def increase_amount(_value: uint256):
    """
    @notice Deposit `_value` additional tokens for `msg.sender`
            without modifying the unlock time
    @param _value Amount of tokens to deposit and add to the lock
    """
    self.assert_not_contract(msg.sender)
    _locked: LockedBalance = self.locked[msg.sender]

    assert _value > 0  # dev: need non-zero value
    assert _locked.amount > 0, "No existing lock found"
    assert _locked.end > block.timestamp, "Cannot add to expired lock. Withdraw"

    self._deposit_for(msg.sender, _value, 0, _locked, INCREASE_LOCK_AMOUNT)


@external
@nonreentrant('lock')
def increase_unlock_time(_unlock_time: uint256):
    """
    @notice Extend the unlock time for `msg.sender` to `_unlock_time`
    @param _unlock_time New epoch time for unlocking
    """
    self.assert_not_contract(msg.sender)
    _locked: LockedBalance = self.locked[msg.sender]
    unlock_time: uint256 = (_unlock_time / WEEK) * WEEK  # Locktime is rounded down to weeks

    assert _locked.end > block.timestamp, "Lock expired"
    assert _locked.amount > 0, "Nothing is locked"
    assert unlock_time > _locked.end, "Can only increase lock duration"
    assert unlock_time <= block.timestamp + MAXTIME, "Voting lock can be 4 years max"

    self._deposit_for(msg.sender, 0, unlock_time, _locked, INCREASE_UNLOCK_TIME)


@external
@nonreentrant('lock')
def withdraw():
    """
    @notice Withdraw all tokens for `msg.sender`
    @dev Only possible if the lock has expired
    """
    _locked: LockedBalance = self.locked[msg.sender]
    if not self.breaker:
        assert block.timestamp >= _locked.end, "The lock didn't expire"
    value: uint256 = convert(_locked.amount, uint256)

    old_locked: LockedBalance = _locked
    _locked.end = 0
    _locked.amount = 0
    self.locked[msg.sender] = _locked
    supply_before: uint256 = self.supply
    self.supply = supply_before - value

    # old_locked can have either expired <= timestamp or zero end
    # _locked has only 0 end
    # Both can have >= 0 amount
    self._checkpoint(msg.sender, old_locked, _locked)

    assert ERC20(self.token).transfer(msg.sender, value)

    log Withdraw(msg.sender, value, block.timestamp)
    log Supply(supply_before, supply_before - value)


# The following ERC20/minime-compatible methods are not real balanceOf and supply!
# They measure the weights for the purpose of voting, so they don't represent
# real coins.

@internal
@view
def find_block_epoch(_block: uint256, max_epoch: uint256) -> uint256:
    """
    @notice Binary search to estimate timestamp for block number
    @param _block Block to find
    @param max_epoch Don't go beyond this epoch
    @return Approximate timestamp for block
    """
    # Binary search
    _min: uint256 = 0
    _max: uint256 = max_epoch
    for i in range(128):  # Will be always enough for 128-bit numbers
        if _min >= _max:
            break
        _mid: uint256 = (_min + _max + 1) / 2
        if self.point_history[_mid].blk <= _block:
            _min = _mid
        else:
            _max = _mid - 1
    return _min


@external
@view
def balanceOf(addr: address, _t: uint256 = block.timestamp) -> uint256:
    """
    @notice Get the current voting power for `msg.sender`
    @dev Adheres to the ERC20 `balanceOf` interface for Aragon compatibility
    @param addr User wallet address
    @param _t Epoch time to return voting power at
    @return User voting power
    """
    _epoch: uint256 = self.user_point_epoch[addr]
    if _epoch == 0:
        return 0
    else:
        last_point: Point = self.user_point_history[addr][_epoch]
        last_point.bias -= last_point.slope * convert(_t - last_point.ts, int128)
        if last_point.bias < 0:
            last_point.bias = 0
        return convert(last_point.bias, uint256)


@external
@view
def balanceOfAt(addr: address, _block: uint256) -> uint256:
    """
    @notice Measure voting power of `addr` at block height `_block`
    @dev Adheres to MiniMe `balanceOfAt` interface: https://github.com/Giveth/minime
    @param addr User's wallet address
    @param _block Block to calculate the voting power at
    @return Voting power
    """
    # Copying and pasting totalSupply code because Vyper cannot pass by
    # reference yet
    assert _block <= block.number

    # Binary search
    _min: uint256 = 0
    _max: uint256 = self.user_point_epoch[addr]
    for i in range(128):  # Will be always enough for 128-bit numbers
        if _min >= _max:
            break
        _mid: uint256 = (_min + _max + 1) / 2
        if self.user_point_history[addr][_mid].blk <= _block:
            _min = _mid
        else:
            _max = _mid - 1

    upoint: Point = self.user_point_history[addr][_min]

    max_epoch: uint256 = self.epoch
    _epoch: uint256 = self.find_block_epoch(_block, max_epoch)
    point_0: Point = self.point_history[_epoch]
    d_block: uint256 = 0
    d_t: uint256 = 0
    if _epoch < max_epoch:
        point_1: Point = self.point_history[_epoch + 1]
        d_block = point_1.blk - point_0.blk
        d_t = point_1.ts - point_0.ts
    else:
        d_block = block.number - point_0.blk
        d_t = block.timestamp - point_0.ts
    block_time: uint256 = point_0.ts
    if d_block != 0:
        block_time += d_t * (_block - point_0.blk) / d_block

    upoint.bias -= upoint.slope * convert(block_time - upoint.ts, int128)
    if upoint.bias >= 0:
        return convert(upoint.bias, uint256)
    else:
        return 0


@internal
@view
def supply_at(point: Point, t: uint256) -> uint256:
    """
    @notice Calculate total voting power at some point in the past
    @param point The point (bias/slope) to start search from
    @param t Time to calculate the total voting power at
    @return Total voting power at that time
    """
    last_point: Point = point
    t_i: uint256 = (last_point.ts / WEEK) * WEEK
    for i in range(255):
        t_i += WEEK
        d_slope: int128 = 0
        if t_i > t:
            t_i = t
        else:
            d_slope = self.slope_changes[t_i]
        last_point.bias -= last_point.slope * convert(t_i - last_point.ts, int128)
        if t_i == t:
            break
        last_point.slope += d_slope
        last_point.ts = t_i

    if last_point.bias < 0:
        last_point.bias = 0
    return convert(last_point.bias, uint256)


@external
@view
def totalSupply(t: uint256 = block.timestamp) -> uint256:
    """
    @notice Calculate total voting power
    @dev Adheres to the ERC20 `totalSupply` interface for Aragon compatibility
    @return Total voting power
    """
    _epoch: uint256 = self.epoch
    last_point: Point = self.point_history[_epoch]
    return self.supply_at(last_point, t)


@external
@view
def totalSupplyAt(_block: uint256) -> uint256:
    """
    @notice Calculate total voting power at some point in the past
    @param _block Block to calculate the total voting power at
    @return Total voting power at `_block`
    """
    assert _block <= block.number
    _epoch: uint256 = self.epoch
    target_epoch: uint256 = self.find_block_epoch(_block, _epoch)

    point: Point = self.point_history[target_epoch]
    dt: uint256 = 0
    if target_epoch < _epoch:
        point_next: Point = self.point_history[target_epoch + 1]
        if point.blk != point_next.blk:
            dt = (_block - point.blk) * (point_next.ts - point.ts) / (point_next.blk - point.blk)
    else:
        if point.blk != block.number:
            dt = (_block - point.blk) * (block.timestamp - point.ts) / (block.number - point.blk)
    # Now dt contains info on how far are we beyond point

    return self.supply_at(point, point.ts + dt)


# Dummy methods for compatibility with Aragon

@external
def changeController(_newController: address):
    """
    @dev Dummy method required for Aragon compatibility
    """
    assert msg.sender == self.controller
    self.controller = _newController

Contract Security Audit

Contract ABI

[{"name":"SetBreaker","inputs":[{"type":"bool","name":"_break","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitOwnership","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyOwnership","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"name":"Deposit","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"value","indexed":false},{"type":"uint256","name":"locktime","indexed":true},{"type":"int128","name":"type","indexed":false},{"type":"uint256","name":"ts","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdraw","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"value","indexed":false},{"type":"uint256","name":"ts","indexed":false}],"anonymous":false,"type":"event"},{"name":"Supply","inputs":[{"type":"uint256","name":"prevSupply","indexed":false},{"type":"uint256","name":"supply","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address","name":"token_addr"},{"type":"string","name":"_name"},{"type":"string","name":"_symbol"},{"type":"string","name":"_version"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"set_breaker","outputs":[],"inputs":[{"type":"bool","name":"_break"}],"stateMutability":"nonpayable","type":"function","gas":37594},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":37627},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":38527},{"name":"commit_smart_wallet_checker","outputs":[],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":36337},{"name":"apply_smart_wallet_checker","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":37125},{"name":"get_last_user_slope","outputs":[{"type":"int128","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"view","type":"function","gas":2599},{"name":"user_point_history__ts","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"_addr"},{"type":"uint256","name":"_idx"}],"stateMutability":"view","type":"function","gas":1702},{"name":"locked__end","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"_addr"}],"stateMutability":"view","type":"function","gas":1623},{"name":"checkpoint","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":37052402},{"name":"deposit_for","outputs":[],"inputs":[{"type":"address","name":"_addr"},{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":74280011},{"name":"create_lock","outputs":[],"inputs":[{"type":"uint256","name":"_value"},{"type":"uint256","name":"_unlock_time"}],"stateMutability":"nonpayable","type":"function","gas":74281615},{"name":"increase_amount","outputs":[],"inputs":[{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":74280980},{"name":"increase_unlock_time","outputs":[],"inputs":[{"type":"uint256","name":"_unlock_time"}],"stateMutability":"nonpayable","type":"function","gas":74281728},{"name":"withdraw","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":37224481},{"name":"balanceOf","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"view","type":"function"},{"name":"balanceOf","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"},{"type":"uint256","name":"_t"}],"stateMutability":"view","type":"function"},{"name":"balanceOfAt","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"},{"type":"uint256","name":"_block"}],"stateMutability":"view","type":"function","gas":514393},{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function"},{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"t"}],"stateMutability":"view","type":"function"},{"name":"totalSupplyAt","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_block"}],"stateMutability":"view","type":"function","gas":812650},{"name":"changeController","outputs":[],"inputs":[{"type":"address","name":"_newController"}],"stateMutability":"nonpayable","type":"function","gas":36937},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1871},{"name":"supply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1901},{"name":"breaker","outputs":[{"type":"bool","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1931},{"name":"locked","outputs":[{"type":"int128","name":"amount"},{"type":"uint256","name":"end"}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":3419},{"name":"epoch","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1991},{"name":"point_history","outputs":[{"type":"int128","name":"bias"},{"type":"int128","name":"slope"},{"type":"uint256","name":"ts"},{"type":"uint256","name":"blk"}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":5610},{"name":"user_point_history","outputs":[{"type":"int128","name":"bias"},{"type":"int128","name":"slope"},{"type":"uint256","name":"ts"},{"type":"uint256","name":"blk"}],"inputs":[{"type":"address","name":"arg0"},{"type":"uint256","name":"arg1"}],"stateMutability":"view","type":"function","gas":6139},{"name":"user_point_epoch","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2235},{"name":"slope_changes","outputs":[{"type":"int128","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2226},{"name":"controller","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2141},{"name":"transfersEnabled","outputs":[{"type":"bool","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2171},{"name":"name","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":8603},{"name":"symbol","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":7656},{"name":"version","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":7686},{"name":"decimals","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2291},{"name":"future_smart_wallet_checker","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2321},{"name":"smart_wallet_checker","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2351},{"name":"admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2381},{"name":"future_admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2411}]

740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05260806136006101403934156100a157600080fd5b602061360060c03960c05160205181106100ba57600080fd5b506060602060206136000160c03960c051613600016101c0396040602060206136000160c03960c0516004013511156100f257600080fd5b6040602060406136000160c03960c05161360001610240396020602060406136000160c03960c05160040135111561012957600080fd5b6040602060606136000160c03960c051613600016102a0396020602060606136000160c03960c05160040135111561016057600080fd5b3360115561014051600055436003600560c052602060c02060c052602060c0200155426002600560c052602060c02060c052602060c0200155336009556001600a556020610380600463313ce5676103205261033c610140515afa6101c457600080fd5b601f3d116101d157600080fd5b600050610380516103005260ff6103005111156101ed57600080fd5b61030051600e556101c080600b60c052602060c020602082510161012060006003818352015b8261012051602002111561022657610248565b61012051602002850151610120518501555b8151600101808352811415610213575b50505050505061024080600c60c052602060c020602082510161012060006002818352015b82610120516020021115610280576102a2565b61012051602002850151610120518501555b815160010180835281141561026d575b5050505050506102a080600d60c052602060c020602082510161012060006002818352015b826101205160200211156102da576102fc565b61012051602002850151610120518501555b81516001018083528114156102c7575b5050505050506135e856600436101561000d576132db565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05263e329c0a8600051141561010f5734156100ba57600080fd5b600435600281106100ca57600080fd5b5060115433146100d957600080fd5b600435600255600435610140527f21f133373c539810efde076f56f3f22a915006a84b344ed5ccd594d1840672e46020610140a1005b636b441a40600051141561017e57341561012857600080fd5b600435602051811061013957600080fd5b50601154331461014857600080fd5b600435601255600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1005b636a1c05ae60005114156101f457341561019757600080fd5b60115433146101a557600080fd5b60125461014052600061014051186101bc57600080fd5b6101405160115561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1005b6357f901e2600051141561023557341561020d57600080fd5b600435602051811061021e57600080fd5b50601154331461022d57600080fd5b600435600f55005b638e5b490f600051141561026457341561024e57600080fd5b601154331461025c57600080fd5b600f54601055005b600015610355575b61016052610140523261014051181561034f576010546101805260006101805118156102de576020610220602463c23697a86101a052610140516101c0526101bc6000610180515af16102be57600080fd5b601f3d116102cb57600080fd5b60005061022051156102dd5761016051565b5b6308c379a06102605260206102805260256102a0527f536d61727420636f6e7472616374206465706f7369746f7273206e6f7420616c6102c0527f6c6f7765640000000000000000000000000000000000000000000000000000006102e0526102a050600061034e57608461027cfd5b5b61016051565b637c74a17460005114156103d957341561036e57600080fd5b600435602051811061037f57600080fd5b50600760043560e05260c052604060c0205461014052600161014051633b9aca0081106103ab57600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c020015460005260206000f350005b63da020a1860005114156104475734156103f257600080fd5b600435602051811061040357600080fd5b506002602435633b9aca00811061041957600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c020015460005260206000f350005b63adc63589600051141561049957341561046057600080fd5b600435602051811061047157600080fd5b506001600360043560e05260c052604060c02060c052602060c020015460005260206000f350005b600015610da1575b6101e0526101405261016052610180526101a0526101c05260803661020037608036610280376000610300526000610320526004546103405260006101405118156106aa57426101805111156104fd5760006101605113610500565b60005b1561059d5761016051630784ce00606051818061051c57600080fd5b83058060405190131561052e57600080fd5b809190121561053c57600080fd5b90509050610220526102205161018051428082101561055a57600080fd5b8082039050905060405181111561057057600080fd5b6060518183028060405190131561058657600080fd5b809190121561059457600080fd5b90509050610200525b426101c05111156105b45760006101a051136105b7565b60005b15610654576101a051630784ce0060605181806105d357600080fd5b8305806040519013156105e557600080fd5b80919012156105f357600080fd5b905090506102a0526102a0516101c051428082101561061157600080fd5b8082039050905060405181111561062757600080fd5b6060518183028060405190131561063d57600080fd5b809190121561064b57600080fd5b90509050610280525b60086101805160e05260c052604060c020546103005260006101c05118156106a957610180516101c05114156106915761030051610320526106a8565b60086101c05160e05260c052604060c02054610320525b5b5b610360600081526000816020015242816040015243816060015250600061034051111561074157610360610340516c01431e0fae6d7217caa000000081106106f157600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250505b6103a0516103e0526104006103608051825280602001518260200152806040015182604001528060600151826060015250506000610480526103a0514211156107f057670de0b6b3a7640000436103c0518082101561079f57600080fd5b8082039050905080820282158284830414176107ba57600080fd5b80905090509050426103a051808210156107d357600080fd5b8082039050905080806107e557600080fd5b820490509050610480525b6103e05162093a80808061080357600080fd5b82049050905062093a80808202821582848304141761082157600080fd5b809050905090506104a0526104c0600060ff818352015b6104a0805162093a8081818301101561085057600080fd5b8082019050905081525060006104e052426104a051111561087557426104a05261088c565b60086104a05160e05260c052604060c020546104e0525b6103608051610380516104a0516103e051808210156108aa57600080fd5b808203905090506040518111156108c057600080fd5b606051818302806040519013156108d657600080fd5b80919012156108e457600080fd5b90509050606051818303806040519013156108fe57600080fd5b809190121561090c57600080fd5b9050905081525061038080516104e0516060518183018060405190131561093257600080fd5b809190121561094057600080fd5b90509050815250600061036051121561095a576000610360525b600061038051121561096d576000610380525b6104a0516103e0526104a0516103a05261046051610480516104a051610440518082101561099a57600080fd5b8082039050905080820282158284830414176109b557600080fd5b80905090509050670de0b6b3a764000080806109d057600080fd5b8204905090508181830110156109e557600080fd5b808201905090506103c05261034080516001818183011015610a0657600080fd5b80820190509050815250426104a0511415610a2957436103c052610a9256610a81565b610340516c01431e0fae6d7217caa00000008110610a4657600080fd5b600560c052602060c0200160c052602060c0206103608051825580602001516001830155806040015160028301558060600151600383015550505b5b8151600101808352811415610838575b5050610340516004556000610140511815610b8e5761038080516102a0516102205160605181830380604051901315610aca57600080fd5b8091901215610ad857600080fd5b9050905060605181830180604051901315610af257600080fd5b8091901215610b0057600080fd5b905090508152506103608051610280516102005160605181830380604051901315610b2a57600080fd5b8091901215610b3857600080fd5b9050905060605181830180604051901315610b5257600080fd5b8091901215610b6057600080fd5b905090508152506000610380511215610b7a576000610380525b6000610360511215610b8d576000610360525b5b610340516c01431e0fae6d7217caa00000008110610bab57600080fd5b600560c052602060c0200160c052602060c0206103608051825580602001516001830155806040015160028301558060600151600383015550506000610140511815610d9b5742610180511115610c8a5761030080516102205160605181830180604051901315610c1b57600080fd5b8091901215610c2957600080fd5b90509050815250610180516101c0511415610c735761030080516102a05160605181830380604051901315610c5d57600080fd5b8091901215610c6b57600080fd5b905090508152505b6103005160086101805160e05260c052604060c020555b426101c0511115610cef57610180516101c0511115610cee5761032080516102a05160605181830380604051901315610cc257600080fd5b8091901215610cd057600080fd5b905090508152506103205160086101c05160e05260c052604060c020555b5b60076101405160e05260c052604060c020546001818183011015610d1257600080fd5b80820190509050610500526105005160076101405160e05260c052604060c02055426102c052436102e05261050051633b9aca008110610d5157600080fd5b60066101405160e05260c052604060c02060c052602060c0200160c052602060c0206102808051825580602001516001830155806040015160028301558060600151600383015550505b6101e051565b600015611043575b610200526101405261016052610180526101a0526101c0526101e0526102206101a080518252806020015182602001525050600154610260526102605161016051818183011015610df957600080fd5b8082019050905060015561028061022080518252806020015182602001525050610220805161016051604051811115610e3157600080fd5b60605181830180604051901315610e4757600080fd5b8091901215610e5557600080fd5b905090508152506000610180511815610e715761018051610240525b60036101405160e05260c052604060c02060c052602060c020610220805182558060200151600183015550506101406102c0525b6102c0515160206102c051016102c0526102c06102c0511015610ec757610ea5565b610140516102e0526103006102808051825280602001518260200152505061034061022080518252806020015182602001525050610360516103405161032051610300516102e051600658016104a1565b6102a06102c0525b6102c0515260206102c051036102c0526101406102c051101515610f4357610f20565b6000506000610160511815610fa857602061048060646323b872dd6103c052610140516103e052306104005261016051610420526103dc60006000545af1610f8a57600080fd5b601f3d11610f9757600080fd5b60005061048051610fa757600080fd5b5b610160516104a0526101e0516104c052426104e05261024051610140517f4566dfc29f6f11d13a418c26a02bef7c28bae749d4de47e4e6a7cddea6730d5960606104a0a36102605161050052610260516101605181818301101561100b57600080fd5b80820190509050610520527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c6040610500a161020051565b63c2c4c5c1600051141561109257341561105c57600080fd5b600061014052604036610160376040366101a0376101c0516101a051610180516101605161014051600658016104a1565b600050005b633a46273e60005114156112a85762ffffff54156110af57600080fd5b600162ffffff5534156110c157600080fd5b60043560205181106110d257600080fd5b50610140600360043560e05260c052604060c0208060c052602060c02054825260018160c052602060c02001548260200152505060006024351161111557600080fd5b6308c379a06101805260206101a05260166101c0527f4e6f206578697374696e67206c6f636b20666f756e64000000000000000000006101e0526101c0506000610140511361116557606461019cfd5b6308c379a0610220526020610240526024610260527f43616e6e6f742061646420746f2065787069726564206c6f636b2e2057697468610280527f64726177000000000000000000000000000000000000000000000000000000006102a052610260504261016051116111d957608461023cfd5b6101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015611203576111e1565b6004356103005260243561032052600061034052610360600360043560e05260c052604060c0208060c052602060c02054825260018160c052602060c02001548260200152505060006103a0526103a051610380516103605161034051610320516103005160065801610da9565b6102c06102e0525b6102e0515260206102e051036102e0526101406102e05110151561129c57611279565b600050600062ffffff55005b6365fc387360005114156115465762ffffff54156112c557600080fd5b600162ffffff5534156112d757600080fd5b3361014052610140516006580161026c565b60005060243562093a8080806112fe57600080fd5b82049050905062093a80808202821582848304141761131c57600080fd5b809050905090506101a0526101c060033360e05260c052604060c0208060c052602060c02054825260018160c052602060c02001548260200152505060006004351161136757600080fd5b6308c379a0610200526020610220526019610240527f5769746864726177206f6c6420746f6b656e732066697273740000000000000061026052610240506101c051156113b557606461021cfd5b6308c379a06102a05260206102c05260266102e0527f43616e206f6e6c79206c6f636b20756e74696c2074696d6520696e2074686520610300527f6675747572650000000000000000000000000000000000000000000000000000610320526102e050426101a051116114295760846102bcfd5b6308c379a061036052602061038052601e6103a0527f566f74696e67206c6f636b2063616e2062652034207965617273206d617800006103c0526103a05042630784ce0081818301101561147c57600080fd5b808201905090506101a051111561149457606461037cfd5b610140610400525b610400515160206104005101610400526104006104005110156114be5761149c565b3361042052600435610440526101a051610460526104806101c08051825280602001518260200152505060016104c0526104c0516104a0516104805161046051610440516104205160065801610da9565b6103e0610400525b610400515260206104005103610400526101406104005110151561153a57611517565b600050600062ffffff55005b634957677c600051141561173e5762ffffff541561156357600080fd5b600162ffffff55341561157557600080fd5b3361014052610140516006580161026c565b6000506101a060033360e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506000600435116115ca57600080fd5b6308c379a06101e0526020610200526016610220527f4e6f206578697374696e67206c6f636b20666f756e6400000000000000000000610240526102205060006101a0511361161a5760646101fcfd5b6308c379a06102805260206102a05260246102c0527f43616e6e6f742061646420746f2065787069726564206c6f636b2e20576974686102e0527f6472617700000000000000000000000000000000000000000000000000000000610300526102c050426101c0511161168e57608461029cfd5b610140610340525b610340515160206103405101610340526103406103405110156116b857611696565b33610360526004356103805260006103a0526103c06101a080518252806020015182602001525050600261040052610400516103e0516103c0516103a051610380516103605160065801610da9565b610320610340525b61034051526020610340510361034052610140610340511015156117325761170f565b600050600062ffffff55005b63eff7a61260005114156119fb5762ffffff541561175b57600080fd5b600162ffffff55341561176d57600080fd5b3361014052610140516006580161026c565b6000506101a060033360e05260c052604060c0208060c052602060c02054825260018160c052602060c02001548260200152505060043562093a8080806117c557600080fd5b82049050905062093a8080820282158284830414176117e357600080fd5b809050905090506101e0526308c379a061020052602061022052600c610240527f4c6f636b206578706972656400000000000000000000000000000000000000006102605261024050426101c0511161183d57606461021cfd5b6308c379a06102a05260206102c05260116102e0527f4e6f7468696e67206973206c6f636b6564000000000000000000000000000000610300526102e05060006101a0511361188d5760646102bcfd5b6308c379a061034052602061036052601f610380527f43616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e006103a052610380506101c0516101e051116118df57606461035cfd5b6308c379a06103e052602061040052601e610420527f566f74696e67206c6f636b2063616e2062652034207965617273206d61780000610440526104205042630784ce0081818301101561193257600080fd5b808201905090506101e051111561194a5760646103fcfd5b610140610480525b6104805151602061048051016104805261048061048051101561197457611952565b336104a05260006104c0526101e0516104e0526105006101a0805182528060200151826020015250506003610540526105405161052051610500516104e0516104c0516104a05160065801610da9565b610460610480525b61048051526020610480510361048052610140610480511015156119ef576119cc565b600050600062ffffff55005b633ccfd60b6000511415611cbc5762ffffff5415611a1857600080fd5b600162ffffff553415611a2a57600080fd5b61014060033360e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506002541515611ab5576308c379a06101805260206101a05260166101c0527f546865206c6f636b206469646e277420657870697265000000000000000000006101e0526101c05061016051421015611ab457606461019cfd5b5b610140516000811215611ac757600080fd5b610220526102406101408051825280602001518260200152505060006101605260006101405260033360e05260c052604060c02060c052602060c0206101408051825580602001516001830155505060015461028052610280516102205180821015611b3257600080fd5b808203905090506001556101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015611b6657611b44565b336102c0526102e061024080518252806020015182602001525050610320610140805182528060200151826020015250506103405161032051610300516102e0516102c051600658016104a1565b6102806102a0525b6102a0515260206102a051036102a0526101406102a051101515611bdf57611bbc565b6000506020610440604463a9059cbb6103a052336103c052610220516103e0526103bc60006000545af1611c1257600080fd5b601f3d11611c1f57600080fd5b60005061044051611c2f57600080fd5b61022051610460524261048052337ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5686040610460a2610280516104a052610280516102205180821015611c8157600080fd5b808203905090506104c0527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c60406104a0a1600062ffffff55005b600015611ddb575b61018052610140526101605260006101a052610160516101c0526101e060006080818352015b6101c0516101a051101515611cfe57611dc7565b6101a0516101c051818183011015611d1557600080fd5b808201905090506001818183011015611d2d57600080fd5b8082019050905060028080611d4157600080fd5b82049050905061020052610140516003610200516c01431e0fae6d7217caa00000008110611d6e57600080fd5b600560c052602060c0200160c052602060c0200154111515611d9757610200516101a052611db6565b61020051600180821015611daa57600080fd5b808203905090506101c0525b5b8151600101808352811415611cea575b50506101a051600052600051610180515650005b6370a082316000511415611df3574261014052611e18565b62fdd58e6000511415611e10576020602461014037600050611e18565b600015611f90575b3415611e2357600080fd5b6004356020518110611e3457600080fd5b50600760043560e05260c052604060c0205461016052610160511515611e6457600060005260206000f350611f8e565b61018061016051633b9aca008110611e7b57600080fd5b600660043560e05260c052604060c02060c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505061018080516101a051610140516101c05180821015611ef657600080fd5b80820390509050604051811115611f0c57600080fd5b60605181830280604051901315611f2257600080fd5b8091901215611f3057600080fd5b9050905060605181830380604051901315611f4a57600080fd5b8091901215611f5857600080fd5b905090508152506000610180511215611f72576000610180525b610180516000811215611f8457600080fd5b60005260206000f3505b005b634ee2cd7e600051141561249f573415611fa957600080fd5b6004356020518110611fba57600080fd5b50436024351115611fca57600080fd5b600061014052600760043560e05260c052604060c020546101605261018060006080818352015b6101605161014051101515612005576120d2565b610140516101605181818301101561201c57600080fd5b80820190509050600181818301101561203457600080fd5b808201905090506002808061204857600080fd5b8204905090506101a05260243560036101a051633b9aca00811061206b57600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c02001541115156120a2576101a051610140526120c1565b6101a0516001808210156120b557600080fd5b80820390509050610160525b5b8151600101808352811415611ff1575b50506101c061014051633b9aca0081106120eb57600080fd5b600660043560e05260c052604060c02060c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050600454610240526101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516024356102a052610240516102c0526102c0516102a05160065801611cc4565b61032052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103205161026052610340610260516c01431e0fae6d7217caa000000081106121eb57600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006103c05260006103e052610240516102605110156123205761040061026051600181818301101561226c57600080fd5b808201905090506c01431e0fae6d7217caa0000000811061228c57600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050610460516103a051808210156122f057600080fd5b808203905090506103c05261044051610380518082101561231057600080fd5b808203905090506103e05261235b565b436103a0518082101561233257600080fd5b808203905090506103c05242610380518082101561234f57600080fd5b808203905090506103e0525b610380516104805260006103c05118156123dd5761048080516103e0516024356103a0518082101561238c57600080fd5b8082039050905080820282158284830414176123a757600080fd5b809050905090506103c05180806123bd57600080fd5b8204905090508181830110156123d257600080fd5b808201905090508152505b6101c080516101e0516104805161020051808210156123fb57600080fd5b8082039050905060405181111561241157600080fd5b6060518183028060405190131561242757600080fd5b809190121561243557600080fd5b905090506060518183038060405190131561244f57600080fd5b809190121561245d57600080fd5b9050905081525060006101c051121515612491576101c051600081121561248357600080fd5b60005260206000f35061249d565b600060005260206000f3505b005b6000156126a7575b6101e0526101405261016052610180526101a0526101c0526102006101408051825280602001518260200152806040015182604001528060600151826060015250506102405162093a8080806124fc57600080fd5b82049050905062093a80808202821582848304141761251a57600080fd5b80905090509050610280526102a0600060ff818352015b610280805162093a8081818301101561254957600080fd5b8082019050905081525060006102c0526101c051610280511115612574576101c0516102805261258b565b60086102805160e05260c052604060c020546102c0525b6102008051610220516102805161024051808210156125a957600080fd5b808203905090506040518111156125bf57600080fd5b606051818302806040519013156125d557600080fd5b80919012156125e357600080fd5b90509050606051818303806040519013156125fd57600080fd5b809190121561260b57600080fd5b905090508152506101c05161028051141561262557612672565b61022080516102c0516060518183018060405190131561264457600080fd5b809190121561265257600080fd5b9050905081525061028051610240525b8151600101808352811415612531575b50506000610200511215612687576000610200525b61020051600081121561269957600080fd5b6000526000516101e0515650005b6318160ddd60005114156126bf5742610140526126e5565b63bd85b03960005114156126dd5760206004610140376000506126e5565b6000156127f8575b34156126f057600080fd5b60045461016052610180610160516c01431e0fae6d7217caa0000000811061271757600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506101405161016051610180516101a0516101c0516101e051610220610180805182528060200151826020015280604001518260400152806060015182606001525050610140516102a0526102a05161028051610260516102405161022051600658016124a7565b610300526101e0526101c0526101a0526101805261016052610140526103005160005260206000f350005b63981b24d06000511415612b5f57341561281157600080fd5b43600435111561282057600080fd5b6004546101405261014051610160516004356101a052610140516101c0526101c0516101a05160065801611cc4565b6102205261016052610140526102205161016052610240610160516c01431e0fae6d7217caa0000000811061288357600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006102c05261014051610160511015612a04576102e06101605160018181830110156128fe57600080fd5b808201905090506c01431e0fae6d7217caa0000000811061291e57600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050610340516102a05118156129ff576004356102a0518082101561298f57600080fd5b808203905090506103205161028051808210156129ab57600080fd5b8082039050905080820282158284830414176129c657600080fd5b80905090509050610340516102a051808210156129e257600080fd5b8082039050905080806129f457600080fd5b8204905090506102c0525b612a8e565b436102a0511815612a8d576004356102a05180821015612a2357600080fd5b80820390509050426102805180821015612a3c57600080fd5b808203905090508082028215828483041417612a5757600080fd5b80905090509050436102a05180821015612a7057600080fd5b808203905090508080612a8257600080fd5b8204905090506102c0525b5b610140610360525b610360515160206103605101610360526102e0610360511015612ab857612a96565b610380610240805182528060200151826020015280604001518260400152806060015182606001525050610280516102c051818183011015612af957600080fd5b8082019050905061040052610400516103e0516103c0516103a05161038051600658016124a7565b610460526102c0610360525b6103605152602061036051036103605261014061036051101515612b5057612b2d565b6104605160005260206000f350005b633cebb8236000511415612ba0573415612b7857600080fd5b6004356020518110612b8957600080fd5b506009543314612b9857600080fd5b600435600955005b63fc0c546a6000511415612bc7573415612bb957600080fd5b60005460005260206000f350005b63047fc9aa6000511415612bee573415612be057600080fd5b60015460005260206000f350005b630f41e0d26000511415612c15573415612c0757600080fd5b60025460005260206000f350005b63cbf9fe5f6000511415612c9e573415612c2e57600080fd5b6004356020518110612c3f57600080fd5b50610140808080600360043560e05260c052604060c02060c052602060c020548152505060208101905080806001600360043560e05260c052604060c02060c052602060c02001548152505060409050905060c05260c051610140f350005b63900cf0cf6000511415612cc5573415612cb757600080fd5b60045460005260206000f350005b63d1febfb96000511415612de8573415612cde57600080fd5b6101408080806004356c01431e0fae6d7217caa00000008110612d0057600080fd5b600560c052602060c0200160c052602060c0205481525050602081019050808060016004356c01431e0fae6d7217caa00000008110612d3e57600080fd5b600560c052602060c0200160c052602060c020015481525050602081019050808060026004356c01431e0fae6d7217caa00000008110612d7d57600080fd5b600560c052602060c0200160c052602060c020015481525050602081019050808060036004356c01431e0fae6d7217caa00000008110612dbc57600080fd5b600560c052602060c0200160c052602060c02001548152505060809050905060c05260c051610140f350005b6328d09d476000511415612f31573415612e0157600080fd5b6004356020518110612e1257600080fd5b50610140808080602435633b9aca008110612e2c57600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c020548152505060208101905080806001602435633b9aca008110612e6f57600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060208101905080806002602435633b9aca008110612eb357600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060208101905080806003602435633b9aca008110612ef757600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060809050905060c05260c051610140f350005b63010ae7576000511415612f78573415612f4a57600080fd5b6004356020518110612f5b57600080fd5b50600760043560e05260c052604060c0205460005260206000f350005b63711974846000511415612fad573415612f9157600080fd5b600860043560e05260c052604060c0205460005260206000f350005b63f77c47916000511415612fd4573415612fc657600080fd5b60095460005260206000f350005b63bef97c876000511415612ffb573415612fed57600080fd5b600a5460005260206000f350005b6306fdde0360005114156130af57341561301457600080fd5b600b8060c052602060c020610180602082540161012060006003818352015b8261012051602002111561304657613068565b61012051850154610120516020028501525b8151600101808352811415613033575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b6395d89b4160005114156131635734156130c857600080fd5b600c8060c052602060c020610180602082540161012060006002818352015b826101205160200211156130fa5761311c565b61012051850154610120516020028501525b81516001018083528114156130e7575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b6354fd4d50600051141561321757341561317c57600080fd5b600d8060c052602060c020610180602082540161012060006002818352015b826101205160200211156131ae576131d0565b61012051850154610120516020028501525b815160010180835281141561319b575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b63313ce567600051141561323e57341561323057600080fd5b600e5460005260206000f350005b638ff36fd1600051141561326557341561325757600080fd5b600f5460005260206000f350005b637175d4f7600051141561328c57341561327e57600080fd5b60105460005260206000f350005b63f851a44060005114156132b35734156132a557600080fd5b60115460005260206000f350005b6317f7182a60005114156132da5734156132cc57600080fd5b60125460005260206000f350005b5b60006000fd5b6103076135e8036103076000396103076135e8036000f30000000000000000000000002ba592f78db6436527729929aaf6c908497cb200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000008696365435245414d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008696365435245414d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e696365435245414d5f312e302e30000000000000000000000000000000000000

Deployed Bytecode

0x600436101561000d576132db565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05263e329c0a8600051141561010f5734156100ba57600080fd5b600435600281106100ca57600080fd5b5060115433146100d957600080fd5b600435600255600435610140527f21f133373c539810efde076f56f3f22a915006a84b344ed5ccd594d1840672e46020610140a1005b636b441a40600051141561017e57341561012857600080fd5b600435602051811061013957600080fd5b50601154331461014857600080fd5b600435601255600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1005b636a1c05ae60005114156101f457341561019757600080fd5b60115433146101a557600080fd5b60125461014052600061014051186101bc57600080fd5b6101405160115561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1005b6357f901e2600051141561023557341561020d57600080fd5b600435602051811061021e57600080fd5b50601154331461022d57600080fd5b600435600f55005b638e5b490f600051141561026457341561024e57600080fd5b601154331461025c57600080fd5b600f54601055005b600015610355575b61016052610140523261014051181561034f576010546101805260006101805118156102de576020610220602463c23697a86101a052610140516101c0526101bc6000610180515af16102be57600080fd5b601f3d116102cb57600080fd5b60005061022051156102dd5761016051565b5b6308c379a06102605260206102805260256102a0527f536d61727420636f6e7472616374206465706f7369746f7273206e6f7420616c6102c0527f6c6f7765640000000000000000000000000000000000000000000000000000006102e0526102a050600061034e57608461027cfd5b5b61016051565b637c74a17460005114156103d957341561036e57600080fd5b600435602051811061037f57600080fd5b50600760043560e05260c052604060c0205461014052600161014051633b9aca0081106103ab57600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c020015460005260206000f350005b63da020a1860005114156104475734156103f257600080fd5b600435602051811061040357600080fd5b506002602435633b9aca00811061041957600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c020015460005260206000f350005b63adc63589600051141561049957341561046057600080fd5b600435602051811061047157600080fd5b506001600360043560e05260c052604060c02060c052602060c020015460005260206000f350005b600015610da1575b6101e0526101405261016052610180526101a0526101c05260803661020037608036610280376000610300526000610320526004546103405260006101405118156106aa57426101805111156104fd5760006101605113610500565b60005b1561059d5761016051630784ce00606051818061051c57600080fd5b83058060405190131561052e57600080fd5b809190121561053c57600080fd5b90509050610220526102205161018051428082101561055a57600080fd5b8082039050905060405181111561057057600080fd5b6060518183028060405190131561058657600080fd5b809190121561059457600080fd5b90509050610200525b426101c05111156105b45760006101a051136105b7565b60005b15610654576101a051630784ce0060605181806105d357600080fd5b8305806040519013156105e557600080fd5b80919012156105f357600080fd5b905090506102a0526102a0516101c051428082101561061157600080fd5b8082039050905060405181111561062757600080fd5b6060518183028060405190131561063d57600080fd5b809190121561064b57600080fd5b90509050610280525b60086101805160e05260c052604060c020546103005260006101c05118156106a957610180516101c05114156106915761030051610320526106a8565b60086101c05160e05260c052604060c02054610320525b5b5b610360600081526000816020015242816040015243816060015250600061034051111561074157610360610340516c01431e0fae6d7217caa000000081106106f157600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250505b6103a0516103e0526104006103608051825280602001518260200152806040015182604001528060600151826060015250506000610480526103a0514211156107f057670de0b6b3a7640000436103c0518082101561079f57600080fd5b8082039050905080820282158284830414176107ba57600080fd5b80905090509050426103a051808210156107d357600080fd5b8082039050905080806107e557600080fd5b820490509050610480525b6103e05162093a80808061080357600080fd5b82049050905062093a80808202821582848304141761082157600080fd5b809050905090506104a0526104c0600060ff818352015b6104a0805162093a8081818301101561085057600080fd5b8082019050905081525060006104e052426104a051111561087557426104a05261088c565b60086104a05160e05260c052604060c020546104e0525b6103608051610380516104a0516103e051808210156108aa57600080fd5b808203905090506040518111156108c057600080fd5b606051818302806040519013156108d657600080fd5b80919012156108e457600080fd5b90509050606051818303806040519013156108fe57600080fd5b809190121561090c57600080fd5b9050905081525061038080516104e0516060518183018060405190131561093257600080fd5b809190121561094057600080fd5b90509050815250600061036051121561095a576000610360525b600061038051121561096d576000610380525b6104a0516103e0526104a0516103a05261046051610480516104a051610440518082101561099a57600080fd5b8082039050905080820282158284830414176109b557600080fd5b80905090509050670de0b6b3a764000080806109d057600080fd5b8204905090508181830110156109e557600080fd5b808201905090506103c05261034080516001818183011015610a0657600080fd5b80820190509050815250426104a0511415610a2957436103c052610a9256610a81565b610340516c01431e0fae6d7217caa00000008110610a4657600080fd5b600560c052602060c0200160c052602060c0206103608051825580602001516001830155806040015160028301558060600151600383015550505b5b8151600101808352811415610838575b5050610340516004556000610140511815610b8e5761038080516102a0516102205160605181830380604051901315610aca57600080fd5b8091901215610ad857600080fd5b9050905060605181830180604051901315610af257600080fd5b8091901215610b0057600080fd5b905090508152506103608051610280516102005160605181830380604051901315610b2a57600080fd5b8091901215610b3857600080fd5b9050905060605181830180604051901315610b5257600080fd5b8091901215610b6057600080fd5b905090508152506000610380511215610b7a576000610380525b6000610360511215610b8d576000610360525b5b610340516c01431e0fae6d7217caa00000008110610bab57600080fd5b600560c052602060c0200160c052602060c0206103608051825580602001516001830155806040015160028301558060600151600383015550506000610140511815610d9b5742610180511115610c8a5761030080516102205160605181830180604051901315610c1b57600080fd5b8091901215610c2957600080fd5b90509050815250610180516101c0511415610c735761030080516102a05160605181830380604051901315610c5d57600080fd5b8091901215610c6b57600080fd5b905090508152505b6103005160086101805160e05260c052604060c020555b426101c0511115610cef57610180516101c0511115610cee5761032080516102a05160605181830380604051901315610cc257600080fd5b8091901215610cd057600080fd5b905090508152506103205160086101c05160e05260c052604060c020555b5b60076101405160e05260c052604060c020546001818183011015610d1257600080fd5b80820190509050610500526105005160076101405160e05260c052604060c02055426102c052436102e05261050051633b9aca008110610d5157600080fd5b60066101405160e05260c052604060c02060c052602060c0200160c052602060c0206102808051825580602001516001830155806040015160028301558060600151600383015550505b6101e051565b600015611043575b610200526101405261016052610180526101a0526101c0526101e0526102206101a080518252806020015182602001525050600154610260526102605161016051818183011015610df957600080fd5b8082019050905060015561028061022080518252806020015182602001525050610220805161016051604051811115610e3157600080fd5b60605181830180604051901315610e4757600080fd5b8091901215610e5557600080fd5b905090508152506000610180511815610e715761018051610240525b60036101405160e05260c052604060c02060c052602060c020610220805182558060200151600183015550506101406102c0525b6102c0515160206102c051016102c0526102c06102c0511015610ec757610ea5565b610140516102e0526103006102808051825280602001518260200152505061034061022080518252806020015182602001525050610360516103405161032051610300516102e051600658016104a1565b6102a06102c0525b6102c0515260206102c051036102c0526101406102c051101515610f4357610f20565b6000506000610160511815610fa857602061048060646323b872dd6103c052610140516103e052306104005261016051610420526103dc60006000545af1610f8a57600080fd5b601f3d11610f9757600080fd5b60005061048051610fa757600080fd5b5b610160516104a0526101e0516104c052426104e05261024051610140517f4566dfc29f6f11d13a418c26a02bef7c28bae749d4de47e4e6a7cddea6730d5960606104a0a36102605161050052610260516101605181818301101561100b57600080fd5b80820190509050610520527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c6040610500a161020051565b63c2c4c5c1600051141561109257341561105c57600080fd5b600061014052604036610160376040366101a0376101c0516101a051610180516101605161014051600658016104a1565b600050005b633a46273e60005114156112a85762ffffff54156110af57600080fd5b600162ffffff5534156110c157600080fd5b60043560205181106110d257600080fd5b50610140600360043560e05260c052604060c0208060c052602060c02054825260018160c052602060c02001548260200152505060006024351161111557600080fd5b6308c379a06101805260206101a05260166101c0527f4e6f206578697374696e67206c6f636b20666f756e64000000000000000000006101e0526101c0506000610140511361116557606461019cfd5b6308c379a0610220526020610240526024610260527f43616e6e6f742061646420746f2065787069726564206c6f636b2e2057697468610280527f64726177000000000000000000000000000000000000000000000000000000006102a052610260504261016051116111d957608461023cfd5b6101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015611203576111e1565b6004356103005260243561032052600061034052610360600360043560e05260c052604060c0208060c052602060c02054825260018160c052602060c02001548260200152505060006103a0526103a051610380516103605161034051610320516103005160065801610da9565b6102c06102e0525b6102e0515260206102e051036102e0526101406102e05110151561129c57611279565b600050600062ffffff55005b6365fc387360005114156115465762ffffff54156112c557600080fd5b600162ffffff5534156112d757600080fd5b3361014052610140516006580161026c565b60005060243562093a8080806112fe57600080fd5b82049050905062093a80808202821582848304141761131c57600080fd5b809050905090506101a0526101c060033360e05260c052604060c0208060c052602060c02054825260018160c052602060c02001548260200152505060006004351161136757600080fd5b6308c379a0610200526020610220526019610240527f5769746864726177206f6c6420746f6b656e732066697273740000000000000061026052610240506101c051156113b557606461021cfd5b6308c379a06102a05260206102c05260266102e0527f43616e206f6e6c79206c6f636b20756e74696c2074696d6520696e2074686520610300527f6675747572650000000000000000000000000000000000000000000000000000610320526102e050426101a051116114295760846102bcfd5b6308c379a061036052602061038052601e6103a0527f566f74696e67206c6f636b2063616e2062652034207965617273206d617800006103c0526103a05042630784ce0081818301101561147c57600080fd5b808201905090506101a051111561149457606461037cfd5b610140610400525b610400515160206104005101610400526104006104005110156114be5761149c565b3361042052600435610440526101a051610460526104806101c08051825280602001518260200152505060016104c0526104c0516104a0516104805161046051610440516104205160065801610da9565b6103e0610400525b610400515260206104005103610400526101406104005110151561153a57611517565b600050600062ffffff55005b634957677c600051141561173e5762ffffff541561156357600080fd5b600162ffffff55341561157557600080fd5b3361014052610140516006580161026c565b6000506101a060033360e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506000600435116115ca57600080fd5b6308c379a06101e0526020610200526016610220527f4e6f206578697374696e67206c6f636b20666f756e6400000000000000000000610240526102205060006101a0511361161a5760646101fcfd5b6308c379a06102805260206102a05260246102c0527f43616e6e6f742061646420746f2065787069726564206c6f636b2e20576974686102e0527f6472617700000000000000000000000000000000000000000000000000000000610300526102c050426101c0511161168e57608461029cfd5b610140610340525b610340515160206103405101610340526103406103405110156116b857611696565b33610360526004356103805260006103a0526103c06101a080518252806020015182602001525050600261040052610400516103e0516103c0516103a051610380516103605160065801610da9565b610320610340525b61034051526020610340510361034052610140610340511015156117325761170f565b600050600062ffffff55005b63eff7a61260005114156119fb5762ffffff541561175b57600080fd5b600162ffffff55341561176d57600080fd5b3361014052610140516006580161026c565b6000506101a060033360e05260c052604060c0208060c052602060c02054825260018160c052602060c02001548260200152505060043562093a8080806117c557600080fd5b82049050905062093a8080820282158284830414176117e357600080fd5b809050905090506101e0526308c379a061020052602061022052600c610240527f4c6f636b206578706972656400000000000000000000000000000000000000006102605261024050426101c0511161183d57606461021cfd5b6308c379a06102a05260206102c05260116102e0527f4e6f7468696e67206973206c6f636b6564000000000000000000000000000000610300526102e05060006101a0511361188d5760646102bcfd5b6308c379a061034052602061036052601f610380527f43616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e006103a052610380506101c0516101e051116118df57606461035cfd5b6308c379a06103e052602061040052601e610420527f566f74696e67206c6f636b2063616e2062652034207965617273206d61780000610440526104205042630784ce0081818301101561193257600080fd5b808201905090506101e051111561194a5760646103fcfd5b610140610480525b6104805151602061048051016104805261048061048051101561197457611952565b336104a05260006104c0526101e0516104e0526105006101a0805182528060200151826020015250506003610540526105405161052051610500516104e0516104c0516104a05160065801610da9565b610460610480525b61048051526020610480510361048052610140610480511015156119ef576119cc565b600050600062ffffff55005b633ccfd60b6000511415611cbc5762ffffff5415611a1857600080fd5b600162ffffff553415611a2a57600080fd5b61014060033360e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506002541515611ab5576308c379a06101805260206101a05260166101c0527f546865206c6f636b206469646e277420657870697265000000000000000000006101e0526101c05061016051421015611ab457606461019cfd5b5b610140516000811215611ac757600080fd5b610220526102406101408051825280602001518260200152505060006101605260006101405260033360e05260c052604060c02060c052602060c0206101408051825580602001516001830155505060015461028052610280516102205180821015611b3257600080fd5b808203905090506001556101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015611b6657611b44565b336102c0526102e061024080518252806020015182602001525050610320610140805182528060200151826020015250506103405161032051610300516102e0516102c051600658016104a1565b6102806102a0525b6102a0515260206102a051036102a0526101406102a051101515611bdf57611bbc565b6000506020610440604463a9059cbb6103a052336103c052610220516103e0526103bc60006000545af1611c1257600080fd5b601f3d11611c1f57600080fd5b60005061044051611c2f57600080fd5b61022051610460524261048052337ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5686040610460a2610280516104a052610280516102205180821015611c8157600080fd5b808203905090506104c0527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c60406104a0a1600062ffffff55005b600015611ddb575b61018052610140526101605260006101a052610160516101c0526101e060006080818352015b6101c0516101a051101515611cfe57611dc7565b6101a0516101c051818183011015611d1557600080fd5b808201905090506001818183011015611d2d57600080fd5b8082019050905060028080611d4157600080fd5b82049050905061020052610140516003610200516c01431e0fae6d7217caa00000008110611d6e57600080fd5b600560c052602060c0200160c052602060c0200154111515611d9757610200516101a052611db6565b61020051600180821015611daa57600080fd5b808203905090506101c0525b5b8151600101808352811415611cea575b50506101a051600052600051610180515650005b6370a082316000511415611df3574261014052611e18565b62fdd58e6000511415611e10576020602461014037600050611e18565b600015611f90575b3415611e2357600080fd5b6004356020518110611e3457600080fd5b50600760043560e05260c052604060c0205461016052610160511515611e6457600060005260206000f350611f8e565b61018061016051633b9aca008110611e7b57600080fd5b600660043560e05260c052604060c02060c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505061018080516101a051610140516101c05180821015611ef657600080fd5b80820390509050604051811115611f0c57600080fd5b60605181830280604051901315611f2257600080fd5b8091901215611f3057600080fd5b9050905060605181830380604051901315611f4a57600080fd5b8091901215611f5857600080fd5b905090508152506000610180511215611f72576000610180525b610180516000811215611f8457600080fd5b60005260206000f3505b005b634ee2cd7e600051141561249f573415611fa957600080fd5b6004356020518110611fba57600080fd5b50436024351115611fca57600080fd5b600061014052600760043560e05260c052604060c020546101605261018060006080818352015b6101605161014051101515612005576120d2565b610140516101605181818301101561201c57600080fd5b80820190509050600181818301101561203457600080fd5b808201905090506002808061204857600080fd5b8204905090506101a05260243560036101a051633b9aca00811061206b57600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c02001541115156120a2576101a051610140526120c1565b6101a0516001808210156120b557600080fd5b80820390509050610160525b5b8151600101808352811415611ff1575b50506101c061014051633b9aca0081106120eb57600080fd5b600660043560e05260c052604060c02060c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050600454610240526101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516024356102a052610240516102c0526102c0516102a05160065801611cc4565b61032052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103205161026052610340610260516c01431e0fae6d7217caa000000081106121eb57600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006103c05260006103e052610240516102605110156123205761040061026051600181818301101561226c57600080fd5b808201905090506c01431e0fae6d7217caa0000000811061228c57600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050610460516103a051808210156122f057600080fd5b808203905090506103c05261044051610380518082101561231057600080fd5b808203905090506103e05261235b565b436103a0518082101561233257600080fd5b808203905090506103c05242610380518082101561234f57600080fd5b808203905090506103e0525b610380516104805260006103c05118156123dd5761048080516103e0516024356103a0518082101561238c57600080fd5b8082039050905080820282158284830414176123a757600080fd5b809050905090506103c05180806123bd57600080fd5b8204905090508181830110156123d257600080fd5b808201905090508152505b6101c080516101e0516104805161020051808210156123fb57600080fd5b8082039050905060405181111561241157600080fd5b6060518183028060405190131561242757600080fd5b809190121561243557600080fd5b905090506060518183038060405190131561244f57600080fd5b809190121561245d57600080fd5b9050905081525060006101c051121515612491576101c051600081121561248357600080fd5b60005260206000f35061249d565b600060005260206000f3505b005b6000156126a7575b6101e0526101405261016052610180526101a0526101c0526102006101408051825280602001518260200152806040015182604001528060600151826060015250506102405162093a8080806124fc57600080fd5b82049050905062093a80808202821582848304141761251a57600080fd5b80905090509050610280526102a0600060ff818352015b610280805162093a8081818301101561254957600080fd5b8082019050905081525060006102c0526101c051610280511115612574576101c0516102805261258b565b60086102805160e05260c052604060c020546102c0525b6102008051610220516102805161024051808210156125a957600080fd5b808203905090506040518111156125bf57600080fd5b606051818302806040519013156125d557600080fd5b80919012156125e357600080fd5b90509050606051818303806040519013156125fd57600080fd5b809190121561260b57600080fd5b905090508152506101c05161028051141561262557612672565b61022080516102c0516060518183018060405190131561264457600080fd5b809190121561265257600080fd5b9050905081525061028051610240525b8151600101808352811415612531575b50506000610200511215612687576000610200525b61020051600081121561269957600080fd5b6000526000516101e0515650005b6318160ddd60005114156126bf5742610140526126e5565b63bd85b03960005114156126dd5760206004610140376000506126e5565b6000156127f8575b34156126f057600080fd5b60045461016052610180610160516c01431e0fae6d7217caa0000000811061271757600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506101405161016051610180516101a0516101c0516101e051610220610180805182528060200151826020015280604001518260400152806060015182606001525050610140516102a0526102a05161028051610260516102405161022051600658016124a7565b610300526101e0526101c0526101a0526101805261016052610140526103005160005260206000f350005b63981b24d06000511415612b5f57341561281157600080fd5b43600435111561282057600080fd5b6004546101405261014051610160516004356101a052610140516101c0526101c0516101a05160065801611cc4565b6102205261016052610140526102205161016052610240610160516c01431e0fae6d7217caa0000000811061288357600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006102c05261014051610160511015612a04576102e06101605160018181830110156128fe57600080fd5b808201905090506c01431e0fae6d7217caa0000000811061291e57600080fd5b600560c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050610340516102a05118156129ff576004356102a0518082101561298f57600080fd5b808203905090506103205161028051808210156129ab57600080fd5b8082039050905080820282158284830414176129c657600080fd5b80905090509050610340516102a051808210156129e257600080fd5b8082039050905080806129f457600080fd5b8204905090506102c0525b612a8e565b436102a0511815612a8d576004356102a05180821015612a2357600080fd5b80820390509050426102805180821015612a3c57600080fd5b808203905090508082028215828483041417612a5757600080fd5b80905090509050436102a05180821015612a7057600080fd5b808203905090508080612a8257600080fd5b8204905090506102c0525b5b610140610360525b610360515160206103605101610360526102e0610360511015612ab857612a96565b610380610240805182528060200151826020015280604001518260400152806060015182606001525050610280516102c051818183011015612af957600080fd5b8082019050905061040052610400516103e0516103c0516103a05161038051600658016124a7565b610460526102c0610360525b6103605152602061036051036103605261014061036051101515612b5057612b2d565b6104605160005260206000f350005b633cebb8236000511415612ba0573415612b7857600080fd5b6004356020518110612b8957600080fd5b506009543314612b9857600080fd5b600435600955005b63fc0c546a6000511415612bc7573415612bb957600080fd5b60005460005260206000f350005b63047fc9aa6000511415612bee573415612be057600080fd5b60015460005260206000f350005b630f41e0d26000511415612c15573415612c0757600080fd5b60025460005260206000f350005b63cbf9fe5f6000511415612c9e573415612c2e57600080fd5b6004356020518110612c3f57600080fd5b50610140808080600360043560e05260c052604060c02060c052602060c020548152505060208101905080806001600360043560e05260c052604060c02060c052602060c02001548152505060409050905060c05260c051610140f350005b63900cf0cf6000511415612cc5573415612cb757600080fd5b60045460005260206000f350005b63d1febfb96000511415612de8573415612cde57600080fd5b6101408080806004356c01431e0fae6d7217caa00000008110612d0057600080fd5b600560c052602060c0200160c052602060c0205481525050602081019050808060016004356c01431e0fae6d7217caa00000008110612d3e57600080fd5b600560c052602060c0200160c052602060c020015481525050602081019050808060026004356c01431e0fae6d7217caa00000008110612d7d57600080fd5b600560c052602060c0200160c052602060c020015481525050602081019050808060036004356c01431e0fae6d7217caa00000008110612dbc57600080fd5b600560c052602060c0200160c052602060c02001548152505060809050905060c05260c051610140f350005b6328d09d476000511415612f31573415612e0157600080fd5b6004356020518110612e1257600080fd5b50610140808080602435633b9aca008110612e2c57600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c020548152505060208101905080806001602435633b9aca008110612e6f57600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060208101905080806002602435633b9aca008110612eb357600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060208101905080806003602435633b9aca008110612ef757600080fd5b600660043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060809050905060c05260c051610140f350005b63010ae7576000511415612f78573415612f4a57600080fd5b6004356020518110612f5b57600080fd5b50600760043560e05260c052604060c0205460005260206000f350005b63711974846000511415612fad573415612f9157600080fd5b600860043560e05260c052604060c0205460005260206000f350005b63f77c47916000511415612fd4573415612fc657600080fd5b60095460005260206000f350005b63bef97c876000511415612ffb573415612fed57600080fd5b600a5460005260206000f350005b6306fdde0360005114156130af57341561301457600080fd5b600b8060c052602060c020610180602082540161012060006003818352015b8261012051602002111561304657613068565b61012051850154610120516020028501525b8151600101808352811415613033575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b6395d89b4160005114156131635734156130c857600080fd5b600c8060c052602060c020610180602082540161012060006002818352015b826101205160200211156130fa5761311c565b61012051850154610120516020028501525b81516001018083528114156130e7575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b6354fd4d50600051141561321757341561317c57600080fd5b600d8060c052602060c020610180602082540161012060006002818352015b826101205160200211156131ae576131d0565b61012051850154610120516020028501525b815160010180835281141561319b575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b63313ce567600051141561323e57341561323057600080fd5b600e5460005260206000f350005b638ff36fd1600051141561326557341561325757600080fd5b600f5460005260206000f350005b637175d4f7600051141561328c57341561327e57600080fd5b60105460005260206000f350005b63f851a44060005114156132b35734156132a557600080fd5b60115460005260206000f350005b6317f7182a60005114156132da5734156132cc57600080fd5b60125460005260206000f350005b5b60006000fd

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

0000000000000000000000002ba592f78db6436527729929aaf6c908497cb200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000008696365435245414d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008696365435245414d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e696365435245414d5f312e302e30000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : token_addr (address): 0x2ba592F78dB6436527729929AAf6c908497cB200
Arg [1] : _name (string): iceCREAM
Arg [2] : _symbol (string): iceCREAM
Arg [3] : _version (string): iceCREAM_1.0.0

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000002ba592f78db6436527729929aaf6c908497cb200
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 696365435245414d000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 696365435245414d000000000000000000000000000000000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [9] : 696365435245414d5f312e302e30000000000000000000000000000000000000


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.