ETH Price: $3,247.75 (+2.42%)
Gas: 2 Gwei

Contract

0x79a8C46DeA5aDa233ABaFFD40F3A0A2B1e5A4F27
 
Transaction Hash
Method
Block
From
To
Exchange_underly...198973612024-05-18 14:15:2368 days ago1716041723IN
Curve.fi: BUSD Swap
0 ETH0.004928673.65079995
Exchange_underly...198972892024-05-18 14:00:5968 days ago1716040859IN
Curve.fi: BUSD Swap
0 ETH0.002865994.00886659
Exchange_underly...185938752023-11-17 20:07:23251 days ago1700251643IN
Curve.fi: BUSD Swap
0 ETH0.0146721630
Remove_liquidity179203212023-08-15 12:44:11345 days ago1692103451IN
Curve.fi: BUSD Swap
0 ETH0.0053761425.33719664
Remove_liquidity178708012023-08-08 14:28:23352 days ago1691504903IN
Curve.fi: BUSD Swap
0 ETH0.0060359428.45159479
Remove_liquidity178190622023-08-01 8:49:23360 days ago1690879763IN
Curve.fi: BUSD Swap
0 ETH0.0033628615.84789856
Exchange178091892023-07-30 23:42:59361 days ago1690760579IN
Curve.fi: BUSD Swap
0 ETH0.0077225414.87481359
Remove_liquidity178089422023-07-30 22:52:59361 days ago1690757579IN
Curve.fi: BUSD Swap
0 ETH0.0035498116.72326161
Add_liquidity170374922023-04-13 8:32:59470 days ago1681374779IN
Curve.fi: BUSD Swap
0 ETH0.0245699838.35374394
Exchange_underly...169722372023-04-04 1:11:35479 days ago1680570695IN
Curve.fi: BUSD Swap
0 ETH0.0138611718.77955411
Exchange_underly...168240352023-03-14 5:12:59500 days ago1678770779IN
Curve.fi: BUSD Swap
0 ETH0.016374122.02566839
Exchange_underly...168053042023-03-11 14:01:47502 days ago1678543307IN
Curve.fi: BUSD Swap
0 ETH0.0426140157.278821
Exchange_underly...168049552023-03-11 12:50:59502 days ago1678539059IN
Curve.fi: BUSD Swap
0 ETH0.0374436548.25344437
Exchange_underly...166186602023-02-13 8:31:59529 days ago1676277119IN
Curve.fi: BUSD Swap
0 ETH0.0123339115.91659329
Exchange_underly...163011182022-12-31 0:18:59573 days ago1672445939IN
Curve.fi: BUSD Swap
0 ETH0.0192608424.94983541
Exchange_underly...162482052022-12-23 15:05:59580 days ago1671807959IN
Curve.fi: BUSD Swap
0 ETH0.0139828614.6410565
Exchange_underly...160099532022-11-20 8:12:11614 days ago1668931931IN
Curve.fi: BUSD Swap
0 ETH0.0079888210.38381661
Exchange_underly...159695542022-11-14 16:45:23619 days ago1668444323IN
Curve.fi: BUSD Swap
0 ETH0.0136880117.91091024
Exchange_underly...159554672022-11-12 17:36:11621 days ago1668274571IN
Curve.fi: BUSD Swap
0 ETH0.010240613.30194478
Exchange_underly...159371222022-11-10 4:05:59624 days ago1668053159IN
Curve.fi: BUSD Swap
0 ETH0.0184795724.33280669
Exchange_underly...159313272022-11-09 8:37:23625 days ago1667983043IN
Curve.fi: BUSD Swap
0 ETH0.0181647623.95161732
Exchange_underly...158452072022-10-28 7:57:11637 days ago1666943831IN
Curve.fi: BUSD Swap
0 ETH0.0088021611.40165877
Exchange_underly...157628602022-10-16 19:47:35648 days ago1665949655IN
Curve.fi: BUSD Swap
0 ETH0.0114748315.08959451
Exchange_underly...156863952022-10-06 3:31:47659 days ago1665027107IN
Curve.fi: BUSD Swap
0 ETH0.008684819.20888308
Exchange_underly...156008422022-09-24 4:30:59671 days ago1663993859IN
Curve.fi: BUSD Swap
0 ETH0.003871875.232699
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.1.0b16

Optimization Enabled:
N/A

Other Settings:
None license

Contract Source Code (Vyper language format)

# (c) Curve.Fi, 2020


# External Contracts
contract ERC20m:
    def totalSupply() -> uint256: constant
    def allowance(_owner: address, _spender: address) -> uint256: constant
    def transfer(_to: address, _value: uint256) -> bool: modifying
    def transferFrom(_from: address, _to: address, _value: uint256) -> bool: modifying
    def approve(_spender: address, _value: uint256) -> bool: modifying
    def mint(_to: address, _value: uint256): modifying
    def burn(_value: uint256): modifying
    def burnFrom(_to: address, _value: uint256): modifying
    def name() -> string[64]: constant
    def symbol() -> string[32]: constant
    def decimals() -> uint256: constant
    def balanceOf(arg0: address) -> uint256: constant
    def set_minter(_minter: address): modifying



# External Contracts
contract yERC20:
    def totalSupply() -> uint256: constant
    def allowance(_owner: address, _spender: address) -> uint256: constant
    def transfer(_to: address, _value: uint256) -> bool: modifying
    def transferFrom(_from: address, _to: address, _value: uint256) -> bool: modifying
    def approve(_spender: address, _value: uint256) -> bool: modifying
    def name() -> string[64]: constant
    def symbol() -> string[32]: constant
    def decimals() -> uint256: constant
    def balanceOf(arg0: address) -> uint256: constant
    def deposit(depositAmount: uint256): modifying
    def withdraw(withdrawTokens: uint256): modifying
    def getPricePerFullShare() -> uint256: constant


from vyper.interfaces import ERC20

# Tether transfer-only ABI
contract USDT:
    def transfer(_to: address, _value: uint256): modifying
    def transferFrom(_from: address, _to: address, _value: uint256): modifying

# This can (and needs to) be changed at compile time
N_COINS: constant(int128) = 4  # <- change

ZERO256: constant(uint256) = 0  # This hack is really bad XXX
ZEROS: constant(uint256[N_COINS]) = [ZERO256, ZERO256, ZERO256, ZERO256]  # <- change

TETHERED: constant(bool[N_COINS]) = [False, False, True, False]

FEE_DENOMINATOR: constant(uint256) = 10 ** 10
PRECISION: constant(uint256) = 10 ** 18  # The precision to convert to
PRECISION_MUL: constant(uint256[N_COINS]) = [convert(1, uint256), convert(1000000000000, uint256), convert(1000000000000, uint256), convert(1, uint256)]
# PRECISION_MUL: constant(uint256[N_COINS]) = [
#     PRECISION / convert(10 ** 18, uint256),  # DAI
#     PRECISION / convert(10 ** 6, uint256),   # USDC
#     PRECISION / convert(10 ** 6, uint256),   # USDT
#     PRECISION / convert(10 ** 18, uint256)]  # TUSD

admin_actions_delay: constant(uint256) = 3 * 86400

# Events
TokenExchange: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256})
TokenExchangeUnderlying: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256})
AddLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256})
RemoveLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], token_supply: uint256})
RemoveLiquidityImbalance: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256})
CommitNewAdmin: event({deadline: indexed(timestamp), admin: indexed(address)})
NewAdmin: event({admin: indexed(address)})
CommitNewParameters: event({deadline: indexed(timestamp), A: uint256, fee: uint256, admin_fee: uint256})
NewParameters: event({A: uint256, fee: uint256, admin_fee: uint256})

coins: public(address[N_COINS])
underlying_coins: public(address[N_COINS])
balances: public(uint256[N_COINS])
A: public(uint256)  # 2 x amplification coefficient
fee: public(uint256)  # fee * 1e10
admin_fee: public(uint256)  # admin_fee * 1e10

max_admin_fee: constant(uint256) = 5 * 10 ** 9
max_fee: constant(uint256) = 5 * 10 ** 9
max_A: constant(uint256) = 10 ** 6

owner: public(address)
token: ERC20m

admin_actions_deadline: public(timestamp)
transfer_ownership_deadline: public(timestamp)
future_A: public(uint256)
future_fee: public(uint256)
future_admin_fee: public(uint256)
future_owner: public(address)

kill_deadline: timestamp
kill_deadline_dt: constant(uint256) = 2 * 30 * 86400
is_killed: bool


@public
def __init__(_coins: address[N_COINS], _underlying_coins: address[N_COINS],
             _pool_token: address,
             _A: uint256, _fee: uint256):
    """
    _coins: Addresses of ERC20 contracts of coins (y-tokens) involved
    _underlying_coins: Addresses of plain coins (ERC20)
    _pool_token: Address of the token representing LP share
    _A: Amplification coefficient multiplied by n * (n - 1)
    _fee: Fee to charge for exchanges
    """
    for i in range(N_COINS):
        assert _coins[i] != ZERO_ADDRESS
        assert _underlying_coins[i] != ZERO_ADDRESS
        self.balances[i] = 0
    self.coins = _coins
    self.underlying_coins = _underlying_coins
    self.A = _A
    self.fee = _fee
    self.admin_fee = 0
    self.owner = msg.sender
    self.kill_deadline = block.timestamp + kill_deadline_dt
    self.is_killed = False
    self.token = ERC20m(_pool_token)


@private
@constant
def _stored_rates() -> uint256[N_COINS]:
    result: uint256[N_COINS] = PRECISION_MUL
    for i in range(N_COINS):
        result[i] *= yERC20(self.coins[i]).getPricePerFullShare()
    return result


@private
@constant
def _xp(rates: uint256[N_COINS]) -> uint256[N_COINS]:
    result: uint256[N_COINS] = rates
    for i in range(N_COINS):
        result[i] = result[i] * self.balances[i] / PRECISION
    return result


@private
@constant
def _xp_mem(rates: uint256[N_COINS], _balances: uint256[N_COINS]) -> uint256[N_COINS]:
    result: uint256[N_COINS] = rates
    for i in range(N_COINS):
        result[i] = result[i] * _balances[i] / PRECISION
    return result


@private
@constant
def get_D(xp: uint256[N_COINS]) -> uint256:
    S: uint256 = 0
    for _x in xp:
        S += _x
    if S == 0:
        return 0

    Dprev: uint256 = 0
    D: uint256 = S
    Ann: uint256 = self.A * N_COINS
    for _i in range(255):
        D_P: uint256 = D
        for _x in xp:
            D_P = D_P * D / (_x * N_COINS + 1)  # +1 is to prevent /0
        Dprev = D
        D = (Ann * S + D_P * N_COINS) * D / ((Ann - 1) * D + (N_COINS + 1) * D_P)
        # Equality with the precision of 1
        if D > Dprev:
            if D - Dprev <= 1:
                break
        else:
            if Dprev - D <= 1:
                break
    return D


@private
@constant
def get_D_mem(rates: uint256[N_COINS], _balances: uint256[N_COINS]) -> uint256:
    return self.get_D(self._xp_mem(rates, _balances))


@public
@constant
def get_virtual_price() -> uint256:
    """
    Returns portfolio virtual price (for calculating profit)
    scaled up by 1e18
    """
    D: uint256 = self.get_D(self._xp(self._stored_rates()))
    # D is in the units similar to DAI (e.g. converted to precision 1e18)
    # When balanced, D = n * x_u - total virtual value of the portfolio
    token_supply: uint256 = self.token.totalSupply()
    return D * PRECISION / token_supply


@public
@constant
def calc_token_amount(amounts: uint256[N_COINS], deposit: bool) -> uint256:
    """
    Simplified method to calculate addition or reduction in token supply at
    deposit or withdrawal without taking fees into account (but looking at
    slippage).
    Needed to prevent front-running, not for precise calculations!
    """
    _balances: uint256[N_COINS] = self.balances
    rates: uint256[N_COINS] = self._stored_rates()
    D0: uint256 = self.get_D_mem(rates, _balances)
    for i in range(N_COINS):
        if deposit:
            _balances[i] += amounts[i]
        else:
            _balances[i] -= amounts[i]
    D1: uint256 = self.get_D_mem(rates, _balances)
    token_amount: uint256 = self.token.totalSupply()
    diff: uint256 = 0
    if deposit:
        diff = D1 - D0
    else:
        diff = D0 - D1
    return diff * token_amount / D0


@public
@nonreentrant('lock')
def add_liquidity(amounts: uint256[N_COINS], min_mint_amount: uint256):
    # Amounts is amounts of c-tokens
    assert not self.is_killed

    fees: uint256[N_COINS] = ZEROS
    _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1))
    _admin_fee: uint256 = self.admin_fee

    token_supply: uint256 = self.token.totalSupply()
    rates: uint256[N_COINS] = self._stored_rates()
    # Initial invariant
    D0: uint256 = 0
    old_balances: uint256[N_COINS] = self.balances
    if token_supply > 0:
        D0 = self.get_D_mem(rates, old_balances)
    new_balances: uint256[N_COINS] = old_balances

    for i in range(N_COINS):
        if token_supply == 0:
            assert amounts[i] > 0
        # balances store amounts of c-tokens
        new_balances[i] = old_balances[i] + amounts[i]

    # Invariant after change
    D1: uint256 = self.get_D_mem(rates, new_balances)
    assert D1 > D0

    # We need to recalculate the invariant accounting for fees
    # to calculate fair user's share
    D2: uint256 = D1
    if token_supply > 0:
        # Only account for fees if we are not the first to deposit
        for i in range(N_COINS):
            ideal_balance: uint256 = D1 * old_balances[i] / D0
            difference: uint256 = 0
            if ideal_balance > new_balances[i]:
                difference = ideal_balance - new_balances[i]
            else:
                difference = new_balances[i] - ideal_balance
            fees[i] = _fee * difference / FEE_DENOMINATOR
            self.balances[i] = new_balances[i] - fees[i] * _admin_fee / FEE_DENOMINATOR
            new_balances[i] -= fees[i]
        D2 = self.get_D_mem(rates, new_balances)
    else:
        self.balances = new_balances

    # Calculate, how much pool tokens to mint
    mint_amount: uint256 = 0
    if token_supply == 0:
        mint_amount = D1  # Take the dust if there was any
    else:
        mint_amount = token_supply * (D2 - D0) / D0

    assert mint_amount >= min_mint_amount, "Slippage screwed you"

    # Take coins from the sender
    for i in range(N_COINS):
        assert_modifiable(
            yERC20(self.coins[i]).transferFrom(msg.sender, self, amounts[i]))


    # Mint pool tokens
    self.token.mint(msg.sender, mint_amount)

    log.AddLiquidity(msg.sender, amounts, fees, D1, token_supply + mint_amount)


@private
@constant
def get_y(i: int128, j: int128, x: uint256, _xp: uint256[N_COINS]) -> uint256:
    # x in the input is converted to the same price/precision

    assert (i != j) and (i >= 0) and (j >= 0) and (i < N_COINS) and (j < N_COINS)

    D: uint256 = self.get_D(_xp)
    c: uint256 = D
    S_: uint256 = 0
    Ann: uint256 = self.A * N_COINS

    _x: uint256 = 0
    for _i in range(N_COINS):
        if _i == i:
            _x = x
        elif _i != j:
            _x = _xp[_i]
        else:
            continue
        S_ += _x
        c = c * D / (_x * N_COINS)
    c = c * D / (Ann * N_COINS)
    b: uint256 = S_ + D / Ann  # - D
    y_prev: uint256 = 0
    y: uint256 = D
    for _i in range(255):
        y_prev = y
        y = (y*y + c) / (2 * y + b - D)
        # Equality with the precision of 1
        if y > y_prev:
            if y - y_prev <= 1:
                break
        else:
            if y_prev - y <= 1:
                break
    return y


@public
@constant
def get_dy(i: int128, j: int128, dx: uint256) -> uint256:
    # dx and dy in c-units
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)

    x: uint256 = xp[i] + dx * rates[i] / PRECISION
    y: uint256 = self.get_y(i, j, x, xp)
    dy: uint256 = (xp[j] - y) * PRECISION / rates[j]
    _fee: uint256 = self.fee * dy / FEE_DENOMINATOR
    return dy - _fee


@public
@constant
def get_dx(i: int128, j: int128, dy: uint256) -> uint256:
    # dx and dy in c-units
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)

    y: uint256 = xp[j] - (dy * FEE_DENOMINATOR / (FEE_DENOMINATOR - self.fee)) * rates[j] / PRECISION
    x: uint256 = self.get_y(j, i, y, xp)
    dx: uint256 = (x - xp[i]) * PRECISION / rates[i]
    return dx


@public
@constant
def get_dy_underlying(i: int128, j: int128, dx: uint256) -> uint256:
    # dx and dy in underlying units
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)
    precisions: uint256[N_COINS] = PRECISION_MUL

    x: uint256 = xp[i] + dx * precisions[i]
    y: uint256 = self.get_y(i, j, x, xp)
    dy: uint256 = (xp[j] - y) / precisions[j]
    _fee: uint256 = self.fee * dy / FEE_DENOMINATOR
    return dy - _fee


@public
@constant
def get_dx_underlying(i: int128, j: int128, dy: uint256) -> uint256:
    # dx and dy in underlying units
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)
    precisions: uint256[N_COINS] = PRECISION_MUL

    y: uint256 = xp[j] - (dy * FEE_DENOMINATOR / (FEE_DENOMINATOR - self.fee)) * precisions[j]
    x: uint256 = self.get_y(j, i, y, xp)
    dx: uint256 = (x - xp[i]) / precisions[i]
    return dx


@private
def _exchange(i: int128, j: int128, dx: uint256, rates: uint256[N_COINS]) -> uint256:
    assert not self.is_killed
    # dx and dy are in c-tokens

    xp: uint256[N_COINS] = self._xp(rates)

    x: uint256 = xp[i] + dx * rates[i] / PRECISION
    y: uint256 = self.get_y(i, j, x, xp)
    dy: uint256 = xp[j] - y
    dy_fee: uint256 = dy * self.fee / FEE_DENOMINATOR
    dy_admin_fee: uint256 = dy_fee * self.admin_fee / FEE_DENOMINATOR
    self.balances[i] = x * PRECISION / rates[i]
    self.balances[j] = (y + (dy_fee - dy_admin_fee)) * PRECISION / rates[j]

    _dy: uint256 = (dy - dy_fee) * PRECISION / rates[j]

    return _dy


@public
@nonreentrant('lock')
def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256):
    rates: uint256[N_COINS] = self._stored_rates()
    dy: uint256 = self._exchange(i, j, dx, rates)
    assert dy >= min_dy, "Exchange resulted in fewer coins than expected"

    assert_modifiable(yERC20(self.coins[i]).transferFrom(msg.sender, self, dx))

    assert_modifiable(yERC20(self.coins[j]).transfer(msg.sender, dy))

    log.TokenExchange(msg.sender, i, dx, j, dy)


@public
@nonreentrant('lock')
def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256):
    rates: uint256[N_COINS] = self._stored_rates()
    precisions: uint256[N_COINS] = PRECISION_MUL
    rate_i: uint256 = rates[i] / precisions[i]
    rate_j: uint256 = rates[j] / precisions[j]
    dx_: uint256 = dx * PRECISION / rate_i

    dy_: uint256 = self._exchange(i, j, dx_, rates)
    dy: uint256 = dy_ * rate_j / PRECISION
    assert dy >= min_dy, "Exchange resulted in fewer coins than expected"
    tethered: bool[N_COINS] = TETHERED

    if tethered[i]:
        USDT(self.underlying_coins[i]).transferFrom(msg.sender, self, dx)
    else:
        assert_modifiable(ERC20(self.underlying_coins[i])\
            .transferFrom(msg.sender, self, dx))
    ERC20(self.underlying_coins[i]).approve(self.coins[i], dx)
    yERC20(self.coins[i]).deposit(dx)
    yERC20(self.coins[j]).withdraw(dy_)

    # y-tokens calculate imprecisely - use all available
    dy = ERC20(self.underlying_coins[j]).balanceOf(self)
    assert dy >= min_dy, "Exchange resulted in fewer coins than expected"

    if tethered[j]:
        USDT(self.underlying_coins[j]).transfer(msg.sender, dy)
    else:
        assert_modifiable(ERC20(self.underlying_coins[j])\
            .transfer(msg.sender, dy))


    log.TokenExchangeUnderlying(msg.sender, i, dx, j, dy)


@public
@nonreentrant('lock')
def remove_liquidity(_amount: uint256, min_amounts: uint256[N_COINS]):
    total_supply: uint256 = self.token.totalSupply()
    amounts: uint256[N_COINS] = ZEROS
    fees: uint256[N_COINS] = ZEROS

    for i in range(N_COINS):
        value: uint256 = self.balances[i] * _amount / total_supply
        assert value >= min_amounts[i], "Withdrawal resulted in fewer coins than expected"
        self.balances[i] -= value
        amounts[i] = value
        assert_modifiable(yERC20(self.coins[i]).transfer(
            msg.sender, value))

    self.token.burnFrom(msg.sender, _amount)  # Will raise if not enough

    log.RemoveLiquidity(msg.sender, amounts, fees, total_supply - _amount)


@public
@nonreentrant('lock')
def remove_liquidity_imbalance(amounts: uint256[N_COINS], max_burn_amount: uint256):
    assert not self.is_killed

    token_supply: uint256 = self.token.totalSupply()
    assert token_supply > 0
    _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1))
    _admin_fee: uint256 = self.admin_fee
    rates: uint256[N_COINS] = self._stored_rates()

    old_balances: uint256[N_COINS] = self.balances
    new_balances: uint256[N_COINS] = old_balances
    D0: uint256 = self.get_D_mem(rates, old_balances)
    for i in range(N_COINS):
        new_balances[i] -= amounts[i]
    D1: uint256 = self.get_D_mem(rates, new_balances)
    fees: uint256[N_COINS] = ZEROS
    for i in range(N_COINS):
        ideal_balance: uint256 = D1 * old_balances[i] / D0
        difference: uint256 = 0
        if ideal_balance > new_balances[i]:
            difference = ideal_balance - new_balances[i]
        else:
            difference = new_balances[i] - ideal_balance
        fees[i] = _fee * difference / FEE_DENOMINATOR
        self.balances[i] = new_balances[i] - fees[i] * _admin_fee / FEE_DENOMINATOR
        new_balances[i] -= fees[i]
    D2: uint256 = self.get_D_mem(rates, new_balances)

    token_amount: uint256 = (D0 - D2) * token_supply / D0
    assert token_amount > 0
    assert token_amount <= max_burn_amount, "Slippage screwed you"

    for i in range(N_COINS):
        assert_modifiable(yERC20(self.coins[i]).transfer(msg.sender, amounts[i]))
    self.token.burnFrom(msg.sender, token_amount)  # Will raise if not enough

    log.RemoveLiquidityImbalance(msg.sender, amounts, fees, D1, token_supply - token_amount)


### Admin functions ###
@public
def commit_new_parameters(amplification: uint256,
                          new_fee: uint256,
                          new_admin_fee: uint256):
    assert msg.sender == self.owner
    assert self.admin_actions_deadline == 0
    assert new_admin_fee <= max_admin_fee
    assert new_fee <= max_fee
    assert amplification <= max_A

    _deadline: timestamp = block.timestamp + admin_actions_delay
    self.admin_actions_deadline = _deadline
    self.future_A = amplification
    self.future_fee = new_fee
    self.future_admin_fee = new_admin_fee

    log.CommitNewParameters(_deadline, amplification, new_fee, new_admin_fee)


@public
def apply_new_parameters():
    assert msg.sender == self.owner
    assert self.admin_actions_deadline <= block.timestamp\
        and self.admin_actions_deadline > 0

    self.admin_actions_deadline = 0
    _A: uint256 = self.future_A
    _fee: uint256 = self.future_fee
    _admin_fee: uint256 = self.future_admin_fee
    self.A = _A
    self.fee = _fee
    self.admin_fee = _admin_fee

    log.NewParameters(_A, _fee, _admin_fee)


@public
def revert_new_parameters():
    assert msg.sender == self.owner

    self.admin_actions_deadline = 0


@public
def commit_transfer_ownership(_owner: address):
    assert msg.sender == self.owner
    assert self.transfer_ownership_deadline == 0

    _deadline: timestamp = block.timestamp + admin_actions_delay
    self.transfer_ownership_deadline = _deadline
    self.future_owner = _owner

    log.CommitNewAdmin(_deadline, _owner)


@public
def apply_transfer_ownership():
    assert msg.sender == self.owner
    assert block.timestamp >= self.transfer_ownership_deadline\
        and self.transfer_ownership_deadline > 0

    self.transfer_ownership_deadline = 0
    _owner: address = self.future_owner
    self.owner = _owner

    log.NewAdmin(_owner)


@public
def revert_transfer_ownership():
    assert msg.sender == self.owner

    self.transfer_ownership_deadline = 0


@public
def withdraw_admin_fees():
    assert msg.sender == self.owner
    _precisions: uint256[N_COINS] = PRECISION_MUL

    for i in range(N_COINS):
        c: address = self.coins[i]
        value: uint256 = yERC20(c).balanceOf(self) - self.balances[i]
        if value > 0:
            assert_modifiable(yERC20(c).transfer(msg.sender, value))


@public
def kill_me():
    assert msg.sender == self.owner
    assert self.kill_deadline > block.timestamp
    self.is_killed = True


@public
def unkill_me():
    assert msg.sender == self.owner
    self.is_killed = False

Contract Security Audit

Contract ABI

[{"name":"TokenExchange","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"TokenExchangeUnderlying","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","name":"fees","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitNewAdmin","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitNewParameters","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewParameters","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[4]","name":"_coins"},{"type":"address[4]","name":"_underlying_coins"},{"type":"address","name":"_pool_token"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"}],"constant":false,"payable":false,"type":"constructor"},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1535185},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"deposit"}],"constant":true,"payable":false,"type":"function","gas":6067881},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":9327083},{"name":"get_dy","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":3454227},{"name":"get_dx","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":3454232},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":3454087},{"name":"get_dx_underlying","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":3454093},{"name":"exchange","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":7030208},{"name":"exchange_underlying","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":7050181},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"constant":false,"payable":false,"type":"function","gas":240409},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":9326310},{"name":"commit_new_parameters","outputs":[],"inputs":[{"type":"uint256","name":"amplification"},{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_admin_fee"}],"constant":false,"payable":false,"type":"function","gas":146075},{"name":"apply_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":133482},{"name":"revert_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21805},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"constant":false,"payable":false,"type":"function","gas":74482},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":60538},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21895},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22667},{"name":"kill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":37848},{"name":"unkill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21985},{"name":"coins","outputs":[{"type":"address","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2160},{"name":"underlying_coins","outputs":[{"type":"address","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2190},{"name":"balances","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2220},{"name":"A","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2051},{"name":"fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2081},{"name":"admin_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2111},{"name":"owner","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2141},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","unit":"sec","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2171},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","unit":"sec","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2201},{"name":"future_A","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2231},{"name":"future_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2261},{"name":"future_admin_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2291},{"name":"future_owner","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2321}]

740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526101606157436101403934156100a257600080fd5b602061574360c03960c05160205181106100bb57600080fd5b50602060206157430160c03960c05160205181106100d857600080fd5b50602060406157430160c03960c05160205181106100f557600080fd5b50602060606157430160c03960c051602051811061011257600080fd5b50602060806157430160c03960c051602051811061012f57600080fd5b50602060a06157430160c03960c051602051811061014c57600080fd5b50602060c06157430160c03960c051602051811061016957600080fd5b50602060e06157430160c03960c051602051811061018657600080fd5b5060206101006157430160c03960c05160205181106101a457600080fd5b506102a060006004818352015b60006101406102a051600481106101c757600080fd5b6020020151186101d657600080fd5b60006101c06102a051600481106101ec57600080fd5b6020020151186101fb57600080fd5b60006102a0516004811061020e57600080fd5b600260c052602060c02001555b81516001018083528114156101b1575b5050600060c052602060c020610140805182558060200151600183015580604001516002830155806060015160038301555050600160c052602060c0206101c0805182558060200151600183015580604001516002830155806060015160038301555050610260516003556102805160045560006005553360065542624f1a008181830110156102ba57600080fd5b80820190509050600e556000600f556102405160075561572b56600436101561000d57615450565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526000156101f6575b610140526101606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101e060006004818352015b6101606101e051600481106100f257600080fd5b6020020180516101e0516004811061010957600080fd5b600060c052602060c02001543b61011f57600080fd5b6101e0516004811061013057600080fd5b600060c052602060c0200154301861014757600080fd5b602061026060046377c7b8fc6102005261021c6101e0516004811061016b57600080fd5b600060c052602060c02001545afa61018257600080fd5b60005061026051808202821582848304141761019d57600080fd5b809050905090508152505b81516001018083528114156100de575b50506080610280525b6000610280511115156101d3576101ef565b60206102805103610160015160206102805103610280526101c1565b6101405156005b60001561031b575b6101c0526101405261016052610180526101a0526101e061014080518252806020015182602001528060400151826040015280606001518260600152505061026060006004818352015b6101e0610260516004811061025c57600080fd5b6020020151610260516004811061027257600080fd5b600260c052602060c0200154808202821582848304141761029257600080fd5b80905090509050670de0b6b3a764000080806102ad57600080fd5b8204905090506101e061026051600481106102c757600080fd5b60200201525b8151600101808352811415610248575b50506080610280525b6000610280511115156102f857610314565b602061028051036101e0015160206102805103610280526102e6565b6101c05156005b60001561044c575b610240526101405261016052610180526101a0526101c0526101e05261020052610220526102606101408051825280602001518260200152806040015182604001528060600151826060015250506102e060006004818352015b6102606102e0516004811061039157600080fd5b60200201516101c06102e051600481106103aa57600080fd5b602002015180820282158284830414176103c357600080fd5b80905090509050670de0b6b3a764000080806103de57600080fd5b8204905090506102606102e051600481106103f857600080fd5b60200201525b815160010180835281141561037d575b50506080610300525b60006103005111151561042957610445565b6020610300510361026001516020610300510361030052610417565b6102405156005b600015610751575b6101c0526101405261016052610180526101a05260006101e05261022060006004818352015b602061022051026101400151610200526101e08051610200518181830110156104a257600080fd5b808201905090508152505b815160010180835281141561047a575b50506101e05115156104d85760006000526000516101c05156505b6000610260526101e05161028052600354600480820282158284830414176104ff57600080fd5b809050905090506102a0526102c0600060ff818352015b610280516102e05261032060006004818352015b602061032051026101400151610300526102e05161028051808202821582848304141761055657600080fd5b80905090509050610300516004808202821582848304141761057757600080fd5b80905090509050600181818301101561058f57600080fd5b8082019050905080806105a157600080fd5b8204905090506102e0525b815160010180835281141561052a575b505061028051610260526102a0516101e05180820282158284830414176105e257600080fd5b809050905090506102e0516004808202821582848304141761060357600080fd5b8090509050905081818301101561061957600080fd5b8082019050905061028051808202821582848304141761063857600080fd5b809050905090506102a05160018082101561065257600080fd5b8082039050905061028051808202821582848304141761067157600080fd5b8090509050905060056102e051808202821582848304141761069257600080fd5b809050905090508181830110156106a857600080fd5b8082019050905080806106ba57600080fd5b82049050905061028052610260516102805111156107015760016102805161026051808210156106e957600080fd5b808203905090501115156106fc5761073d565b61072c565b600161026051610280518082101561071857600080fd5b8082039050905011151561072b5761073d565b5b5b8151600101808352811415610516575b5050610280516000526000516101c0515650005b60001561091f575b610240526101405261016052610180526101a0526101c0526101e0526102005261022052610140610660525b610660515160206106605101610660526106606106605110156107a757610785565b6305eb8fa6610680526106a0610140610460525b610460515160206104605101610460526104606104605110156107dd576107bb565b6342d3b3c3610480526104a06101408051825280602001518260200152806040015182604001528060600151826060015250506105206101c080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610323565b6105e052610600526106205261064052610440610460525b610460515260206104605103610460526101406104605110151561089e5761087b565b6105e0805182528060200151826020015280604001518260400152806060015182606001525050610700516106e0516106c0516106a05160065801610454565b61076052610640610660525b610660515260206106605103610660526101406106605110151561090d576108ea565b61076051600052600051610240515650005b63bb7b8b806000511415610b9357341561093857600080fd5b6101406106e0525b6106e0515160206106e051016106e0526106e06106e051101561096257610940565b6305eb8fa661070052610720610140610560525b6105605151602061056051016105605261056061056051101561099857610976565b631db7662b610580526105a06101406104c0525b6104c0515160206104c051016104c0526104c06104c05110156109ce576109ac565b600658016100a9565b6104e0526105005261052052610540526104a06104c0525b6104c0515260206104c051036104c0526101406104c051101515610a12576109ef565b6104e0805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a051600658016101fe565b61066052610680526106a0526106c052610540610560525b6105605152602061056051036105605261014061056051101515610a8d57610a6a565b6106608051825280602001518260200152806040015182604001528060600151826060015250506107805161076051610740516107205160065801610454565b6107e0526106c06106e0525b6106e0515260206106e051036106e0526101406106e051101515610afc57610ad9565b6107e051610140526007543b610b1157600080fd5b6007543018610b1f57600080fd5b602061088060046318160ddd6108205261083c6007545afa610b4057600080fd5b600050610880516108005261014051670de0b6b3a76400008082028215828483041417610b6c57600080fd5b80905090509050610800518080610b8257600080fd5b82049050905060005260206000f350005b63cf701ff76000511415610ff6573415610bac57600080fd5b60843560028110610bbc57600080fd5b5061014060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506101c06101405161016051610180516101a0516101c0516101e0516102005161022051600658016100a9565b61026052610280526102a0526102c05261022052610200526101e0526101c0526101a052610180526101605261014052610260805182528060200151826020015280604001518260400152806060015182606001525050610140610300525b61030051516020610300510161030052610300610300511015610cb357610c91565b631f30ab74610320526103406101c08051825280602001518260200152806040015182604001528060600151826060015250506103c061014080518252806020015182602001528060400151826040015280606001518260600152505061042051610400516103e0516103c0516103a05161038051610360516103405160065801610759565b610480526102e0610300525b6103005152602061030051036103005261014061030051101515610d6857610d45565b610480516102e0526104a060006004818352015b60843515610dd4576101406104a05160048110610d9857600080fd5b60200201805160046104a05160048110610db157600080fd5b6020020135818183011015610dc557600080fd5b80820190509050815250610e1e565b6101406104a05160048110610de857600080fd5b60200201805160046104a05160048110610e0157600080fd5b602002013580821015610e1357600080fd5b808203905090508152505b5b8151600101808352811415610d7c575b50506101406104e0525b6104e0515160206104e051016104e0526104e06104e0511015610e5b57610e39565b631f30ab74610500526105206101c08051825280602001518260200152806040015182604001528060600151826060015250506105a0610140805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a0516105805161056051610540516105205160065801610759565b610660526104c06104e0525b6104e0515260206104e051036104e0526101406104e051101515610f1057610eed565b610660516104c0526007543b610f2557600080fd5b6007543018610f3357600080fd5b602061070060046318160ddd6106a0526106bc6007545afa610f5457600080fd5b600050610700516106805260006107205260843515610f92576104c0516102e05180821015610f8257600080fd5b8082039050905061072052610fb3565b6102e0516104c05180821015610fa757600080fd5b80820390509050610720525b61072051610680518082028215828483041417610fcf57600080fd5b809050905090506102e0518080610fe557600080fd5b82049050905060005260206000f350005b63029b2f346000511415611a785762ffffff541561101357600080fd5b600162ffffff55341561102557600080fd5b600f541561103257600080fd5b61014060008152600081602001526000816040015260008160600152506004546004808202821582848304141761106857600080fd5b80905090509050600c808061107c57600080fd5b8204905090506101c0526005546101e0526007543b61109a57600080fd5b60075430186110a857600080fd5b602061028060046318160ddd6102205261023c6007545afa6110c957600080fd5b60005061028051610200526102a0610140610320525b61032051516020610320510161032052610320610320511015611101576110df565b600658016100a9565b6103405261036052610380526103a052610300610320525b610320515260206103205103610320526101406103205110151561114557611122565b61034080518252806020015182602001528060400151826040015280606001518260600152505060006103c0526103e060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006102005111156112af57610140610460525b610460515160206104605101610460526104606104605110156111f1576111cf565b631f30ab74610480526104a06102a08051825280602001518260200152806040015182604001528060600151826060015250506105206103e080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610759565b6105e052610440610460525b61046051526020610460510361046052610140610460511015156112a657611283565b6105e0516103c0525b6106006103e080518252806020015182602001528060400151826040015280606001518260600152505061068060006004818352015b6102005115156113145760006004610680516004811061130457600080fd5b60200201351161131357600080fd5b5b6103e0610680516004811061132857600080fd5b60200201516004610680516004811061134057600080fd5b602002013581818301101561135457600080fd5b80820190509050610600610680516004811061136f57600080fd5b60200201525b81516001018083528114156112e5575b50506101406106c0525b6106c0515160206106c051016106c0526106c06106c05110156113b15761138f565b631f30ab746106e0526107006102a08051825280602001518260200152806040015182604001528060600151826060015250506107806106008051825280602001518260200152806040015182604001528060600151826060015250506107e0516107c0516107a051610780516107605161074051610720516107005160065801610759565b610840526106a06106c0525b6106c0515260206106c051036106c0526101406106c05110151561146657611443565b610840516106a0526103c0516106a0511161148057600080fd5b6106a0516108605260006102005111156117bf5761088060006004818352015b6106a0516103e061088051600481106114b857600080fd5b602002015180820282158284830414176114d157600080fd5b809050905090506103c05180806114e757600080fd5b8204905090506108a05260006108c052610600610880516004811061150b57600080fd5b60200201516108a0511115611554576108a051610600610880516004811061153257600080fd5b60200201518082101561154457600080fd5b808203905090506108c05261158a565b610600610880516004811061156857600080fd5b60200201516108a0518082101561157e57600080fd5b808203905090506108c0525b6101c0516108c05180820282158284830414176115a657600080fd5b809050905090506402540be40080806115be57600080fd5b82049050905061014061088051600481106115d857600080fd5b602002015261060061088051600481106115f157600080fd5b6020020151610140610880516004811061160a57600080fd5b60200201516101e051808202821582848304141761162757600080fd5b809050905090506402540be400808061163f57600080fd5b8204905090508082101561165257600080fd5b80820390509050610880516004811061166a57600080fd5b600260c052602060c0200155610600610880516004811061168a57600080fd5b60200201805161014061088051600481106116a457600080fd5b6020020151808210156116b657600080fd5b808203905090508152505b81516001018083528114156114a0575b50506101406108e0525b6108e0515160206108e051016108e0526108806108e05110156116fd576116db565b631f30ab74610900526109206102a08051825280602001518260200152806040015182604001528060600151826060015250506109a0610600805182528060200151826020015280604001518260400152806060015182606001525050610a00516109e0516109c0516109a0516109805161096051610940516109205160065801610759565b610a60526108606108e0525b6108e0515260206108e051036108e0526101406108e0511015156117b25761178f565b610a6051610860526117f1565b600260c052602060c0206106008051825580602001516001830155806040015160028301558060600151600383015550505b6000610a805261020051151561180e576106a051610a8052611863565b61020051610860516103c0518082101561182757600080fd5b80820390509050808202821582848304141761184257600080fd5b809050905090506103c051808061185857600080fd5b820490509050610a80525b6308c379a0610aa0526020610ac0526014610ae0527f536c697070616765207363726577656420796f75000000000000000000000000610b0052610ae050608435610a805110156118b5576084610abcfd5b610b4060006004818352015b610b4051600481106118d257600080fd5b600060c052602060c02001543b6118e857600080fd5b610b4051600481106118f957600080fd5b600060c052602060c0200154301861191057600080fd5b6020610c2060646323b872dd610b605233610b805230610ba0526004610b40516004811061193d57600080fd5b6020020135610bc052610b7c6000610b40516004811061195c57600080fd5b600060c052602060c02001545af161197357600080fd5b600050610c205161198357600080fd5b5b81516001018083528114156118c1575b50506007543b6119a357600080fd5b60075430186119b157600080fd5b6000600060446340c10f19610c405233610c6052610a8051610c8052610c5c60006007545af16119e057600080fd5b600435610ce052602435610d0052604435610d2052606435610d405261014051610d605261016051610d805261018051610da0526101a051610dc0526106a051610de05261020051610a8051818183011015611a3b57600080fd5b80820190509050610e0052337f3f1915775e0c9a38a57a7bb7f1f9005f486fb904e1f84aa215364d567319a58d610140610ce0a2600062ffffff55005b600015611e7c575b610220526101405261016052610180526101a0526101c0526101e052610200526000610140511215610160516101405114151660006101605112151660046101405112166004610160511216611ad557600080fd5b6101405161016051610180516101a0516101c0516101e0516102005161022051610240516305eb8fa6610280526102a06101a0805182528060200151826020015280604001518260400152806060015182606001525050610300516102e0516102c0516102a05160065801610454565b610360526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103605161024052610240516103805260006103a05260035460048082028215828483041417611b9c57600080fd5b809050905090506103c05260006103e05261040060006004818352015b61014051610400511415611bd457610180516103e052611c0a565b61016051610400511815611c04576101a06104005160048110611bf657600080fd5b60200201516103e052611c09565b611c86565b5b6103a080516103e051818183011015611c2257600080fd5b8082019050905081525061038051610240518082028215828483041417611c4857600080fd5b809050905090506103e05160048082028215828483041417611c6957600080fd5b809050905090508080611c7b57600080fd5b820490509050610380525b8151600101808352811415611bb9575b505061038051610240518082028215828483041417611cb457600080fd5b809050905090506103c05160048082028215828483041417611cd557600080fd5b809050905090508080611ce757600080fd5b820490509050610380526103a051610240516103c0518080611d0857600080fd5b820490509050818183011015611d1d57600080fd5b80820190509050610420526000610440526102405161046052610480600060ff818352015b610460516104405261046051610460518082028215828483041417611d6657600080fd5b8090509050905061038051818183011015611d8057600080fd5b808201905090506002610460518082028215828483041417611da157600080fd5b8090509050905061042051818183011015611dbb57600080fd5b808201905090506102405180821015611dd357600080fd5b808203905090508080611de557600080fd5b8204905090506104605261044051610460511115611e2c576001610460516104405180821015611e1457600080fd5b80820390509050111515611e2757611e68565b611e57565b6001610440516104605180821015611e4357600080fd5b80820390509050111515611e5657611e68565b5b5b8151600101808352811415611d42575b505061046051600052600051610220515650005b635e0d443f6000511415612253573415611e9557600080fd5b60605160043580604051901315611eab57600080fd5b8091901215611eb957600080fd5b5060605160243580604051901315611ed057600080fd5b8091901215611ede57600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015611f6f57611f4d565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e051101515611ff657611fd3565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606004356004811061203057600080fd5b60200201516044356101406004356004811061204b57600080fd5b6020020151808202821582848304141761206457600080fd5b80905090509050670de0b6b3a7640000808061207f57600080fd5b82049050905081818301101561209457600080fd5b80820190509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156120c9576120a7565b631e8c3fd36104c0526004356104e0526024356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611a80565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561216657612143565b61060051610480526102606024356004811061218157600080fd5b6020020151610480518082101561219757600080fd5b80820390509050670de0b6b3a764000080820282158284830414176121bb57600080fd5b80905090509050610140602435600481106121d557600080fd5b602002015180806121e557600080fd5b8204905090506106205260045461062051808202821582848304141761220a57600080fd5b809050905090506402540be400808061222257600080fd5b8204905090506106405261062051610640518082101561224157600080fd5b8082039050905060005260206000f350005b6367df02ca600051141561262257341561226c57600080fd5b6060516004358060405190131561228257600080fd5b809190121561229057600080fd5b50606051602435806040519013156122a757600080fd5b80919012156122b557600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e051101561234657612324565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156123cd576123aa565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606024356004811061240757600080fd5b60200201516044356402540be400808202821582848304141761242957600080fd5b809050905090506402540be4006004548082101561244657600080fd5b80820390509050808061245857600080fd5b8204905090506101406024356004811061247157600080fd5b6020020151808202821582848304141761248a57600080fd5b80905090509050670de0b6b3a764000080806124a557600080fd5b820490509050808210156124b857600080fd5b80820390509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156124ed576124cb565b631e8c3fd36104c0526024356104e0526004356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611a80565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561258a57612567565b610600516104805261048051610260600435600481106125a957600080fd5b6020020151808210156125bb57600080fd5b80820390509050670de0b6b3a764000080820282158284830414176125df57600080fd5b80905090509050610140600435600481106125f957600080fd5b6020020151808061260957600080fd5b820490509050610620526106205160005260206000f350005b6307211ef760005114156129e057341561263b57600080fd5b6060516004358060405190131561265157600080fd5b809190121561265f57600080fd5b506060516024358060405190131561267657600080fd5b809190121561268457600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015612715576126f3565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e05110151561279c57612779565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506104606001815264e8d4a51000816020015264e8d4a5100081604001526001816060015250610260600435600481106127fb57600080fd5b60200201516044356104606004356004811061281657600080fd5b6020020151808202821582848304141761282f57600080fd5b8090509050905081818301101561284557600080fd5b808201905090506104e052610140610520525b6105205151602061052051016105205261052061052051101561287a57612858565b631e8c3fd36105405260043561056052602435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611a80565b61068052610500610520525b6105205152602061052051036105205261014061052051101515612917576128f4565b61068051610500526102606024356004811061293257600080fd5b6020020151610500518082101561294857600080fd5b808203905090506104606024356004811061296257600080fd5b6020020151808061297257600080fd5b8204905090506106a0526004546106a051808202821582848304141761299757600080fd5b809050905090506402540be40080806129af57600080fd5b8204905090506106c0526106a0516106c051808210156129ce57600080fd5b8082039050905060005260206000f350005b630e71d1b96000511415612d965734156129f957600080fd5b60605160043580604051901315612a0f57600080fd5b8091901215612a1d57600080fd5b5060605160243580604051901315612a3457600080fd5b8091901215612a4257600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015612ad357612ab1565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e051101515612b5a57612b37565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506104606001815264e8d4a51000816020015264e8d4a510008160400152600181606001525061026060243560048110612bb957600080fd5b60200201516044356402540be4008082028215828483041417612bdb57600080fd5b809050905090506402540be40060045480821015612bf857600080fd5b808203905090508080612c0a57600080fd5b82049050905061046060243560048110612c2357600080fd5b60200201518082028215828483041417612c3c57600080fd5b8090509050905080821015612c5057600080fd5b808203905090506104e052610140610520525b61052051516020610520510161052052610520610520511015612c8557612c63565b631e8c3fd36105405260243561056052600435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611a80565b61068052610500610520525b6105205152602061052051036105205261014061052051101515612d2257612cff565b61068051610500526105005161026060043560048110612d4157600080fd5b602002015180821015612d5357600080fd5b8082039050905061046060043560048110612d6d57600080fd5b60200201518080612d7d57600080fd5b8204905090506106a0526106a05160005260206000f350005b60001561323b575b610220526101405261016052610180526101a0526101c0526101e05261020052600f5415612dcb57600080fd5b6102406101406102c0525b6102c0515160206102c051016102c0526102c06102c0511015612df857612dd6565b631db7662b6102e0526103006101a080518252806020015182602001528060400151826040015280606001518260600152505061036051610340516103205161030051600658016101fe565b6103c0526103e05261040052610420526102a06102c0525b6102c0515260206102c051036102c0526101406102c051101515612e7f57612e5c565b6103c08051825280602001518260200152806040015182604001528060600151826060015250506102406101405160048110612eba57600080fd5b6020020151610180516101a06101405160048110612ed757600080fd5b60200201518082028215828483041417612ef057600080fd5b80905090509050670de0b6b3a76400008080612f0b57600080fd5b820490509050818183011015612f2057600080fd5b8082019050905061044052610140610480525b61048051516020610480510161048052610480610480511015612f5557612f33565b631e8c3fd36104a052610140516104c052610160516104e052610440516105005261052061024080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c05160065801611a80565b6105e052610460610480525b6104805152602061048051036104805261014061048051101515612ff457612fd1565b6105e05161046052610240610160516004811061301057600080fd5b6020020151610460518082101561302657600080fd5b808203905090506106005261060051600454808202821582848304141761304c57600080fd5b809050905090506402540be400808061306457600080fd5b8204905090506106205261062051600554808202821582848304141761308957600080fd5b809050905090506402540be40080806130a157600080fd5b8204905090506106405261044051670de0b6b3a764000080820282158284830414176130cc57600080fd5b809050905090506101a061014051600481106130e757600080fd5b602002015180806130f757600080fd5b820490509050610140516004811061310e57600080fd5b600260c052602060c02001556104605161062051610640518082101561313357600080fd5b8082039050905081818301101561314957600080fd5b80820190509050670de0b6b3a7640000808202821582848304141761316d57600080fd5b809050905090506101a0610160516004811061318857600080fd5b6020020151808061319857600080fd5b82049050905061016051600481106131af57600080fd5b600260c052602060c02001556106005161062051808210156131d057600080fd5b80820390509050670de0b6b3a764000080820282158284830414176131f457600080fd5b809050905090506101a0610160516004811061320f57600080fd5b6020020151808061321f57600080fd5b8204905090506106605261066051600052600051610220515650005b633df0212460005114156135f55762ffffff541561325857600080fd5b600162ffffff55341561326a57600080fd5b6060516004358060405190131561328057600080fd5b809190121561328e57600080fd5b50606051602435806040519013156132a557600080fd5b80919012156132b357600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051632ce785a36102a0526004356102c0526024356102e0526044356103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051610300516102e0516102c05160065801612d9e565b6103e052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103e051610260526308c379a061040052602061042052602e610440527f45786368616e676520726573756c74656420696e20666577657220636f696e73610460527f207468616e20657870656374656400000000000000000000000000000000000061048052610440506064356102605110156134575760a461041cfd5b6004356004811061346757600080fd5b600060c052602060c02001543b61347d57600080fd5b6004356004811061348d57600080fd5b600060c052602060c020015430186134a457600080fd5b602061058060646323b872dd6104c052336104e0523061050052604435610520526104dc6000600435600481106134da57600080fd5b600060c052602060c02001545af16134f157600080fd5b6000506105805161350157600080fd5b6024356004811061351157600080fd5b600060c052602060c02001543b61352757600080fd5b6024356004811061353757600080fd5b600060c052602060c0200154301861354e57600080fd5b6020610640604463a9059cbb6105a052336105c052610260516105e0526105bc60006024356004811061358057600080fd5b600060c052602060c02001545af161359757600080fd5b600050610640516135a757600080fd5b60043561066052604435610680526024356106a052610260516106c052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610660a2600062ffffff55005b63a6417ed66000511415613f5a5762ffffff541561361257600080fd5b600162ffffff55341561362457600080fd5b6060516004358060405190131561363a57600080fd5b809190121561364857600080fd5b506060516024358060405190131561365f57600080fd5b809190121561366d57600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101406004356004811061370957600080fd5b60200201516102606004356004811061372157600080fd5b6020020151808061373157600080fd5b8204905090506102e0526101406024356004811061374e57600080fd5b60200201516102606024356004811061376657600080fd5b6020020151808061377657600080fd5b82049050905061030052604435670de0b6b3a764000080820282158284830414176137a057600080fd5b809050905090506102e05180806137b657600080fd5b82049050905061032052610140610360525b610360515160206103605101610360526103606103605110156137ea576137c8565b632ce785a3610380526004356103a0526024356103c052610320516103e052610400610140805182528060200151826020015280604001518260400152806060015182606001525050610460516104405161042051610400516103e0516103c0516103a05160065801612d9e565b6104c052610340610360525b610360515260206103605103610360526101406103605110151561388757613864565b6104c05161034052610340516103005180820282158284830414176138ab57600080fd5b80905090509050670de0b6b3a764000080806138c657600080fd5b8204905090506104e0526308c379a061050052602061052052602e610540527f45786368616e676520726573756c74656420696e20666577657220636f696e73610560527f207468616e20657870656374656400000000000000000000000000000000000061058052610540506064356104e05110156139475760a461051cfd5b6105c060008152600081602001526001816040015260008160600152506105c06004356004811061397757600080fd5b602002015115613a1f576004356004811061399157600080fd5b600160c052602060c02001543b6139a757600080fd5b600435600481106139b757600080fd5b600160c052602060c020015430186139ce57600080fd5b6000600060646323b872dd61072052336107405230610760526044356107805261073c600060043560048110613a0357600080fd5b600160c052602060c02001545af1613a1a57600080fd5b613aca565b60043560048110613a2f57600080fd5b600160c052602060c02001543b613a4557600080fd5b60043560048110613a5557600080fd5b600160c052602060c02001543018613a6c57600080fd5b602061070060646323b872dd61064052336106605230610680526044356106a05261065c600060043560048110613aa257600080fd5b600160c052602060c02001545af1613ab957600080fd5b60005061070051613ac957600080fd5b5b60043560048110613ada57600080fd5b600160c052602060c02001543b613af057600080fd5b60043560048110613b0057600080fd5b600160c052602060c02001543018613b1757600080fd5b6020610880604463095ea7b36107e05260043560048110613b3757600080fd5b600060c052602060c020015461080052604435610820526107fc600060043560048110613b6357600080fd5b600160c052602060c02001545af1613b7a57600080fd5b6000506108805060043560048110613b9157600080fd5b600060c052602060c02001543b613ba757600080fd5b60043560048110613bb757600080fd5b600060c052602060c02001543018613bce57600080fd5b60006000602463b6b55f256108a0526044356108c0526108bc600060043560048110613bf957600080fd5b600060c052602060c02001545af1613c1057600080fd5b60243560048110613c2057600080fd5b600060c052602060c02001543b613c3657600080fd5b60243560048110613c4657600080fd5b600060c052602060c02001543018613c5d57600080fd5b600060006024632e1a7d4d61092052610340516109405261093c600060243560048110613c8957600080fd5b600060c052602060c02001545af1613ca057600080fd5b60243560048110613cb057600080fd5b600160c052602060c02001543b613cc657600080fd5b60243560048110613cd657600080fd5b600160c052602060c02001543018613ced57600080fd5b6020610a2060246370a082316109a052306109c0526109bc60243560048110613d1557600080fd5b600160c052602060c02001545afa613d2c57600080fd5b600050610a20516104e0526308c379a0610a40526020610a6052602e610a80527f45786368616e676520726573756c74656420696e20666577657220636f696e73610aa0527f207468616e206578706563746564000000000000000000000000000000000000610ac052610a80506064356104e0511015613dae5760a4610a5cfd5b6105c060243560048110613dc157600080fd5b602002015115613e655760243560048110613ddb57600080fd5b600160c052602060c02001543b613df157600080fd5b60243560048110613e0157600080fd5b600160c052602060c02001543018613e1857600080fd5b60006000604463a9059cbb610bc05233610be0526104e051610c0052610bdc600060243560048110613e4957600080fd5b600160c052602060c02001545af1613e6057600080fd5b613f0c565b60243560048110613e7557600080fd5b600160c052602060c02001543b613e8b57600080fd5b60243560048110613e9b57600080fd5b600160c052602060c02001543018613eb257600080fd5b6020610ba0604463a9059cbb610b005233610b20526104e051610b4052610b1c600060243560048110613ee457600080fd5b600160c052602060c02001545af1613efb57600080fd5b600050610ba051613f0b57600080fd5b5b600435610c6052604435610c8052602435610ca0526104e051610cc052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b6080610c60a2600062ffffff55005b637d49d87560005114156142e25762ffffff5415613f7757600080fd5b600162ffffff553415613f8957600080fd5b6007543b613f9657600080fd5b6007543018613fa457600080fd5b60206101c060046318160ddd6101605261017c6007545afa613fc557600080fd5b6000506101c051610140526101e0600081526000816020015260008160400152600081606001525061026060008152600081602001526000816040015260008160600152506102e060006004818352015b6102e0516004811061402757600080fd5b600260c052602060c0200154600435808202821582848304141761404a57600080fd5b8090509050905061014051808061406057600080fd5b820490509050610300526308c379a0610320526020610340526030610360527f5769746864726177616c20726573756c74656420696e20666577657220636f69610380527f6e73207468616e206578706563746564000000000000000000000000000000006103a0526103605060246102e051600481106140e057600080fd5b60200201356103005110156140f65760a461033cfd5b6102e0516004811061410757600080fd5b600260c052602060c020018054610300518082101561412557600080fd5b80820390509050815550610300516101e06102e0516004811061414757600080fd5b60200201526102e0516004811061415d57600080fd5b600060c052602060c02001543b61417357600080fd5b6102e0516004811061418457600080fd5b600060c052602060c0200154301861419b57600080fd5b6020610480604463a9059cbb6103e052336104005261030051610420526103fc60006102e051600481106141ce57600080fd5b600060c052602060c02001545af16141e557600080fd5b600050610480516141f557600080fd5b5b8151600101808352811415614016575b50506007543b61421557600080fd5b600754301861422357600080fd5b6000600060446379cc67906104a052336104c0526004356104e0526104bc60006007545af161425157600080fd5b6101e0516105405261020051610560526102205161058052610240516105a052610260516105c052610280516105e0526102a051610600526102c0516106205261014051600435808210156142a557600080fd5b8082039050905061064052337f9878ca375e106f2a43c3b599fc624568131c4c9a4ba66a14563715763be9d59d610120610540a2600062ffffff55005b6318a7bd766000511415614ca95762ffffff54156142ff57600080fd5b600162ffffff55341561431157600080fd5b600f541561431e57600080fd5b6007543b61432b57600080fd5b600754301861433957600080fd5b60206101c060046318160ddd6101605261017c6007545afa61435a57600080fd5b6000506101c051610140526000610140511161437557600080fd5b6004546004808202821582848304141761438e57600080fd5b80905090509050600c80806143a257600080fd5b8204905090506101e052600554610200526102206101406102a0525b6102a0515160206102a051016102a0526102a06102a05110156143e0576143be565b600658016100a9565b6102c0526102e05261030052610320526102806102a0525b6102a0515260206102a051036102a0526101406102a05110151561442457614401565b6102c080518252806020015182602001528060400151826040015280606001518260600152505061034060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506103c0610340805182528060200151826020015280604001518260400152806060015182606001525050610140610460525b610460515160206104605101610460526104606104605110156144e8576144c6565b631f30ab74610480526104a061022080518252806020015182602001528060400151826040015280606001518260600152505061052061034080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610759565b6105e052610440610460525b610460515260206104605103610460526101406104605110151561459d5761457a565b6105e0516104405261060060006004818352015b6103c061060051600481106145c557600080fd5b602002018051600461060051600481106145de57600080fd5b6020020135808210156145f057600080fd5b808203905090508152505b81516001018083528114156145b1575b5050610140610640525b6106405151602061064051016106405261064061064051101561463757614615565b631f30ab74610660526106806102208051825280602001518260200152806040015182604001528060600151826060015250506107006103c0805182528060200151826020015280604001518260400152806060015182606001525050610760516107405161072051610700516106e0516106c0516106a0516106805160065801610759565b6107c052610620610640525b61064051526020610640510361064052610140610640511015156146ec576146c9565b6107c051610620526107e0600081526000816020015260008160400152600081606001525061086060006004818352015b61062051610340610860516004811061473557600080fd5b6020020151808202821582848304141761474e57600080fd5b8090509050905061044051808061476457600080fd5b8204905090506108805260006108a0526103c0610860516004811061478857600080fd5b60200201516108805111156147d157610880516103c061086051600481106147af57600080fd5b6020020151808210156147c157600080fd5b808203905090506108a052614807565b6103c061086051600481106147e557600080fd5b602002015161088051808210156147fb57600080fd5b808203905090506108a0525b6101e0516108a051808202821582848304141761482357600080fd5b809050905090506402540be400808061483b57600080fd5b8204905090506107e0610860516004811061485557600080fd5b60200201526103c0610860516004811061486e57600080fd5b60200201516107e0610860516004811061488757600080fd5b60200201516102005180820282158284830414176148a457600080fd5b809050905090506402540be40080806148bc57600080fd5b820490509050808210156148cf57600080fd5b8082039050905061086051600481106148e757600080fd5b600260c052602060c02001556103c0610860516004811061490757600080fd5b6020020180516107e0610860516004811061492157600080fd5b60200201518082101561493357600080fd5b808203905090508152505b815160010180835281141561471d575b50506101406108e0525b6108e0515160206108e051016108e0526108e06108e051101561497a57614958565b631f30ab74610900526109206102208051825280602001518260200152806040015182604001528060600151826060015250506109a06103c0805182528060200151826020015280604001518260400152806060015182606001525050610a00516109e0516109c0516109a0516109805161096051610940516109205160065801610759565b610a60526108c06108e0525b6108e0515260206108e051036108e0526101406108e051101515614a2f57614a0c565b610a60516108c052610440516108c05180821015614a4c57600080fd5b80820390509050610140518082028215828483041417614a6b57600080fd5b80905090509050610440518080614a8157600080fd5b820490509050610a80526000610a805111614a9b57600080fd5b6308c379a0610aa0526020610ac0526014610ae0527f536c697070616765207363726577656420796f75000000000000000000000000610b0052610ae050608435610a80511115614aed576084610abcfd5b610b4060006004818352015b610b405160048110614b0a57600080fd5b600060c052602060c02001543b614b2057600080fd5b610b405160048110614b3157600080fd5b600060c052602060c02001543018614b4857600080fd5b6020610c00604463a9059cbb610b605233610b80526004610b405160048110614b7057600080fd5b6020020135610ba052610b7c6000610b405160048110614b8f57600080fd5b600060c052602060c02001545af1614ba657600080fd5b600050610c0051614bb657600080fd5b5b8151600101808352811415614af9575b50506007543b614bd657600080fd5b6007543018614be457600080fd5b6000600060446379cc6790610c205233610c4052610a8051610c6052610c3c60006007545af1614c1357600080fd5b600435610cc052602435610ce052604435610d0052606435610d20526107e051610d405261080051610d605261082051610d805261084051610da05261062051610dc05261014051610a805180821015614c6c57600080fd5b80820390509050610de052337fb964b72f73f5ef5bf0fdc559b2fab9a7b12a39e47817a547f1f0aee47febd602610140610cc0a2600062ffffff55005b63ee11f5b66000511415614d91573415614cc257600080fd5b6006543314614cd057600080fd5b60085415614cdd57600080fd5b64012a05f2006044351115614cf157600080fd5b64012a05f2006024351115614d0557600080fd5b620f42406004351115614d1757600080fd5b426203f480818183011015614d2b57600080fd5b808201905090506101405261014051600855600435600a55602435600b55604435600c5560043561016052602435610180526044356101a052610140517f6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f736060610160a2005b632a7dd7cd6000511415614e3e573415614daa57600080fd5b6006543314614db857600080fd5b60006008541142600854111516614dce57600080fd5b6000600855600a5461014052600b5461016052600c5461018052610140516003556101605160045561018051600555610140516101a052610160516101c052610180516101e0527f752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e60606101a0a1005b63226840fb6000511415614e6c573415614e5757600080fd5b6006543314614e6557600080fd5b6000600855005b636b441a406000511415614f0d573415614e8557600080fd5b6004356020518110614e9657600080fd5b506006543314614ea557600080fd5b60095415614eb257600080fd5b426203f480818183011015614ec657600080fd5b808201905090506101405261014051600955600435600d55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae6000511415614f89573415614f2657600080fd5b6006543314614f3457600080fd5b60006009541160095442101516614f4a57600080fd5b6000600955600d546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf1936000511415614fb7573415614fa257600080fd5b6006543314614fb057600080fd5b6000600955005b6330c540856000511415615130573415614fd057600080fd5b6006543314614fde57600080fd5b6101406001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101c060006004818352015b6101c0516004811061502057600080fd5b600060c052602060c02001546101e0526101e0513b61503e57600080fd5b6101e051301861504d57600080fd5b60206102a060246370a0823161022052306102405261023c6101e0515afa61507457600080fd5b6000506102a0516101c0516004811061508c57600080fd5b600260c052602060c0200154808210156150a557600080fd5b8082039050905061020052600061020051111561511b576101e0513b6150ca57600080fd5b6101e05130186150d957600080fd5b6020610360604463a9059cbb6102c052336102e05261020051610300526102dc60006101e0515af161510a57600080fd5b6000506103605161511a57600080fd5b5b5b815160010180835281141561500f575b5050005b63e3698853600051141561516c57341561514957600080fd5b600654331461515757600080fd5b42600e541161516557600080fd5b6001600f55005b633046f972600051141561519a57341561518557600080fd5b600654331461519357600080fd5b6000600f55005b6323746eb860005114156151ff5734156151b357600080fd5b606051600435806040519013156151c957600080fd5b80919012156151d757600080fd5b50600435600481106151e857600080fd5b600060c052602060c020015460005260206000f350005b63b739953e600051141561526457341561521857600080fd5b6060516004358060405190131561522e57600080fd5b809190121561523c57600080fd5b506004356004811061524d57600080fd5b600160c052602060c020015460005260206000f350005b63065a80d860005114156152c957341561527d57600080fd5b6060516004358060405190131561529357600080fd5b80919012156152a157600080fd5b50600435600481106152b257600080fd5b600260c052602060c020015460005260206000f350005b63f446c1d060005114156152f05734156152e257600080fd5b60035460005260206000f350005b63ddca3f43600051141561531757341561530957600080fd5b60045460005260206000f350005b63fee3f7f9600051141561533e57341561533057600080fd5b60055460005260206000f350005b638da5cb5b600051141561536557341561535757600080fd5b60065460005260206000f350005b63405e28f8600051141561538c57341561537e57600080fd5b60085460005260206000f350005b63e0a0b58660005114156153b35734156153a557600080fd5b60095460005260206000f350005b63b4b577ad60005114156153da5734156153cc57600080fd5b600a5460005260206000f350005b6358680d0b60005114156154015734156153f357600080fd5b600b5460005260206000f350005b63e3824462600051141561542857341561541a57600080fd5b600c5460005260206000f350005b631ec0cdc1600051141561544f57341561544157600080fd5b600d5460005260206000f350005b5b60006000fd5b6102d561572b036102d56000396102d561572b036000f3000000000000000000000000c2cb1040220768554cf699b0d863a3cd4324ce3200000000000000000000000026ea744e5b887e5205727f55dfbe8685e3b21951000000000000000000000000e6354ed5bc4b393a5aad09f21c46e101e692d44700000000000000000000000004bc0ab673d88ae9dbc9da2380cb6b79c4bca9ae0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c530000000000000000000000003b3ac5386837dc563660fb6a0937dfaa5924333b00000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000003d0900

Deployed Bytecode

0x600436101561000d57615450565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526000156101f6575b610140526101606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101e060006004818352015b6101606101e051600481106100f257600080fd5b6020020180516101e0516004811061010957600080fd5b600060c052602060c02001543b61011f57600080fd5b6101e0516004811061013057600080fd5b600060c052602060c0200154301861014757600080fd5b602061026060046377c7b8fc6102005261021c6101e0516004811061016b57600080fd5b600060c052602060c02001545afa61018257600080fd5b60005061026051808202821582848304141761019d57600080fd5b809050905090508152505b81516001018083528114156100de575b50506080610280525b6000610280511115156101d3576101ef565b60206102805103610160015160206102805103610280526101c1565b6101405156005b60001561031b575b6101c0526101405261016052610180526101a0526101e061014080518252806020015182602001528060400151826040015280606001518260600152505061026060006004818352015b6101e0610260516004811061025c57600080fd5b6020020151610260516004811061027257600080fd5b600260c052602060c0200154808202821582848304141761029257600080fd5b80905090509050670de0b6b3a764000080806102ad57600080fd5b8204905090506101e061026051600481106102c757600080fd5b60200201525b8151600101808352811415610248575b50506080610280525b6000610280511115156102f857610314565b602061028051036101e0015160206102805103610280526102e6565b6101c05156005b60001561044c575b610240526101405261016052610180526101a0526101c0526101e05261020052610220526102606101408051825280602001518260200152806040015182604001528060600151826060015250506102e060006004818352015b6102606102e0516004811061039157600080fd5b60200201516101c06102e051600481106103aa57600080fd5b602002015180820282158284830414176103c357600080fd5b80905090509050670de0b6b3a764000080806103de57600080fd5b8204905090506102606102e051600481106103f857600080fd5b60200201525b815160010180835281141561037d575b50506080610300525b60006103005111151561042957610445565b6020610300510361026001516020610300510361030052610417565b6102405156005b600015610751575b6101c0526101405261016052610180526101a05260006101e05261022060006004818352015b602061022051026101400151610200526101e08051610200518181830110156104a257600080fd5b808201905090508152505b815160010180835281141561047a575b50506101e05115156104d85760006000526000516101c05156505b6000610260526101e05161028052600354600480820282158284830414176104ff57600080fd5b809050905090506102a0526102c0600060ff818352015b610280516102e05261032060006004818352015b602061032051026101400151610300526102e05161028051808202821582848304141761055657600080fd5b80905090509050610300516004808202821582848304141761057757600080fd5b80905090509050600181818301101561058f57600080fd5b8082019050905080806105a157600080fd5b8204905090506102e0525b815160010180835281141561052a575b505061028051610260526102a0516101e05180820282158284830414176105e257600080fd5b809050905090506102e0516004808202821582848304141761060357600080fd5b8090509050905081818301101561061957600080fd5b8082019050905061028051808202821582848304141761063857600080fd5b809050905090506102a05160018082101561065257600080fd5b8082039050905061028051808202821582848304141761067157600080fd5b8090509050905060056102e051808202821582848304141761069257600080fd5b809050905090508181830110156106a857600080fd5b8082019050905080806106ba57600080fd5b82049050905061028052610260516102805111156107015760016102805161026051808210156106e957600080fd5b808203905090501115156106fc5761073d565b61072c565b600161026051610280518082101561071857600080fd5b8082039050905011151561072b5761073d565b5b5b8151600101808352811415610516575b5050610280516000526000516101c0515650005b60001561091f575b610240526101405261016052610180526101a0526101c0526101e0526102005261022052610140610660525b610660515160206106605101610660526106606106605110156107a757610785565b6305eb8fa6610680526106a0610140610460525b610460515160206104605101610460526104606104605110156107dd576107bb565b6342d3b3c3610480526104a06101408051825280602001518260200152806040015182604001528060600151826060015250506105206101c080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610323565b6105e052610600526106205261064052610440610460525b610460515260206104605103610460526101406104605110151561089e5761087b565b6105e0805182528060200151826020015280604001518260400152806060015182606001525050610700516106e0516106c0516106a05160065801610454565b61076052610640610660525b610660515260206106605103610660526101406106605110151561090d576108ea565b61076051600052600051610240515650005b63bb7b8b806000511415610b9357341561093857600080fd5b6101406106e0525b6106e0515160206106e051016106e0526106e06106e051101561096257610940565b6305eb8fa661070052610720610140610560525b6105605151602061056051016105605261056061056051101561099857610976565b631db7662b610580526105a06101406104c0525b6104c0515160206104c051016104c0526104c06104c05110156109ce576109ac565b600658016100a9565b6104e0526105005261052052610540526104a06104c0525b6104c0515260206104c051036104c0526101406104c051101515610a12576109ef565b6104e0805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a051600658016101fe565b61066052610680526106a0526106c052610540610560525b6105605152602061056051036105605261014061056051101515610a8d57610a6a565b6106608051825280602001518260200152806040015182604001528060600151826060015250506107805161076051610740516107205160065801610454565b6107e0526106c06106e0525b6106e0515260206106e051036106e0526101406106e051101515610afc57610ad9565b6107e051610140526007543b610b1157600080fd5b6007543018610b1f57600080fd5b602061088060046318160ddd6108205261083c6007545afa610b4057600080fd5b600050610880516108005261014051670de0b6b3a76400008082028215828483041417610b6c57600080fd5b80905090509050610800518080610b8257600080fd5b82049050905060005260206000f350005b63cf701ff76000511415610ff6573415610bac57600080fd5b60843560028110610bbc57600080fd5b5061014060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506101c06101405161016051610180516101a0516101c0516101e0516102005161022051600658016100a9565b61026052610280526102a0526102c05261022052610200526101e0526101c0526101a052610180526101605261014052610260805182528060200151826020015280604001518260400152806060015182606001525050610140610300525b61030051516020610300510161030052610300610300511015610cb357610c91565b631f30ab74610320526103406101c08051825280602001518260200152806040015182604001528060600151826060015250506103c061014080518252806020015182602001528060400151826040015280606001518260600152505061042051610400516103e0516103c0516103a05161038051610360516103405160065801610759565b610480526102e0610300525b6103005152602061030051036103005261014061030051101515610d6857610d45565b610480516102e0526104a060006004818352015b60843515610dd4576101406104a05160048110610d9857600080fd5b60200201805160046104a05160048110610db157600080fd5b6020020135818183011015610dc557600080fd5b80820190509050815250610e1e565b6101406104a05160048110610de857600080fd5b60200201805160046104a05160048110610e0157600080fd5b602002013580821015610e1357600080fd5b808203905090508152505b5b8151600101808352811415610d7c575b50506101406104e0525b6104e0515160206104e051016104e0526104e06104e0511015610e5b57610e39565b631f30ab74610500526105206101c08051825280602001518260200152806040015182604001528060600151826060015250506105a0610140805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a0516105805161056051610540516105205160065801610759565b610660526104c06104e0525b6104e0515260206104e051036104e0526101406104e051101515610f1057610eed565b610660516104c0526007543b610f2557600080fd5b6007543018610f3357600080fd5b602061070060046318160ddd6106a0526106bc6007545afa610f5457600080fd5b600050610700516106805260006107205260843515610f92576104c0516102e05180821015610f8257600080fd5b8082039050905061072052610fb3565b6102e0516104c05180821015610fa757600080fd5b80820390509050610720525b61072051610680518082028215828483041417610fcf57600080fd5b809050905090506102e0518080610fe557600080fd5b82049050905060005260206000f350005b63029b2f346000511415611a785762ffffff541561101357600080fd5b600162ffffff55341561102557600080fd5b600f541561103257600080fd5b61014060008152600081602001526000816040015260008160600152506004546004808202821582848304141761106857600080fd5b80905090509050600c808061107c57600080fd5b8204905090506101c0526005546101e0526007543b61109a57600080fd5b60075430186110a857600080fd5b602061028060046318160ddd6102205261023c6007545afa6110c957600080fd5b60005061028051610200526102a0610140610320525b61032051516020610320510161032052610320610320511015611101576110df565b600658016100a9565b6103405261036052610380526103a052610300610320525b610320515260206103205103610320526101406103205110151561114557611122565b61034080518252806020015182602001528060400151826040015280606001518260600152505060006103c0526103e060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006102005111156112af57610140610460525b610460515160206104605101610460526104606104605110156111f1576111cf565b631f30ab74610480526104a06102a08051825280602001518260200152806040015182604001528060600151826060015250506105206103e080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610759565b6105e052610440610460525b61046051526020610460510361046052610140610460511015156112a657611283565b6105e0516103c0525b6106006103e080518252806020015182602001528060400151826040015280606001518260600152505061068060006004818352015b6102005115156113145760006004610680516004811061130457600080fd5b60200201351161131357600080fd5b5b6103e0610680516004811061132857600080fd5b60200201516004610680516004811061134057600080fd5b602002013581818301101561135457600080fd5b80820190509050610600610680516004811061136f57600080fd5b60200201525b81516001018083528114156112e5575b50506101406106c0525b6106c0515160206106c051016106c0526106c06106c05110156113b15761138f565b631f30ab746106e0526107006102a08051825280602001518260200152806040015182604001528060600151826060015250506107806106008051825280602001518260200152806040015182604001528060600151826060015250506107e0516107c0516107a051610780516107605161074051610720516107005160065801610759565b610840526106a06106c0525b6106c0515260206106c051036106c0526101406106c05110151561146657611443565b610840516106a0526103c0516106a0511161148057600080fd5b6106a0516108605260006102005111156117bf5761088060006004818352015b6106a0516103e061088051600481106114b857600080fd5b602002015180820282158284830414176114d157600080fd5b809050905090506103c05180806114e757600080fd5b8204905090506108a05260006108c052610600610880516004811061150b57600080fd5b60200201516108a0511115611554576108a051610600610880516004811061153257600080fd5b60200201518082101561154457600080fd5b808203905090506108c05261158a565b610600610880516004811061156857600080fd5b60200201516108a0518082101561157e57600080fd5b808203905090506108c0525b6101c0516108c05180820282158284830414176115a657600080fd5b809050905090506402540be40080806115be57600080fd5b82049050905061014061088051600481106115d857600080fd5b602002015261060061088051600481106115f157600080fd5b6020020151610140610880516004811061160a57600080fd5b60200201516101e051808202821582848304141761162757600080fd5b809050905090506402540be400808061163f57600080fd5b8204905090508082101561165257600080fd5b80820390509050610880516004811061166a57600080fd5b600260c052602060c0200155610600610880516004811061168a57600080fd5b60200201805161014061088051600481106116a457600080fd5b6020020151808210156116b657600080fd5b808203905090508152505b81516001018083528114156114a0575b50506101406108e0525b6108e0515160206108e051016108e0526108806108e05110156116fd576116db565b631f30ab74610900526109206102a08051825280602001518260200152806040015182604001528060600151826060015250506109a0610600805182528060200151826020015280604001518260400152806060015182606001525050610a00516109e0516109c0516109a0516109805161096051610940516109205160065801610759565b610a60526108606108e0525b6108e0515260206108e051036108e0526101406108e0511015156117b25761178f565b610a6051610860526117f1565b600260c052602060c0206106008051825580602001516001830155806040015160028301558060600151600383015550505b6000610a805261020051151561180e576106a051610a8052611863565b61020051610860516103c0518082101561182757600080fd5b80820390509050808202821582848304141761184257600080fd5b809050905090506103c051808061185857600080fd5b820490509050610a80525b6308c379a0610aa0526020610ac0526014610ae0527f536c697070616765207363726577656420796f75000000000000000000000000610b0052610ae050608435610a805110156118b5576084610abcfd5b610b4060006004818352015b610b4051600481106118d257600080fd5b600060c052602060c02001543b6118e857600080fd5b610b4051600481106118f957600080fd5b600060c052602060c0200154301861191057600080fd5b6020610c2060646323b872dd610b605233610b805230610ba0526004610b40516004811061193d57600080fd5b6020020135610bc052610b7c6000610b40516004811061195c57600080fd5b600060c052602060c02001545af161197357600080fd5b600050610c205161198357600080fd5b5b81516001018083528114156118c1575b50506007543b6119a357600080fd5b60075430186119b157600080fd5b6000600060446340c10f19610c405233610c6052610a8051610c8052610c5c60006007545af16119e057600080fd5b600435610ce052602435610d0052604435610d2052606435610d405261014051610d605261016051610d805261018051610da0526101a051610dc0526106a051610de05261020051610a8051818183011015611a3b57600080fd5b80820190509050610e0052337f3f1915775e0c9a38a57a7bb7f1f9005f486fb904e1f84aa215364d567319a58d610140610ce0a2600062ffffff55005b600015611e7c575b610220526101405261016052610180526101a0526101c0526101e052610200526000610140511215610160516101405114151660006101605112151660046101405112166004610160511216611ad557600080fd5b6101405161016051610180516101a0516101c0516101e0516102005161022051610240516305eb8fa6610280526102a06101a0805182528060200151826020015280604001518260400152806060015182606001525050610300516102e0516102c0516102a05160065801610454565b610360526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103605161024052610240516103805260006103a05260035460048082028215828483041417611b9c57600080fd5b809050905090506103c05260006103e05261040060006004818352015b61014051610400511415611bd457610180516103e052611c0a565b61016051610400511815611c04576101a06104005160048110611bf657600080fd5b60200201516103e052611c09565b611c86565b5b6103a080516103e051818183011015611c2257600080fd5b8082019050905081525061038051610240518082028215828483041417611c4857600080fd5b809050905090506103e05160048082028215828483041417611c6957600080fd5b809050905090508080611c7b57600080fd5b820490509050610380525b8151600101808352811415611bb9575b505061038051610240518082028215828483041417611cb457600080fd5b809050905090506103c05160048082028215828483041417611cd557600080fd5b809050905090508080611ce757600080fd5b820490509050610380526103a051610240516103c0518080611d0857600080fd5b820490509050818183011015611d1d57600080fd5b80820190509050610420526000610440526102405161046052610480600060ff818352015b610460516104405261046051610460518082028215828483041417611d6657600080fd5b8090509050905061038051818183011015611d8057600080fd5b808201905090506002610460518082028215828483041417611da157600080fd5b8090509050905061042051818183011015611dbb57600080fd5b808201905090506102405180821015611dd357600080fd5b808203905090508080611de557600080fd5b8204905090506104605261044051610460511115611e2c576001610460516104405180821015611e1457600080fd5b80820390509050111515611e2757611e68565b611e57565b6001610440516104605180821015611e4357600080fd5b80820390509050111515611e5657611e68565b5b5b8151600101808352811415611d42575b505061046051600052600051610220515650005b635e0d443f6000511415612253573415611e9557600080fd5b60605160043580604051901315611eab57600080fd5b8091901215611eb957600080fd5b5060605160243580604051901315611ed057600080fd5b8091901215611ede57600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015611f6f57611f4d565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e051101515611ff657611fd3565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606004356004811061203057600080fd5b60200201516044356101406004356004811061204b57600080fd5b6020020151808202821582848304141761206457600080fd5b80905090509050670de0b6b3a7640000808061207f57600080fd5b82049050905081818301101561209457600080fd5b80820190509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156120c9576120a7565b631e8c3fd36104c0526004356104e0526024356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611a80565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561216657612143565b61060051610480526102606024356004811061218157600080fd5b6020020151610480518082101561219757600080fd5b80820390509050670de0b6b3a764000080820282158284830414176121bb57600080fd5b80905090509050610140602435600481106121d557600080fd5b602002015180806121e557600080fd5b8204905090506106205260045461062051808202821582848304141761220a57600080fd5b809050905090506402540be400808061222257600080fd5b8204905090506106405261062051610640518082101561224157600080fd5b8082039050905060005260206000f350005b6367df02ca600051141561262257341561226c57600080fd5b6060516004358060405190131561228257600080fd5b809190121561229057600080fd5b50606051602435806040519013156122a757600080fd5b80919012156122b557600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e051101561234657612324565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156123cd576123aa565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606024356004811061240757600080fd5b60200201516044356402540be400808202821582848304141761242957600080fd5b809050905090506402540be4006004548082101561244657600080fd5b80820390509050808061245857600080fd5b8204905090506101406024356004811061247157600080fd5b6020020151808202821582848304141761248a57600080fd5b80905090509050670de0b6b3a764000080806124a557600080fd5b820490509050808210156124b857600080fd5b80820390509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156124ed576124cb565b631e8c3fd36104c0526024356104e0526004356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611a80565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561258a57612567565b610600516104805261048051610260600435600481106125a957600080fd5b6020020151808210156125bb57600080fd5b80820390509050670de0b6b3a764000080820282158284830414176125df57600080fd5b80905090509050610140600435600481106125f957600080fd5b6020020151808061260957600080fd5b820490509050610620526106205160005260206000f350005b6307211ef760005114156129e057341561263b57600080fd5b6060516004358060405190131561265157600080fd5b809190121561265f57600080fd5b506060516024358060405190131561267657600080fd5b809190121561268457600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015612715576126f3565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e05110151561279c57612779565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506104606001815264e8d4a51000816020015264e8d4a5100081604001526001816060015250610260600435600481106127fb57600080fd5b60200201516044356104606004356004811061281657600080fd5b6020020151808202821582848304141761282f57600080fd5b8090509050905081818301101561284557600080fd5b808201905090506104e052610140610520525b6105205151602061052051016105205261052061052051101561287a57612858565b631e8c3fd36105405260043561056052602435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611a80565b61068052610500610520525b6105205152602061052051036105205261014061052051101515612917576128f4565b61068051610500526102606024356004811061293257600080fd5b6020020151610500518082101561294857600080fd5b808203905090506104606024356004811061296257600080fd5b6020020151808061297257600080fd5b8204905090506106a0526004546106a051808202821582848304141761299757600080fd5b809050905090506402540be40080806129af57600080fd5b8204905090506106c0526106a0516106c051808210156129ce57600080fd5b8082039050905060005260206000f350005b630e71d1b96000511415612d965734156129f957600080fd5b60605160043580604051901315612a0f57600080fd5b8091901215612a1d57600080fd5b5060605160243580604051901315612a3457600080fd5b8091901215612a4257600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015612ad357612ab1565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e051101515612b5a57612b37565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506104606001815264e8d4a51000816020015264e8d4a510008160400152600181606001525061026060243560048110612bb957600080fd5b60200201516044356402540be4008082028215828483041417612bdb57600080fd5b809050905090506402540be40060045480821015612bf857600080fd5b808203905090508080612c0a57600080fd5b82049050905061046060243560048110612c2357600080fd5b60200201518082028215828483041417612c3c57600080fd5b8090509050905080821015612c5057600080fd5b808203905090506104e052610140610520525b61052051516020610520510161052052610520610520511015612c8557612c63565b631e8c3fd36105405260243561056052600435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611a80565b61068052610500610520525b6105205152602061052051036105205261014061052051101515612d2257612cff565b61068051610500526105005161026060043560048110612d4157600080fd5b602002015180821015612d5357600080fd5b8082039050905061046060043560048110612d6d57600080fd5b60200201518080612d7d57600080fd5b8204905090506106a0526106a05160005260206000f350005b60001561323b575b610220526101405261016052610180526101a0526101c0526101e05261020052600f5415612dcb57600080fd5b6102406101406102c0525b6102c0515160206102c051016102c0526102c06102c0511015612df857612dd6565b631db7662b6102e0526103006101a080518252806020015182602001528060400151826040015280606001518260600152505061036051610340516103205161030051600658016101fe565b6103c0526103e05261040052610420526102a06102c0525b6102c0515260206102c051036102c0526101406102c051101515612e7f57612e5c565b6103c08051825280602001518260200152806040015182604001528060600151826060015250506102406101405160048110612eba57600080fd5b6020020151610180516101a06101405160048110612ed757600080fd5b60200201518082028215828483041417612ef057600080fd5b80905090509050670de0b6b3a76400008080612f0b57600080fd5b820490509050818183011015612f2057600080fd5b8082019050905061044052610140610480525b61048051516020610480510161048052610480610480511015612f5557612f33565b631e8c3fd36104a052610140516104c052610160516104e052610440516105005261052061024080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c05160065801611a80565b6105e052610460610480525b6104805152602061048051036104805261014061048051101515612ff457612fd1565b6105e05161046052610240610160516004811061301057600080fd5b6020020151610460518082101561302657600080fd5b808203905090506106005261060051600454808202821582848304141761304c57600080fd5b809050905090506402540be400808061306457600080fd5b8204905090506106205261062051600554808202821582848304141761308957600080fd5b809050905090506402540be40080806130a157600080fd5b8204905090506106405261044051670de0b6b3a764000080820282158284830414176130cc57600080fd5b809050905090506101a061014051600481106130e757600080fd5b602002015180806130f757600080fd5b820490509050610140516004811061310e57600080fd5b600260c052602060c02001556104605161062051610640518082101561313357600080fd5b8082039050905081818301101561314957600080fd5b80820190509050670de0b6b3a7640000808202821582848304141761316d57600080fd5b809050905090506101a0610160516004811061318857600080fd5b6020020151808061319857600080fd5b82049050905061016051600481106131af57600080fd5b600260c052602060c02001556106005161062051808210156131d057600080fd5b80820390509050670de0b6b3a764000080820282158284830414176131f457600080fd5b809050905090506101a0610160516004811061320f57600080fd5b6020020151808061321f57600080fd5b8204905090506106605261066051600052600051610220515650005b633df0212460005114156135f55762ffffff541561325857600080fd5b600162ffffff55341561326a57600080fd5b6060516004358060405190131561328057600080fd5b809190121561328e57600080fd5b50606051602435806040519013156132a557600080fd5b80919012156132b357600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051632ce785a36102a0526004356102c0526024356102e0526044356103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051610300516102e0516102c05160065801612d9e565b6103e052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103e051610260526308c379a061040052602061042052602e610440527f45786368616e676520726573756c74656420696e20666577657220636f696e73610460527f207468616e20657870656374656400000000000000000000000000000000000061048052610440506064356102605110156134575760a461041cfd5b6004356004811061346757600080fd5b600060c052602060c02001543b61347d57600080fd5b6004356004811061348d57600080fd5b600060c052602060c020015430186134a457600080fd5b602061058060646323b872dd6104c052336104e0523061050052604435610520526104dc6000600435600481106134da57600080fd5b600060c052602060c02001545af16134f157600080fd5b6000506105805161350157600080fd5b6024356004811061351157600080fd5b600060c052602060c02001543b61352757600080fd5b6024356004811061353757600080fd5b600060c052602060c0200154301861354e57600080fd5b6020610640604463a9059cbb6105a052336105c052610260516105e0526105bc60006024356004811061358057600080fd5b600060c052602060c02001545af161359757600080fd5b600050610640516135a757600080fd5b60043561066052604435610680526024356106a052610260516106c052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610660a2600062ffffff55005b63a6417ed66000511415613f5a5762ffffff541561361257600080fd5b600162ffffff55341561362457600080fd5b6060516004358060405190131561363a57600080fd5b809190121561364857600080fd5b506060516024358060405190131561365f57600080fd5b809190121561366d57600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101406004356004811061370957600080fd5b60200201516102606004356004811061372157600080fd5b6020020151808061373157600080fd5b8204905090506102e0526101406024356004811061374e57600080fd5b60200201516102606024356004811061376657600080fd5b6020020151808061377657600080fd5b82049050905061030052604435670de0b6b3a764000080820282158284830414176137a057600080fd5b809050905090506102e05180806137b657600080fd5b82049050905061032052610140610360525b610360515160206103605101610360526103606103605110156137ea576137c8565b632ce785a3610380526004356103a0526024356103c052610320516103e052610400610140805182528060200151826020015280604001518260400152806060015182606001525050610460516104405161042051610400516103e0516103c0516103a05160065801612d9e565b6104c052610340610360525b610360515260206103605103610360526101406103605110151561388757613864565b6104c05161034052610340516103005180820282158284830414176138ab57600080fd5b80905090509050670de0b6b3a764000080806138c657600080fd5b8204905090506104e0526308c379a061050052602061052052602e610540527f45786368616e676520726573756c74656420696e20666577657220636f696e73610560527f207468616e20657870656374656400000000000000000000000000000000000061058052610540506064356104e05110156139475760a461051cfd5b6105c060008152600081602001526001816040015260008160600152506105c06004356004811061397757600080fd5b602002015115613a1f576004356004811061399157600080fd5b600160c052602060c02001543b6139a757600080fd5b600435600481106139b757600080fd5b600160c052602060c020015430186139ce57600080fd5b6000600060646323b872dd61072052336107405230610760526044356107805261073c600060043560048110613a0357600080fd5b600160c052602060c02001545af1613a1a57600080fd5b613aca565b60043560048110613a2f57600080fd5b600160c052602060c02001543b613a4557600080fd5b60043560048110613a5557600080fd5b600160c052602060c02001543018613a6c57600080fd5b602061070060646323b872dd61064052336106605230610680526044356106a05261065c600060043560048110613aa257600080fd5b600160c052602060c02001545af1613ab957600080fd5b60005061070051613ac957600080fd5b5b60043560048110613ada57600080fd5b600160c052602060c02001543b613af057600080fd5b60043560048110613b0057600080fd5b600160c052602060c02001543018613b1757600080fd5b6020610880604463095ea7b36107e05260043560048110613b3757600080fd5b600060c052602060c020015461080052604435610820526107fc600060043560048110613b6357600080fd5b600160c052602060c02001545af1613b7a57600080fd5b6000506108805060043560048110613b9157600080fd5b600060c052602060c02001543b613ba757600080fd5b60043560048110613bb757600080fd5b600060c052602060c02001543018613bce57600080fd5b60006000602463b6b55f256108a0526044356108c0526108bc600060043560048110613bf957600080fd5b600060c052602060c02001545af1613c1057600080fd5b60243560048110613c2057600080fd5b600060c052602060c02001543b613c3657600080fd5b60243560048110613c4657600080fd5b600060c052602060c02001543018613c5d57600080fd5b600060006024632e1a7d4d61092052610340516109405261093c600060243560048110613c8957600080fd5b600060c052602060c02001545af1613ca057600080fd5b60243560048110613cb057600080fd5b600160c052602060c02001543b613cc657600080fd5b60243560048110613cd657600080fd5b600160c052602060c02001543018613ced57600080fd5b6020610a2060246370a082316109a052306109c0526109bc60243560048110613d1557600080fd5b600160c052602060c02001545afa613d2c57600080fd5b600050610a20516104e0526308c379a0610a40526020610a6052602e610a80527f45786368616e676520726573756c74656420696e20666577657220636f696e73610aa0527f207468616e206578706563746564000000000000000000000000000000000000610ac052610a80506064356104e0511015613dae5760a4610a5cfd5b6105c060243560048110613dc157600080fd5b602002015115613e655760243560048110613ddb57600080fd5b600160c052602060c02001543b613df157600080fd5b60243560048110613e0157600080fd5b600160c052602060c02001543018613e1857600080fd5b60006000604463a9059cbb610bc05233610be0526104e051610c0052610bdc600060243560048110613e4957600080fd5b600160c052602060c02001545af1613e6057600080fd5b613f0c565b60243560048110613e7557600080fd5b600160c052602060c02001543b613e8b57600080fd5b60243560048110613e9b57600080fd5b600160c052602060c02001543018613eb257600080fd5b6020610ba0604463a9059cbb610b005233610b20526104e051610b4052610b1c600060243560048110613ee457600080fd5b600160c052602060c02001545af1613efb57600080fd5b600050610ba051613f0b57600080fd5b5b600435610c6052604435610c8052602435610ca0526104e051610cc052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b6080610c60a2600062ffffff55005b637d49d87560005114156142e25762ffffff5415613f7757600080fd5b600162ffffff553415613f8957600080fd5b6007543b613f9657600080fd5b6007543018613fa457600080fd5b60206101c060046318160ddd6101605261017c6007545afa613fc557600080fd5b6000506101c051610140526101e0600081526000816020015260008160400152600081606001525061026060008152600081602001526000816040015260008160600152506102e060006004818352015b6102e0516004811061402757600080fd5b600260c052602060c0200154600435808202821582848304141761404a57600080fd5b8090509050905061014051808061406057600080fd5b820490509050610300526308c379a0610320526020610340526030610360527f5769746864726177616c20726573756c74656420696e20666577657220636f69610380527f6e73207468616e206578706563746564000000000000000000000000000000006103a0526103605060246102e051600481106140e057600080fd5b60200201356103005110156140f65760a461033cfd5b6102e0516004811061410757600080fd5b600260c052602060c020018054610300518082101561412557600080fd5b80820390509050815550610300516101e06102e0516004811061414757600080fd5b60200201526102e0516004811061415d57600080fd5b600060c052602060c02001543b61417357600080fd5b6102e0516004811061418457600080fd5b600060c052602060c0200154301861419b57600080fd5b6020610480604463a9059cbb6103e052336104005261030051610420526103fc60006102e051600481106141ce57600080fd5b600060c052602060c02001545af16141e557600080fd5b600050610480516141f557600080fd5b5b8151600101808352811415614016575b50506007543b61421557600080fd5b600754301861422357600080fd5b6000600060446379cc67906104a052336104c0526004356104e0526104bc60006007545af161425157600080fd5b6101e0516105405261020051610560526102205161058052610240516105a052610260516105c052610280516105e0526102a051610600526102c0516106205261014051600435808210156142a557600080fd5b8082039050905061064052337f9878ca375e106f2a43c3b599fc624568131c4c9a4ba66a14563715763be9d59d610120610540a2600062ffffff55005b6318a7bd766000511415614ca95762ffffff54156142ff57600080fd5b600162ffffff55341561431157600080fd5b600f541561431e57600080fd5b6007543b61432b57600080fd5b600754301861433957600080fd5b60206101c060046318160ddd6101605261017c6007545afa61435a57600080fd5b6000506101c051610140526000610140511161437557600080fd5b6004546004808202821582848304141761438e57600080fd5b80905090509050600c80806143a257600080fd5b8204905090506101e052600554610200526102206101406102a0525b6102a0515160206102a051016102a0526102a06102a05110156143e0576143be565b600658016100a9565b6102c0526102e05261030052610320526102806102a0525b6102a0515260206102a051036102a0526101406102a05110151561442457614401565b6102c080518252806020015182602001528060400151826040015280606001518260600152505061034060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506103c0610340805182528060200151826020015280604001518260400152806060015182606001525050610140610460525b610460515160206104605101610460526104606104605110156144e8576144c6565b631f30ab74610480526104a061022080518252806020015182602001528060400151826040015280606001518260600152505061052061034080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610759565b6105e052610440610460525b610460515260206104605103610460526101406104605110151561459d5761457a565b6105e0516104405261060060006004818352015b6103c061060051600481106145c557600080fd5b602002018051600461060051600481106145de57600080fd5b6020020135808210156145f057600080fd5b808203905090508152505b81516001018083528114156145b1575b5050610140610640525b6106405151602061064051016106405261064061064051101561463757614615565b631f30ab74610660526106806102208051825280602001518260200152806040015182604001528060600151826060015250506107006103c0805182528060200151826020015280604001518260400152806060015182606001525050610760516107405161072051610700516106e0516106c0516106a0516106805160065801610759565b6107c052610620610640525b61064051526020610640510361064052610140610640511015156146ec576146c9565b6107c051610620526107e0600081526000816020015260008160400152600081606001525061086060006004818352015b61062051610340610860516004811061473557600080fd5b6020020151808202821582848304141761474e57600080fd5b8090509050905061044051808061476457600080fd5b8204905090506108805260006108a0526103c0610860516004811061478857600080fd5b60200201516108805111156147d157610880516103c061086051600481106147af57600080fd5b6020020151808210156147c157600080fd5b808203905090506108a052614807565b6103c061086051600481106147e557600080fd5b602002015161088051808210156147fb57600080fd5b808203905090506108a0525b6101e0516108a051808202821582848304141761482357600080fd5b809050905090506402540be400808061483b57600080fd5b8204905090506107e0610860516004811061485557600080fd5b60200201526103c0610860516004811061486e57600080fd5b60200201516107e0610860516004811061488757600080fd5b60200201516102005180820282158284830414176148a457600080fd5b809050905090506402540be40080806148bc57600080fd5b820490509050808210156148cf57600080fd5b8082039050905061086051600481106148e757600080fd5b600260c052602060c02001556103c0610860516004811061490757600080fd5b6020020180516107e0610860516004811061492157600080fd5b60200201518082101561493357600080fd5b808203905090508152505b815160010180835281141561471d575b50506101406108e0525b6108e0515160206108e051016108e0526108e06108e051101561497a57614958565b631f30ab74610900526109206102208051825280602001518260200152806040015182604001528060600151826060015250506109a06103c0805182528060200151826020015280604001518260400152806060015182606001525050610a00516109e0516109c0516109a0516109805161096051610940516109205160065801610759565b610a60526108c06108e0525b6108e0515260206108e051036108e0526101406108e051101515614a2f57614a0c565b610a60516108c052610440516108c05180821015614a4c57600080fd5b80820390509050610140518082028215828483041417614a6b57600080fd5b80905090509050610440518080614a8157600080fd5b820490509050610a80526000610a805111614a9b57600080fd5b6308c379a0610aa0526020610ac0526014610ae0527f536c697070616765207363726577656420796f75000000000000000000000000610b0052610ae050608435610a80511115614aed576084610abcfd5b610b4060006004818352015b610b405160048110614b0a57600080fd5b600060c052602060c02001543b614b2057600080fd5b610b405160048110614b3157600080fd5b600060c052602060c02001543018614b4857600080fd5b6020610c00604463a9059cbb610b605233610b80526004610b405160048110614b7057600080fd5b6020020135610ba052610b7c6000610b405160048110614b8f57600080fd5b600060c052602060c02001545af1614ba657600080fd5b600050610c0051614bb657600080fd5b5b8151600101808352811415614af9575b50506007543b614bd657600080fd5b6007543018614be457600080fd5b6000600060446379cc6790610c205233610c4052610a8051610c6052610c3c60006007545af1614c1357600080fd5b600435610cc052602435610ce052604435610d0052606435610d20526107e051610d405261080051610d605261082051610d805261084051610da05261062051610dc05261014051610a805180821015614c6c57600080fd5b80820390509050610de052337fb964b72f73f5ef5bf0fdc559b2fab9a7b12a39e47817a547f1f0aee47febd602610140610cc0a2600062ffffff55005b63ee11f5b66000511415614d91573415614cc257600080fd5b6006543314614cd057600080fd5b60085415614cdd57600080fd5b64012a05f2006044351115614cf157600080fd5b64012a05f2006024351115614d0557600080fd5b620f42406004351115614d1757600080fd5b426203f480818183011015614d2b57600080fd5b808201905090506101405261014051600855600435600a55602435600b55604435600c5560043561016052602435610180526044356101a052610140517f6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f736060610160a2005b632a7dd7cd6000511415614e3e573415614daa57600080fd5b6006543314614db857600080fd5b60006008541142600854111516614dce57600080fd5b6000600855600a5461014052600b5461016052600c5461018052610140516003556101605160045561018051600555610140516101a052610160516101c052610180516101e0527f752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e60606101a0a1005b63226840fb6000511415614e6c573415614e5757600080fd5b6006543314614e6557600080fd5b6000600855005b636b441a406000511415614f0d573415614e8557600080fd5b6004356020518110614e9657600080fd5b506006543314614ea557600080fd5b60095415614eb257600080fd5b426203f480818183011015614ec657600080fd5b808201905090506101405261014051600955600435600d55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae6000511415614f89573415614f2657600080fd5b6006543314614f3457600080fd5b60006009541160095442101516614f4a57600080fd5b6000600955600d546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf1936000511415614fb7573415614fa257600080fd5b6006543314614fb057600080fd5b6000600955005b6330c540856000511415615130573415614fd057600080fd5b6006543314614fde57600080fd5b6101406001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101c060006004818352015b6101c0516004811061502057600080fd5b600060c052602060c02001546101e0526101e0513b61503e57600080fd5b6101e051301861504d57600080fd5b60206102a060246370a0823161022052306102405261023c6101e0515afa61507457600080fd5b6000506102a0516101c0516004811061508c57600080fd5b600260c052602060c0200154808210156150a557600080fd5b8082039050905061020052600061020051111561511b576101e0513b6150ca57600080fd5b6101e05130186150d957600080fd5b6020610360604463a9059cbb6102c052336102e05261020051610300526102dc60006101e0515af161510a57600080fd5b6000506103605161511a57600080fd5b5b5b815160010180835281141561500f575b5050005b63e3698853600051141561516c57341561514957600080fd5b600654331461515757600080fd5b42600e541161516557600080fd5b6001600f55005b633046f972600051141561519a57341561518557600080fd5b600654331461519357600080fd5b6000600f55005b6323746eb860005114156151ff5734156151b357600080fd5b606051600435806040519013156151c957600080fd5b80919012156151d757600080fd5b50600435600481106151e857600080fd5b600060c052602060c020015460005260206000f350005b63b739953e600051141561526457341561521857600080fd5b6060516004358060405190131561522e57600080fd5b809190121561523c57600080fd5b506004356004811061524d57600080fd5b600160c052602060c020015460005260206000f350005b63065a80d860005114156152c957341561527d57600080fd5b6060516004358060405190131561529357600080fd5b80919012156152a157600080fd5b50600435600481106152b257600080fd5b600260c052602060c020015460005260206000f350005b63f446c1d060005114156152f05734156152e257600080fd5b60035460005260206000f350005b63ddca3f43600051141561531757341561530957600080fd5b60045460005260206000f350005b63fee3f7f9600051141561533e57341561533057600080fd5b60055460005260206000f350005b638da5cb5b600051141561536557341561535757600080fd5b60065460005260206000f350005b63405e28f8600051141561538c57341561537e57600080fd5b60085460005260206000f350005b63e0a0b58660005114156153b35734156153a557600080fd5b60095460005260206000f350005b63b4b577ad60005114156153da5734156153cc57600080fd5b600a5460005260206000f350005b6358680d0b60005114156154015734156153f357600080fd5b600b5460005260206000f350005b63e3824462600051141561542857341561541a57600080fd5b600c5460005260206000f350005b631ec0cdc1600051141561544f57341561544157600080fd5b600d5460005260206000f350005b5b60006000fd

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

000000000000000000000000c2cb1040220768554cf699b0d863a3cd4324ce3200000000000000000000000026ea744e5b887e5205727f55dfbe8685e3b21951000000000000000000000000e6354ed5bc4b393a5aad09f21c46e101e692d44700000000000000000000000004bc0ab673d88ae9dbc9da2380cb6b79c4bca9ae0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c530000000000000000000000003b3ac5386837dc563660fb6a0937dfaa5924333b00000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000003d0900

-----Decoded View---------------
Arg [0] : _coins (address[4]): 0xC2cB1040220768554cf699b0d863A3cd4324ce32,0x26EA744E5B887E5205727f55dFBE8685e3b21951,0xE6354ed5bC4b393a5Aad09f21c46E101e692d447,0x04bC0Ab673d88aE9dbC9DA2380cB6B79C4BCa9aE
Arg [1] : _underlying_coins (address[4]): 0x6B175474E89094C44Da98b954EedeAC495271d0F,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0xdAC17F958D2ee523a2206206994597C13D831ec7,0x4Fabb145d64652a948d72533023f6E7A623C7C53
Arg [2] : _pool_token (address): 0x3B3Ac5386837Dc563660FB6a0937DFAa5924333B
Arg [3] : _A (uint256): 2000
Arg [4] : _fee (uint256): 4000000

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000c2cb1040220768554cf699b0d863a3cd4324ce32
Arg [1] : 00000000000000000000000026ea744e5b887e5205727f55dfbe8685e3b21951
Arg [2] : 000000000000000000000000e6354ed5bc4b393a5aad09f21c46e101e692d447
Arg [3] : 00000000000000000000000004bc0ab673d88ae9dbc9da2380cb6b79c4bca9ae
Arg [4] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [5] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [6] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [7] : 0000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c53
Arg [8] : 0000000000000000000000003b3ac5386837dc563660fb6a0937dfaa5924333b
Arg [9] : 00000000000000000000000000000000000000000000000000000000000007d0
Arg [10] : 00000000000000000000000000000000000000000000000000000000003d0900


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

Curve.fi's BUSD swap address.

Validator Index Block Amount
View All Withdrawals

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

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