ETH Price: $3,669.51 (+2.34%)

Contract

0xb45C8956a080d336934cEE52A35D4dbABF025b6F
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Token96125522020-03-05 17:23:321731 days ago1583429012IN
Kyber: Reserve MKR
0 ETH0.000028081.01
Withdraw Token96125282020-03-05 17:20:261731 days ago1583428826IN
Kyber: Reserve MKR
0 ETH0.000058252
Withdraw Ether96125232020-03-05 17:18:181731 days ago1583428698IN
Kyber: Reserve MKR
0 ETH0.000064662
Withdraw Token96125102020-03-05 17:15:161731 days ago1583428516IN
Kyber: Reserve MKR
0 ETH0.000058252
Disable Trade96124532020-03-05 17:04:561731 days ago1583427896IN
Kyber: Reserve MKR
0 ETH0.000029371
Enable Trade96124262020-03-05 16:58:161731 days ago1583427496IN
Kyber: Reserve MKR
0 ETH0.000099564
Set Contracts90377902019-12-02 11:19:251825 days ago1575285565IN
Kyber: Reserve MKR
0 ETH0.0004301910
Set Contracts88703282019-11-04 8:32:311853 days ago1572856351IN
Kyber: Reserve MKR
0 ETH0.000258496
Transfer88402532019-10-30 12:23:211858 days ago1572438201IN
Kyber: Reserve MKR
170 ETH0.000044511.98
Withdraw88338072019-10-29 11:36:441859 days ago1572349004IN
Kyber: Reserve MKR
0 ETH0.000131573
Withdraw Ether88337992019-10-29 11:34:491859 days ago1572348889IN
Kyber: Reserve MKR
0 ETH0.000099573
Transfer88334722019-10-29 10:13:021859 days ago1572343982IN
Kyber: Reserve MKR
0.1 ETH0.000047212.1
Transfer Admin Q...88087072019-10-25 10:47:021863 days ago1572000422IN
Kyber: Reserve MKR
0 ETH0.0009562530
Add Alerter88087072019-10-25 10:47:021863 days ago1572000422IN
Kyber: Reserve MKR
0 ETH0.002605830
Add Operator88087072019-10-25 10:47:021863 days ago1572000422IN
Kyber: Reserve MKR
0 ETH0.0026130630
Approve Withdraw...88087072019-10-25 10:47:021863 days ago1572000422IN
Kyber: Reserve MKR
0 ETH0.00345930
Approve Withdraw...88087072019-10-25 10:47:021863 days ago1572000422IN
Kyber: Reserve MKR
0 ETH0.0020453130

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
96125232020-03-05 17:18:181731 days ago1583428698
Kyber: Reserve MKR
123.07392255 ETH
96120682020-03-05 15:38:231731 days ago1583422703
Kyber: Reserve MKR
1.24817776 ETH
96111942020-03-05 12:27:001731 days ago1583411220
Kyber: Reserve MKR
2.31903831 ETH
96097662020-03-05 6:57:571731 days ago1583391477
Kyber: Reserve MKR
1.20343198 ETH
96089332020-03-05 3:55:511731 days ago1583380551
Kyber: Reserve MKR
2.1385683 ETH
96073362020-03-04 22:15:341731 days ago1583360134
Kyber: Reserve MKR
0.98110811 ETH
96067072020-03-04 19:49:151731 days ago1583351355
Kyber: Reserve MKR
0.90295943 ETH
96059722020-03-04 17:08:531732 days ago1583341733
Kyber: Reserve MKR
0.14981857 ETH
96055442020-03-04 15:42:561732 days ago1583336576
Kyber: Reserve MKR
0.22388557 ETH
96045032020-03-04 11:43:421732 days ago1583322222
Kyber: Reserve MKR
0.04486592 ETH
96007322020-03-03 21:45:391732 days ago1583271939
Kyber: Reserve MKR
0.59767297 ETH
96006502020-03-03 21:28:261732 days ago1583270906
Kyber: Reserve MKR
0.9 ETH
96005402020-03-03 21:03:001732 days ago1583269380
Kyber: Reserve MKR
1.25468501 ETH
96004372020-03-03 20:41:281732 days ago1583268088
Kyber: Reserve MKR
0.99900884 ETH
96003202020-03-03 20:16:501732 days ago1583266610
Kyber: Reserve MKR
1.18119885 ETH
96003112020-03-03 20:15:081732 days ago1583266508
Kyber: Reserve MKR
1.54382456 ETH
96002982020-03-03 20:11:191732 days ago1583266279
Kyber: Reserve MKR
1.15549711 ETH
96002982020-03-03 20:11:191732 days ago1583266279
Kyber: Reserve MKR
1.56827431 ETH
96002932020-03-03 20:10:091732 days ago1583266209
Kyber: Reserve MKR
0.6 ETH
96002852020-03-03 20:08:131732 days ago1583266093
Kyber: Reserve MKR
9.67894468 ETH
96001852020-03-03 19:45:571732 days ago1583264757
Kyber: Reserve MKR
0.74998931 ETH
96000122020-03-03 19:12:011733 days ago1583262721
Kyber: Reserve MKR
2.48525476 ETH
95998922020-03-03 18:45:401733 days ago1583261140
Kyber: Reserve MKR
2.36056721 ETH
95996542020-03-03 17:54:171733 days ago1583258057
Kyber: Reserve MKR
0.4465983 ETH
95996372020-03-03 17:50:501733 days ago1583257850
Kyber: Reserve MKR
3.14637347 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x0232Ba60...Eb4AC773C
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
KyberReserve

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-07-15
*/

/**
 *Submitted for verification at Etherscan.io on 2018-07-05
*/

pragma solidity ^0.4.13;

interface ConversionRatesInterface {

    function recordImbalance(
        ERC20 token,
        int buyAmount,
        uint rateUpdateBlock,
        uint currentBlock
    )
        public;

    function getRate(ERC20 token, uint currentBlockNumber, bool buy, uint qty) public view returns(uint);
}

interface ERC20 {
    function totalSupply() public view returns (uint supply);
    function balanceOf(address _owner) public view returns (uint balance);
    function transfer(address _to, uint _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint _value) public returns (bool success);
    function approve(address _spender, uint _value) public returns (bool success);
    function allowance(address _owner, address _spender) public view returns (uint remaining);
    function decimals() public view returns(uint digits);
    event Approval(address indexed _owner, address indexed _spender, uint _value);
}

interface KyberReserveInterface {

    function trade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        public
        payable
        returns(bool);

    function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint);
}

contract PermissionGroups {

    address public admin;
    address public pendingAdmin;
    mapping(address=>bool) internal operators;
    mapping(address=>bool) internal alerters;
    address[] internal operatorsGroup;
    address[] internal alertersGroup;
    uint constant internal MAX_GROUP_SIZE = 50;

    function PermissionGroups() public {
        admin = msg.sender;
    }

    modifier onlyAdmin() {
        require(msg.sender == admin);
        _;
    }

    modifier onlyOperator() {
        require(operators[msg.sender]);
        _;
    }

    modifier onlyAlerter() {
        require(alerters[msg.sender]);
        _;
    }

    function getOperators () external view returns(address[]) {
        return operatorsGroup;
    }

    function getAlerters () external view returns(address[]) {
        return alertersGroup;
    }

    event TransferAdminPending(address pendingAdmin);

    /**
     * @dev Allows the current admin to set the pendingAdmin address.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdmin(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        TransferAdminPending(pendingAdmin);
        pendingAdmin = newAdmin;
    }

    /**
     * @dev Allows the current admin to set the admin in one tx. Useful initial deployment.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdminQuickly(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        TransferAdminPending(newAdmin);
        AdminClaimed(newAdmin, admin);
        admin = newAdmin;
    }

    event AdminClaimed( address newAdmin, address previousAdmin);

    /**
     * @dev Allows the pendingAdmin address to finalize the change admin process.
     */
    function claimAdmin() public {
        require(pendingAdmin == msg.sender);
        AdminClaimed(pendingAdmin, admin);
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }

    event AlerterAdded (address newAlerter, bool isAdd);

    function addAlerter(address newAlerter) public onlyAdmin {
        require(!alerters[newAlerter]); // prevent duplicates.
        require(alertersGroup.length < MAX_GROUP_SIZE);

        AlerterAdded(newAlerter, true);
        alerters[newAlerter] = true;
        alertersGroup.push(newAlerter);
    }

    function removeAlerter (address alerter) public onlyAdmin {
        require(alerters[alerter]);
        alerters[alerter] = false;

        for (uint i = 0; i < alertersGroup.length; ++i) {
            if (alertersGroup[i] == alerter) {
                alertersGroup[i] = alertersGroup[alertersGroup.length - 1];
                alertersGroup.length--;
                AlerterAdded(alerter, false);
                break;
            }
        }
    }

    event OperatorAdded(address newOperator, bool isAdd);

    function addOperator(address newOperator) public onlyAdmin {
        require(!operators[newOperator]); // prevent duplicates.
        require(operatorsGroup.length < MAX_GROUP_SIZE);

        OperatorAdded(newOperator, true);
        operators[newOperator] = true;
        operatorsGroup.push(newOperator);
    }

    function removeOperator (address operator) public onlyAdmin {
        require(operators[operator]);
        operators[operator] = false;

        for (uint i = 0; i < operatorsGroup.length; ++i) {
            if (operatorsGroup[i] == operator) {
                operatorsGroup[i] = operatorsGroup[operatorsGroup.length - 1];
                operatorsGroup.length -= 1;
                OperatorAdded(operator, false);
                break;
            }
        }
    }
}

interface SanityRatesInterface {
    function getSanityRate(ERC20 src, ERC20 dest) public view returns(uint);
}

contract Utils {

    ERC20 constant internal ETH_TOKEN_ADDRESS = ERC20(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee);
    uint  constant internal PRECISION = (10**18);
    uint  constant internal MAX_QTY   = (10**28); // 10B tokens
    uint  constant internal MAX_RATE  = (PRECISION * 10**6); // up to 1M tokens per ETH
    uint  constant internal MAX_DECIMALS = 18;
    uint  constant internal ETH_DECIMALS = 18;
    mapping(address=>uint) internal decimals;

    function setDecimals(ERC20 token) internal {
        if (token == ETH_TOKEN_ADDRESS) decimals[token] = ETH_DECIMALS;
        else decimals[token] = token.decimals();
    }

    function getDecimals(ERC20 token) internal view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS) return ETH_DECIMALS; // save storage access
        uint tokenDecimals = decimals[token];
        // technically, there might be token with decimals 0
        // moreover, very possible that old tokens have decimals 0
        // these tokens will just have higher gas fees.
        if(tokenDecimals == 0) return token.decimals();

        return tokenDecimals;
    }

    function calcDstQty(uint srcQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(srcQty <= MAX_QTY);
        require(rate <= MAX_RATE);

        if (dstDecimals >= srcDecimals) {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            return (srcQty * rate * (10**(dstDecimals - srcDecimals))) / PRECISION;
        } else {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            return (srcQty * rate) / (PRECISION * (10**(srcDecimals - dstDecimals)));
        }
    }

    function calcSrcQty(uint dstQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(dstQty <= MAX_QTY);
        require(rate <= MAX_RATE);
        
        //source quantity is rounded up. to avoid dest quantity being too low.
        uint numerator;
        uint denominator;
        if (srcDecimals >= dstDecimals) {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty * (10**(srcDecimals - dstDecimals)));
            denominator = rate;
        } else {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty);
            denominator = (rate * (10**(dstDecimals - srcDecimals)));
        }
        return (numerator + denominator - 1) / denominator; //avoid rounding down errors
    }
}

contract Withdrawable is PermissionGroups {

    event TokenWithdraw(ERC20 token, uint amount, address sendTo);

    /**
     * @dev Withdraw all ERC20 compatible tokens
     * @param token ERC20 The address of the token contract
     */
    function withdrawToken(ERC20 token, uint amount, address sendTo) external onlyAdmin {
        require(token.transfer(sendTo, amount));
        TokenWithdraw(token, amount, sendTo);
    }

    event EtherWithdraw(uint amount, address sendTo);

    /**
     * @dev Withdraw Ethers
     */
    function withdrawEther(uint amount, address sendTo) external onlyAdmin {
        sendTo.transfer(amount);
        EtherWithdraw(amount, sendTo);
    }
}

contract KyberReserve is KyberReserveInterface, Withdrawable, Utils {

    address public kyberNetwork;
    bool public tradeEnabled;
    ConversionRatesInterface public conversionRatesContract;
    SanityRatesInterface public sanityRatesContract;
    mapping(bytes32=>bool) public approvedWithdrawAddresses; // sha3(token,address)=>bool
    mapping(address=>address) public tokenWallet;

    function KyberReserve(address _kyberNetwork, ConversionRatesInterface _ratesContract, address _admin) public {
        require(_admin != address(0));
        require(_ratesContract != address(0));
        require(_kyberNetwork != address(0));
        kyberNetwork = _kyberNetwork;
        conversionRatesContract = _ratesContract;
        admin = _admin;
        tradeEnabled = true;
    }

    event DepositToken(ERC20 token, uint amount);

    function() public payable {
        DepositToken(ETH_TOKEN_ADDRESS, msg.value);
    }

    event TradeExecute(
        address indexed origin,
        address src,
        uint srcAmount,
        address destToken,
        uint destAmount,
        address destAddress
    );

    function trade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        public
        payable
        returns(bool)
    {
        require(tradeEnabled);
        require(msg.sender == kyberNetwork);

        require(doTrade(srcToken, srcAmount, destToken, destAddress, conversionRate, validate));

        return true;
    }

    event TradeEnabled(bool enable);

    function enableTrade() public onlyAdmin returns(bool) {
        tradeEnabled = true;
        TradeEnabled(true);

        return true;
    }

    function disableTrade() public onlyAlerter returns(bool) {
        tradeEnabled = false;
        TradeEnabled(false);

        return true;
    }

    event WithdrawAddressApproved(ERC20 token, address addr, bool approve);

    function approveWithdrawAddress(ERC20 token, address addr, bool approve) public onlyAdmin {
        approvedWithdrawAddresses[keccak256(token, addr)] = approve;
        WithdrawAddressApproved(token, addr, approve);

        setDecimals(token);
        if ((tokenWallet[token] == address(0x0)) && (token != ETH_TOKEN_ADDRESS)) {
            tokenWallet[token] = this; // by default
            require(token.approve(this, 2 ** 255));
        }
    }

    event NewTokenWallet(ERC20 token, address wallet);

    function setTokenWallet(ERC20 token, address wallet) public onlyAdmin {
        require(wallet != address(0x0));
        tokenWallet[token] = wallet;
        NewTokenWallet(token, wallet);
    }

    event WithdrawFunds(ERC20 token, uint amount, address destination);

    function withdraw(ERC20 token, uint amount, address destination) public onlyOperator returns(bool) {
        require(approvedWithdrawAddresses[keccak256(token, destination)]);

        if (token == ETH_TOKEN_ADDRESS) {
            destination.transfer(amount);
        } else {
            require(token.transferFrom(tokenWallet[token], destination, amount));
        }

        WithdrawFunds(token, amount, destination);

        return true;
    }

    event SetContractAddresses(address network, address rate, address sanity);

    function setContracts(
        address _kyberNetwork,
        ConversionRatesInterface _conversionRates,
        SanityRatesInterface _sanityRates
    )
        public
        onlyAdmin
    {
        require(_kyberNetwork != address(0));
        require(_conversionRates != address(0));

        kyberNetwork = _kyberNetwork;
        conversionRatesContract = _conversionRates;
        sanityRatesContract = _sanityRates;

        SetContractAddresses(kyberNetwork, conversionRatesContract, sanityRatesContract);
    }

    ////////////////////////////////////////////////////////////////////////////
    /// status functions ///////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    function getBalance(ERC20 token) public view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS)
            return this.balance;
        else {
            address wallet = tokenWallet[token];
            uint balanceOfWallet = token.balanceOf(wallet);
            uint allowanceOfWallet = token.allowance(wallet, this);

            return (balanceOfWallet < allowanceOfWallet) ? balanceOfWallet : allowanceOfWallet;
        }
    }

    function getDestQty(ERC20 src, ERC20 dest, uint srcQty, uint rate) public view returns(uint) {
        uint dstDecimals = getDecimals(dest);
        uint srcDecimals = getDecimals(src);

        return calcDstQty(srcQty, srcDecimals, dstDecimals, rate);
    }

    function getSrcQty(ERC20 src, ERC20 dest, uint dstQty, uint rate) public view returns(uint) {
        uint dstDecimals = getDecimals(dest);
        uint srcDecimals = getDecimals(src);

        return calcSrcQty(dstQty, srcDecimals, dstDecimals, rate);
    }

    function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint) {
        ERC20 token;
        bool  isBuy;

        if (!tradeEnabled) return 0;

        if (ETH_TOKEN_ADDRESS == src) {
            isBuy = true;
            token = dest;
        } else if (ETH_TOKEN_ADDRESS == dest) {
            isBuy = false;
            token = src;
        } else {
            return 0; // pair is not listed
        }

        uint rate = conversionRatesContract.getRate(token, blockNumber, isBuy, srcQty);
        uint destQty = getDestQty(src, dest, srcQty, rate);

        if (getBalance(dest) < destQty) return 0;

        if (sanityRatesContract != address(0)) {
            uint sanityRate = sanityRatesContract.getSanityRate(src, dest);
            if (rate > sanityRate) return 0;
        }

        return rate;
    }

    /// @dev do a trade
    /// @param srcToken Src token
    /// @param srcAmount Amount of src token
    /// @param destToken Destination token
    /// @param destAddress Destination address to send tokens to
    /// @param validate If true, additional validations are applicable
    /// @return true iff trade is successful
    function doTrade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        internal
        returns(bool)
    {
        // can skip validation if done at kyber network level
        if (validate) {
            require(conversionRate > 0);
            if (srcToken == ETH_TOKEN_ADDRESS)
                require(msg.value == srcAmount);
            else
                require(msg.value == 0);
        }

        uint destAmount = getDestQty(srcToken, destToken, srcAmount, conversionRate);
        // sanity check
        require(destAmount > 0);

        // add to imbalance
        ERC20 token;
        int tradeAmount;
        if (srcToken == ETH_TOKEN_ADDRESS) {
            tradeAmount = int(destAmount);
            token = destToken;
        } else {
            tradeAmount = -1 * int(srcAmount);
            token = srcToken;
        }

        conversionRatesContract.recordImbalance(
            token,
            tradeAmount,
            0,
            block.number
        );

        // collect src tokens
        if (srcToken != ETH_TOKEN_ADDRESS) {
            require(srcToken.transferFrom(msg.sender, tokenWallet[srcToken], srcAmount));
        }

        // send dest tokens
        if (destToken == ETH_TOKEN_ADDRESS) {
            destAddress.transfer(destAmount);
        } else {
            require(destToken.transferFrom(tokenWallet[destToken], destAddress, destAmount));
        }

        TradeExecute(msg.sender, srcToken, srcAmount, destToken, destAmount, destAddress);

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"enableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"wallet","type":"address"}],"name":"setTokenWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAlerter","type":"address"}],"name":"addAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sanityRatesContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"addr","type":"address"},{"name":"approve","type":"bool"}],"name":"approveWithdrawAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"destination","type":"address"}],"name":"withdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"srcToken","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"destToken","type":"address"},{"name":"destAddress","type":"address"},{"name":"conversionRate","type":"uint256"},{"name":"validate","type":"bool"}],"name":"trade","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAlerters","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcQty","type":"uint256"},{"name":"blockNumber","type":"uint256"}],"name":"getConversionRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"dstQty","type":"uint256"},{"name":"rate","type":"uint256"}],"name":"getSrcQty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kyberNetwork","type":"address"},{"name":"_conversionRates","type":"address"},{"name":"_sanityRates","type":"address"}],"name":"setContracts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyberNetwork","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"conversionRatesContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tradeEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"approvedWithdrawAddresses","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcQty","type":"uint256"},{"name":"rate","type":"uint256"}],"name":"getDestQty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_kyberNetwork","type":"address"},{"name":"_ratesContract","type":"address"},{"name":"_admin","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"DepositToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"origin","type":"address"},{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"srcAmount","type":"uint256"},{"indexed":false,"name":"destToken","type":"address"},{"indexed":false,"name":"destAmount","type":"uint256"},{"indexed":false,"name":"destAddress","type":"address"}],"name":"TradeExecute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"enable","type":"bool"}],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"approve","type":"bool"}],"name":"WithdrawAddressApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"wallet","type":"address"}],"name":"NewTokenWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"destination","type":"address"}],"name":"WithdrawFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"network","type":"address"},{"indexed":false,"name":"rate","type":"address"},{"indexed":false,"name":"sanity","type":"address"}],"name":"SetContractAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAdmin","type":"address"},{"indexed":false,"name":"previousAdmin","type":"address"}],"name":"AdminClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAlerter","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"AlerterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOperator","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"OperatorAdded","type":"event"}]

Deployed Bytecode

0x6060604052600436106101655763ffffffff60e060020a60003504166299d38681146101b957806301a12fd3146101e05780631bc7bfec14610201578063267822471461022657806327a099d8146102555780633ccdbb28146102bb578063408ee7fe146102e457806347e6924f14610303578063546dc71c1461031657806369328dec146103405780636940030f146103695780636cf698111461037c57806375829def146103a857806377f50f97146103c75780637acc8678146103da5780637c423f54146103f95780637cd442721461040c5780639870d7fe14610449578063a7fca95314610468578063a80cbac614610493578063ac8a584a146104b2578063b3066d49146104d1578063b78b842d146104fc578063ce56c4541461050f578063d5847d3314610531578063d621e81314610544578063d7b7024d14610557578063f851a4401461056d578063f8b2cb4f14610580578063fa64dffa1461059f575b7f2d0c0a8842b9944ece1495eb61121621b5e36bd6af3bba0318c695f525aef79f60008051602061204983398151915234604051600160a060020a03909216825260208201526040908101905180910390a1005b34156101c457600080fd5b6101cc6105ca565b604051901515815260200160405180910390f35b34156101eb57600080fd5b6101ff600160a060020a0360043516610658565b005b341561020c57600080fd5b6101ff600160a060020a03600435811690602435166107c8565b341561023157600080fd5b610239610874565b604051600160a060020a03909116815260200160405180910390f35b341561026057600080fd5b610268610883565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102a757808201518382015260200161028f565b505050509050019250505060405180910390f35b34156102c657600080fd5b6101ff600160a060020a0360043581169060243590604435166108eb565b34156102ef57600080fd5b6101ff600160a060020a03600435166109e2565b341561030e57600080fd5b610239610ade565b341561032157600080fd5b6101ff600160a060020a03600435811690602435166044351515610aed565b341561034b57600080fd5b6101cc600160a060020a036004358116906024359060443516610cd7565b341561037457600080fd5b6101cc610eb0565b6101cc600160a060020a03600435811690602435906044358116906064351660843560a4351515610f31565b34156103b357600080fd5b6101ff600160a060020a0360043516610f9e565b34156103d257600080fd5b6101ff611039565b34156103e557600080fd5b6101ff600160a060020a03600435166110d3565b341561040457600080fd5b6102686111b5565b341561041757600080fd5b610437600160a060020a036004358116906024351660443560643561121b565b60405190815260200160405180910390f35b341561045457600080fd5b6101ff600160a060020a0360043516611406565b341561047357600080fd5b610437600160a060020a03600435811690602435166044356064356114d6565b341561049e57600080fd5b610239600160a060020a0360043516611508565b34156104bd57600080fd5b6101ff600160a060020a0360043516611523565b34156104dc57600080fd5b6101ff600160a060020a036004358116906024358116906044351661168f565b341561050757600080fd5b610239611773565b341561051a57600080fd5b6101ff600435600160a060020a0360243516611782565b341561053c57600080fd5b610239611815565b341561054f57600080fd5b6101cc611824565b341561056257600080fd5b6101cc600435611845565b341561057857600080fd5b61023961185a565b341561058b57600080fd5b610437600160a060020a0360043516611869565b34156105aa57600080fd5b610437600160a060020a03600435811690602435166044356064356119bd565b6000805433600160a060020a039081169116146105e657600080fd5b6007805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356001604051901515815260200160405180910390a15060015b90565b6000805433600160a060020a0390811691161461067457600080fd5b600160a060020a03821660009081526003602052604090205460ff16151561069b57600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b6005548110156107c45781600160a060020a03166005828154811015156106e057fe5b600091825260209091200154600160a060020a031614156107bc5760058054600019810190811061070d57fe5b60009182526020909120015460058054600160a060020a03909216918390811061073357fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600580549061076f906000198301611ff4565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a16107c4565b6001016106bd565b5050565b60005433600160a060020a039081169116146107e357600080fd5b600160a060020a03811615156107f857600080fd5b600160a060020a038281166000908152600b6020526040908190208054600160a060020a031916928416929092179091557f81995c7b922889ac0a81e41866106d4046268ea3a9abaae9f9e080a6ce36ee7d908390839051600160a060020a039283168152911660208201526040908101905180910390a15050565b600154600160a060020a031681565b61088b612018565b60048054806020026020016040519081016040528092919081815260200182805480156108e157602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116108c3575b5050505050905090565b60005433600160a060020a0390811691161461090657600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561096357600080fd5b6102c65a03f1151561097457600080fd5b50505060405180519050151561098957600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b60005433600160a060020a039081169116146109fd57600080fd5b600160a060020a03811660009081526003602052604090205460ff1615610a2357600080fd5b60055460329010610a3357600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff191660019081179091556005805490918101610ab28382611ff4565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b600954600160a060020a031681565b60005433600160a060020a03908116911614610b0857600080fd5b80600a600085856040516c01000000000000000000000000600160a060020a039384168102825291909216026014820152602801604051908190039020815260208101919091526040908101600020805460ff1916921515929092179091557fd5fd5351efae1f4bb760079da9f0ff9589e2c3e216337ca9d39cdff573b245c49084908490849051600160a060020a0393841681529190921660208201529015156040808301919091526060909101905180910390a1610bc7836119e4565b600160a060020a038381166000908152600b602052604090205416158015610c065750600160a060020a03831660008051602061204983398151915214155b15610cd257600160a060020a038381166000818152600b60205260408082208054600160a060020a03191630958616179055919263095ea7b39290917f800000000000000000000000000000000000000000000000000000000000000091516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610cac57600080fd5b6102c65a03f11515610cbd57600080fd5b505050604051805190501515610cd257600080fd5b505050565b600160a060020a03331660009081526002602052604081205460ff161515610cfe57600080fd5b600a600085846040516c01000000000000000000000000600160a060020a039384168102825291909216026014820152602801604051908190039020815260208101919091526040016000205460ff161515610d5957600080fd5b600160a060020a0384166000805160206120498339815191521415610dae57600160a060020a03821683156108fc0284604051600060405180830381858888f193505050501515610da957600080fd5b610e52565b600160a060020a038085166000818152600b60205260408082205492936323b872dd9316918691889190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610e2c57600080fd5b6102c65a03f11515610e3d57600080fd5b505050604051805190501515610e5257600080fd5b7fb67719fc33c1f17d31bf3a698690d62066b1e0bae28fcd3c56cf2c015c2863d6848484604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a15060019392505050565b600160a060020a03331660009081526003602052604081205460ff161515610ed757600080fd5b6007805474ff0000000000000000000000000000000000000000191690557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356000604051901515815260200160405180910390a150600190565b60075460009074010000000000000000000000000000000000000000900460ff161515610f5d57600080fd5b60075433600160a060020a03908116911614610f7857600080fd5b610f86878787878787611aa1565b1515610f9157600080fd5b5060019695505050505050565b60005433600160a060020a03908116911614610fb957600080fd5b600160a060020a0381161515610fce57600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a0390811691161461105457600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b60005433600160a060020a039081169116146110ee57600080fd5b600160a060020a038116151561110357600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b6111bd612018565b60058054806020026020016040519081016040528092919081815260200182805480156108e157602002820191906000526020600020908154600160a060020a031681526001909101906020018083116108c3575050505050905090565b600080600080600080600760149054906101000a900460ff16151561124357600095506113f9565b600080516020612049833981519152600160a060020a038b16141561126e57600193508894506112a2565b600080516020612049833981519152600160a060020a038a16141561129957600093508994506112a2565b600095506113f9565b600854600160a060020a031663b8e9c22e8689878c60006040516020015260405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252151560448301526064820152608401602060405180830381600087803b151561131257600080fd5b6102c65a03f1151561132357600080fd5b50505060405180519050925061133b8a8a8a866119bd565b9150816113478a611869565b101561135657600095506113f9565b600954600160a060020a0316156113f557600954600160a060020a031663a58092b78b8b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156113c857600080fd5b6102c65a03f115156113d957600080fd5b5050506040518051915050808311156113f557600095506113f9565b8295505b5050505050949350505050565b60005433600160a060020a0390811691161461142157600080fd5b600160a060020a03811660009081526002602052604090205460ff161561144757600080fd5b6004546032901061145757600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff191660019081179091556004805490918101610ab28382611ff4565b60008060006114e486611df6565b91506114ef87611df6565b90506114fd85828487611eb4565b979650505050505050565b600b60205260009081526040902054600160a060020a031681565b6000805433600160a060020a0390811691161461153f57600080fd5b600160a060020a03821660009081526002602052604090205460ff16151561156657600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b6004548110156107c45781600160a060020a03166004828154811015156115ab57fe5b600091825260209091200154600160a060020a03161415611687576004805460001981019081106115d857fe5b60009182526020909120015460048054600160a060020a0390921691839081106115fe57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560048054600019019061163a9082611ff4565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a16107c4565b600101611588565b60005433600160a060020a039081169116146116aa57600080fd5b600160a060020a03831615156116bf57600080fd5b600160a060020a03821615156116d457600080fd5b60078054600160a060020a03808616600160a060020a0319928316179283905560088054868316908416179081905560098054868416941693909317928390557f7a85322644a4462d8ff5482d2a841a4d231f8cfb3c9f4a50f66f8b2bd568c31c938216929082169116604051600160a060020a03938416815291831660208301529091166040808301919091526060909101905180910390a1505050565b600754600160a060020a031681565b60005433600160a060020a0390811691161461179d57600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f1935050505015156117ce57600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b600854600160a060020a031681565b60075474010000000000000000000000000000000000000000900460ff1681565b600a6020526000908152604090205460ff1681565b600054600160a060020a031681565b6000808080600160a060020a038516600080516020612049833981519152141561189f5730600160a060020a03163193506119b5565b600160a060020a038086166000818152600b602052604080822054909316955090916370a08231918691516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561190c57600080fd5b6102c65a03f1151561191d57600080fd5b5050506040518051925050600160a060020a03851663dd62ed3e843060006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561198757600080fd5b6102c65a03f1151561199857600080fd5b50505060405180519150508082106119b057806119b2565b815b93505b505050919050565b60008060006119cb86611df6565b91506119d687611df6565b90506114fd85828487611f5b565b600160a060020a0381166000805160206120498339815191521415611a2457600160a060020a038116600090815260066020526040902060129055611a9e565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611a6a57600080fd5b6102c65a03f11515611a7b57600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b6000806000808415611af55760008611611aba57600080fd5b600160a060020a038a166000805160206120498339815191521415611aea57348914611ae557600080fd5b611af5565b3415611af557600080fd5b611b018a898b896119bd565b925060008311611b1057600080fd5b600160a060020a038a166000805160206120498339815191521415611b39575086905081611b43565b5088905060001988025b600854600160a060020a031663c6fd2103838360004360405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515611ba957600080fd5b6102c65a03f11515611bba57600080fd5b505050600160a060020a038a1660008051602061204983398151915214611c8057600160a060020a03808b166000818152600b60205260408082205492936323b872dd9333939116918e9190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611c5a57600080fd5b6102c65a03f11515611c6b57600080fd5b505050604051805190501515611c8057600080fd5b600160a060020a0388166000805160206120498339815191521415611cd557600160a060020a03871683156108fc0284604051600060405180830381858888f193505050501515611cd057600080fd5b611d79565b600160a060020a038089166000818152600b60205260408082205492936323b872dd9316918b91889190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611d5357600080fd5b6102c65a03f11515611d6457600080fd5b505050604051805190501515611d7957600080fd5b33600160a060020a03167fea9415385bae08fe9f6dc457b02577166790cde83bb18cc340aac6cb81b824de8b8b8b878c604051600160a060020a039586168152602081019490945291841660408085019190915260608401919091529216608082015260a001905180910390a25060019998505050505050505050565b600080600160a060020a0383166000805160206120498339815191521415611e215760129150611eae565b50600160a060020a038216600090815260066020526040902054801515611eaa5782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611e8857600080fd5b6102c65a03f11515611e9957600080fd5b505050604051805190509150611eae565b8091505b50919050565b600080806b204fce5e3e25026110000000871115611ed157600080fd5b69d3c21bcecceda1000000841115611ee857600080fd5b848610611f195760128587031115611eff57600080fd5b5050828403600a0a8502670de0b6b3a76400000282611f3f565b60128686031115611f2957600080fd5b5050670de0b6b3a76400008502848403600a0a83025b80600182840103811515611f4f57fe5b04979650505050505050565b60006b204fce5e3e25026110000000851115611f7657600080fd5b69d3c21bcecceda1000000821115611f8d57600080fd5b838310611fc05760128484031115611fa457600080fd5b670de0b6b3a7640000858302858503600a0a025b049050611fec565b60128385031115611fd057600080fd5b828403600a0a670de0b6b3a764000002828602811515611fb857fe5b949350505050565b815481835581811511610cd257600083815260209020610cd291810190830161202a565b60206040519081016040526000815290565b61065591905b808211156120445760008155600101612030565b50905600000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea165627a7a723058201d59d0bf4f7bf28f3790eed68bfeae39ef8fe90b7386feae63cfac4f72a648120029

Deployed Bytecode Sourcemap

8681:8114:0:-;;;;;;;;;-1:-1:-1;;;8681:8114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9578:42;-1:-1:-1;;;;;;;;;;;9610:9:0;9578:42;;-1:-1:-1;;;;;9578:42:0;;;;;;;;;;;;;;;;;;;;8681:8114;10335:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3916:463;;;;;;;;;;-1:-1:-1;;;;;3916:463:0;;;;;;;11249:198;;;;;;;;;;-1:-1:-1;;;;;11249:198:0;;;;;;;;;;1540:27;;;;;;;;;;;;;;;-1:-1:-1;;;;;1540:27:0;;;;;;;;;;;;;;2151:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;71:3;;;64:6;52:2;45:3;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;8220:189:0;;;;;;;;;;-1:-1:-1;;;;;8220:189:0;;;;;;;;;;;;;3600:308;;;;;;;;;;-1:-1:-1;;;;;3600:308:0;;;;;8885:47;;;;;;;;;;;;10725:458;;;;;;;;;;-1:-1:-1;;;;;10725:458:0;;;;;;;;;;;;;;11530:461;;;;;;;;;;-1:-1:-1;;;;;11530:461:0;;;;;;;;;;;;;10488:150;;;;;;;;;;;;9834:453;;-1:-1:-1;;;;;9834:453:0;;;;;;;;;;;;;;;;;;;;;;;;2569:187;;;;;;;;;;-1:-1:-1;;;;;2569:187:0;;;;;3338:194;;;;;;;;;;;;2937:223;;;;;;;;;;-1:-1:-1;;;;;2937:223:0;;;;;2257:96;;;;;;;;;;;;13868:888;;;;;;;;;;-1:-1:-1;;;;;13868:888:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4448:319;;;;;;;;;;-1:-1:-1;;;;;4448:319:0;;;;;13597:263;;;;;;;;;;-1:-1:-1;;;;;13597:263:0;;;;;;;;;;;;;;9030:44;;;;;;;;;;-1:-1:-1;;;;;9030:44:0;;;;;4775:481;;;;;;;;;;-1:-1:-1;;;;;4775:481:0;;;;;12081:534;;;;;;;;;;-1:-1:-1;;;;;12081:534:0;;;;;;;;;;;;;;;8758:27;;;;;;;;;;;;8521:153;;;;;;;;;;;;-1:-1:-1;;;;;8521:153:0;;;;;8823:55;;;;;;;;;;;;8792:24;;;;;;;;;;;;8939:55;;;;;;;;;;;;;;1513:20;;;;;;;;;;;;12869:448;;;;;;;;;;-1:-1:-1;;;;;12869:448:0;;;;;13325:264;;;;;;;;;;-1:-1:-1;;;;;13325:264:0;;;;;;;;;;;;;;10335:145;10383:4;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;10400:12;:19;;-1:-1:-1;;10400:19:0;;;;;10430:18;10415:4;10430:18;;;;;;;;;;;;;;;;-1:-1:-1;10468:4:0;1950:1;10335:145;:::o;3916:463::-;4065:6;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;-1:-1:-1;;;;;3993:17:0;;;;;;:8;:17;;;;;;;;3985:26;;;;;;;;-1:-1:-1;;;;;;4022:17:0;;4042:5;4022:17;;;:8;:17;;;;;:25;;-1:-1:-1;;4022:25:0;;;4060:312;4081:13;:20;4077:24;;4060:312;;;4147:7;-1:-1:-1;;;;;4127:27:0;:13;4141:1;4127:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4127:16:0;:27;4123:238;;;4194:13;4208:20;;-1:-1:-1;;4208:24:0;;;4194:39;;;;;;;;;;;;;;;;4175:13;:16;;-1:-1:-1;;;;;4194:39:0;;;;4189:1;;4175:16;;;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;4175:58:0;-1:-1:-1;;;;;4175:58:0;;;;;;;;;;4252:13;:22;;;;;-1:-1:-1;;4252:22:0;;;:::i;:::-;;4293:28;4306:7;4315:5;4293:28;;-1:-1:-1;;;;;4293:28:0;;;;;;;;;;;;;;;;;;;;;;4340:5;;4123:238;4103:3;;4060:312;;;3916:463;;:::o;11249:198::-;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;-1:-1:-1;;;;;11338:22:0;;;;11330:31;;;;;;-1:-1:-1;;;;;11372:18:0;;;;;;;:11;:18;;;;;;;:27;;-1:-1:-1;;;;;;11372:27:0;;;;;;;;;;;11410:29;;11372:18;;:27;;11410:29;-1:-1:-1;;;;;11410:29:0;;;;;;;;;;;;;;;;;;;;;;11249:198;;:::o;1540:27::-;;;-1:-1:-1;;;;;1540:27:0;;:::o;2151:98::-;2198:9;;:::i;:::-;2227:14;2220:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2220:21:0;;;;;;;;;;;;;;;;;;;;;;;2151:98;:::o;8220:189::-;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;8323:5;-1:-1:-1;;;;;8323:14:0;;8338:6;8346;8323:30;;;;;;;;-1:-1:-1;;;8323:30:0;;;;;;-1:-1:-1;;;;;8323:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8315:39;;;;;;;;8365:36;8379:5;8386:6;8394;8365:36;;-1:-1:-1;;;;;8365:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8220:189;;;:::o;3600:308::-;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;-1:-1:-1;;;;;3677:20:0;;;;;;:8;:20;;;;;;;;3676:21;3668:30;;;;;;3740:13;:20;1788:2;3740:37;;3732:46;;;;;;3791:30;3804:10;3816:4;3791:30;;-1:-1:-1;;;;;3791:30:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3832:20:0;;;;;;:8;:20;;;;;:27;;-1:-1:-1;;3832:27:0;3855:4;3832:27;;;;;;3870:13;:30;;:13;;:30;;;:13;:30;;:::i;:::-;-1:-1:-1;3870:30:0;;;;;;;;;;;-1:-1:-1;;;;;;3870:30:0;-1:-1:-1;;;;;3870:30:0;;;;;;;;;;3600:308::o;8885:47::-;;;-1:-1:-1;;;;;8885:47:0;;:::o;10725:458::-;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;10878:7;10826:25;:49;10862:5;10869:4;10852:22;;;-1:-1:-1;;;;;10852:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;10826:49;;;;;;;;;;;;;-1:-1:-1;10826:49:0;:59;;-1:-1:-1;;10826:59:0;;;;;;;;;;;10896:45;;10920:5;;10927:4;;10933:7;;10896:45;-1:-1:-1;;;;;10896:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10954:18;10966:5;10954:11;:18::i;:::-;-1:-1:-1;;;;;10988:18:0;;;11018:3;10988:18;;;:11;:18;;;;;;;:34;10987:68;;;;-1:-1:-1;;;;;;11028:26:0;;-1:-1:-1;;;;;;;;;;;11028:26:0;;10987:68;10983:193;;;-1:-1:-1;;;;;11072:18:0;;;;;;;:11;:18;;;;;;:25;;-1:-1:-1;;;;;;11072:25:0;11093:4;11072:25;;;;;;:18;;11134:13;;11093:4;;11154:8;;11134:29;;;;;;-1:-1:-1;;;11134:29:0;;;;;;-1:-1:-1;;;;;11134:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11126:38;;;;;;;;10725:458;;;:::o;11530:461::-;-1:-1:-1;;;;;2020:10:0;2010:21;11623:4;2010:21;;;:9;:21;;;;;;;;2002:30;;;;;;;;11648:25;:56;11684:5;11691:11;11674:29;;;-1:-1:-1;;;;;11674:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;11648:56;;;;;;;;;;;;;;;;11640:65;;;;;;;;-1:-1:-1;;;;;11722:26:0;;-1:-1:-1;;;;;;;;;;;11722:26:0;11718:188;;;-1:-1:-1;;;;;11765:20:0;;:28;;;;11786:6;11765:28;;;;;;;;;;;;;;;;;;;;;;;;;;11718:188;;;-1:-1:-1;;;;;11834:18:0;;;11853;;;;:11;:18;;;;;;;11834;;;;11853;;11873:11;;11886:6;;11853:18;11834:59;;;;;;-1:-1:-1;;;11834:59:0;;;;;;-1:-1:-1;;;;;11834:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11826:68;;;;;;;;11918:41;11932:5;11939:6;11947:11;11918:41;;-1:-1:-1;;;;;11918:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11979:4:0;11530:461;;;;;:::o;10488:150::-;-1:-1:-1;;;;;2111:10:0;2102:20;10539:4;2102:20;;;:8;:20;;;;;;;;2094:29;;;;;;;;10556:12;:20;;-1:-1:-1;;10556:20:0;;;10587:19;10571:5;10587:19;;;;;;;;;;;;;;;;-1:-1:-1;10626:4:0;10488:150;:::o;9834:453::-;10096:12;;10066:4;;10096:12;;;;;10088:21;;;;;;;;10142:12;;10128:10;-1:-1:-1;;;;;10128:26:0;;;10142:12;;10128:26;10120:35;;;;;;10176:78;10184:8;10194:9;10205;10216:11;10229:14;10245:8;10176:7;:78::i;:::-;10168:87;;;;;;;;-1:-1:-1;10275:4:0;9834:453;;;;;;;;:::o;2569:187::-;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;-1:-1:-1;;;;;2646:22:0;;;;2638:31;;;;;;2701:12;;2680:34;;-1:-1:-1;;;;;2701:12:0;2680:34;;-1:-1:-1;;;;;2680:34:0;;;;;;;;;;;;;;2725:12;:23;;-1:-1:-1;;;;;;2725:23:0;-1:-1:-1;;;;;2725:23:0;;;;;;;;;;2569:187::o;3338:194::-;3386:12;;3402:10;-1:-1:-1;;;;;3386:26:0;;;:12;;:26;3378:35;;;;;;3437:12;;;3451:5;3424:33;;-1:-1:-1;;;;;3437:12:0;;;;3451:5;3424:33;;-1:-1:-1;;;;;3424:33:0;;;;;;;;;;;;;;;;;;;;;;3476:12;;;;3468:20;;-1:-1:-1;;;;;;3468:20:0;;;-1:-1:-1;;;;;3476:12:0;;3468:20;;;;3499:25;;;3338:194::o;2937:223::-;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;-1:-1:-1;;;;;3021:22:0;;;;3013:31;;;;;;3055:30;3076:8;3055:30;;-1:-1:-1;;;;;3055:30:0;;;;;;;;;;;;;;3119:5;;3096:29;;3109:8;;-1:-1:-1;;;;;3119:5:0;3096:29;;-1:-1:-1;;;;;3096:29:0;;;;;;;;;;;;;;;;;;;;;;3136:5;:16;;-1:-1:-1;;;;;;3136:16:0;-1:-1:-1;;;;;3136:16:0;;;;;;;;;;2937:223::o;2257:96::-;2303:9;;:::i;:::-;2332:13;2325:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2325:20:0;;;;;;;;;;;;;;;;;;;;;;2257:96;:::o;13868:888::-;13969:4;13986:11;14008;14346:9;14435:12;14605:15;14037:12;;;;;;;;;;;14036:13;14032:27;;;14058:1;14051:8;;;;14032:27;-1:-1:-1;;;;;;;;;;;;;;;;14076:24:0;;;14072:262;;;14125:4;14117:12;;14152:4;14144:12;;14072:262;;;-1:-1:-1;;;;;;;;;;;;;;;;14178:25:0;;;14174:160;;;14228:5;14220:13;;14256:3;14248:11;;14174:160;;;14299:1;14292:8;;;;14174:160;14358:23;;-1:-1:-1;;;;;14358:23:0;:31;14390:5;14397:11;14410:5;14417:6;14358:23;:66;;;;;;;-1:-1:-1;;;14358:66:0;;;;;;-1:-1:-1;;;;;14358:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14346:78;;14450:35;14461:3;14466:4;14472:6;14480:4;14450:10;:35::i;:::-;14435:50;;14521:7;14502:16;14513:4;14502:10;:16::i;:::-;:26;14498:40;;;14537:1;14530:8;;;;14498:40;14555:19;;-1:-1:-1;;;;;14555:19:0;:33;14551:174;;14623:19;;-1:-1:-1;;;;;14623:19:0;:33;14657:3;14662:4;14623:19;:44;;;;;;;-1:-1:-1;;;14623:44:0;;;;;;-1:-1:-1;;;;;14623:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14686:17:0;;;14682:31;;;14712:1;14705:8;;;;14682:31;14744:4;14737:11;;13868:888;;;;;;;;;;;;:::o;4448:319::-;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;-1:-1:-1;;;;;4527:22:0;;;;;;:9;:22;;;;;;;;4526:23;4518:32;;;;;;4592:14;:21;1788:2;4592:38;;4584:47;;;;;;4644:32;4658:11;4671:4;4644:32;;-1:-1:-1;;;;;4644:32:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4687:22:0;;;;;;:9;:22;;;;;:29;;-1:-1:-1;;4687:29:0;4712:4;4687:29;;;;;;4727:14;:32;;:14;;:32;;;:14;:32;;:::i;13597:263::-;13683:4;13700:16;13747;13719:17;13731:4;13719:11;:17::i;:::-;13700:36;;13766:16;13778:3;13766:11;:16::i;:::-;13747:35;;13802:50;13813:6;13821:11;13834;13847:4;13802:10;:50::i;:::-;13795:57;13597:263;-1:-1:-1;;;;;;;13597:263:0:o;9030:44::-;;;;;;;;;;;;-1:-1:-1;;;;;9030:44:0;;:::o;4775:481::-;4930:6;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;-1:-1:-1;;;;;4854:19:0;;;;;;:9;:19;;;;;;;;4846:28;;;;;;;;-1:-1:-1;;;;;;4885:19:0;;4907:5;4885:19;;;:9;:19;;;;;:27;;-1:-1:-1;;4885:27:0;;;4925:324;4946:14;:21;4942:25;;4925:324;;;5014:8;-1:-1:-1;;;;;4993:29:0;:14;5008:1;4993:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4993:17:0;:29;4989:249;;;5063:14;5078:21;;-1:-1:-1;;5078:25:0;;;5063:41;;;;;;;;;;;;;;;;5043:14;:17;;-1:-1:-1;;;;;5063:41:0;;;;5058:1;;5043:17;;;;;;;;;;;;;;;:61;;-1:-1:-1;;;;;;5043:61:0;-1:-1:-1;;;;;5043:61:0;;;;;;;;;;5123:14;:26;;-1:-1:-1;;5123:26:0;;;;;;:::i;:::-;;5168:30;5182:8;5192:5;5168:30;;-1:-1:-1;;;;;5168:30:0;;;;;;;;;;;;;;;;;;;;;;5217:5;;4989:249;4969:3;;4925:324;;12081:534;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;-1:-1:-1;;;;;12297:27:0;;;;12289:36;;;;;;-1:-1:-1;;;;;12344:30:0;;;;12336:39;;;;;;12388:12;:28;;-1:-1:-1;;;;;12388:28:0;;;-1:-1:-1;;;;;;12388:28:0;;;;;;;;12427:23;:42;;;;;;;;;;;;;12480:19;:34;;;;;;;;;;;;;;;12527:80;;12548:12;;;12562:23;;;;12587:19;12527:80;;-1:-1:-1;;;;;12527:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12081:534;;;:::o;8758:27::-;;;-1:-1:-1;;;;;8758:27:0;;:::o;8521:153::-;1933:5;;1919:10;-1:-1:-1;;;;;1919:19:0;;;1933:5;;1919:19;1911:28;;;;;;-1:-1:-1;;;;;8603:15:0;;:23;;;;8619:6;8603:23;;;;;;;;;;;;;;;;;;;;;;;;;;8637:29;8651:6;8659;8637:29;;;;;-1:-1:-1;;;;;8637:29:0;;;;;;;;;;;;;;;;8521:153;;:::o;8823:55::-;;;-1:-1:-1;;;;;8823:55:0;;:::o;8792:24::-;;;;;;;;;:::o;8939:55::-;;;;;;;;;;;;;;;:::o;1513:20::-;;;-1:-1:-1;;;;;1513:20:0;;:::o;12869:448::-;12922:4;;;;-1:-1:-1;;;;;12943:26:0;;-1:-1:-1;;;;;;;;;;;12943:26:0;12939:371;;;12991:4;-1:-1:-1;;;;;12991:12:0;;12984:19;;;;12939:371;-1:-1:-1;;;;;13051:18:0;;;;;;;:11;:18;;;;;;;;;;;-1:-1:-1;13051:18:0;;13107:15;;13051:18;;13107:23;;;;;;-1:-1:-1;;;13107:23:0;;;;;;-1:-1:-1;;;;;13107:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;13170:15:0;;;13186:6;13194:4;13170:29;;;;;;;;-1:-1:-1;;;13170:29:0;;;;;;-1:-1:-1;;;;;13170:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13224:35:0;;;13223:75;;13281:17;13223:75;;;13263:15;13223:75;13216:82;;12939:371;12869:448;;;;;;:::o;13325:264::-;13412:4;13429:16;13476;13448:17;13460:4;13448:11;:17::i;:::-;13429:36;;13495:16;13507:3;13495:11;:16::i;:::-;13476:35;;13531:50;13542:6;13550:11;13563;13576:4;13531:10;:50::i;5856:174::-;-1:-1:-1;;;;;5914:26:0;;-1:-1:-1;;;;;;;;;;;5914:26:0;5910:112;;;-1:-1:-1;;;;;5942:15:0;;;;;;:8;:15;;;;;5798:2;5942:30;;5910:112;;;6006:5;-1:-1:-1;;;;;6006:14:0;;:16;;;;;;;;;;;-1:-1:-1;;;6006:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5988:15:0;;;;;;:8;:15;;;;;:34;-1:-1:-1;5910:112:0;5856:174;:::o;15098:1694::-;15317:4;15640:15;15817:11;15839:15;15406:8;15402:226;;;15456:1;15439:18;;15431:27;;;;;;-1:-1:-1;;;;;15477:29:0;;-1:-1:-1;;;;;;;;;;;15477:29:0;15473:143;;;15533:9;:22;;15525:31;;;;;;15473:143;;;15601:9;:14;15593:23;;;;;;15658:58;15669:8;15679:9;15690;15701:14;15658:10;:58::i;:::-;15640:76;-1:-1:-1;15773:1:0;15760:14;;15752:23;;;;;;-1:-1:-1;;;;;15869:29:0;;-1:-1:-1;;;;;;;;;;;15869:29:0;15865:220;;;-1:-1:-1;15967:9:0;;-1:-1:-1;15933:10:0;15865:220;;;-1:-1:-1;16065:8:0;;-1:-1:-1;;;16023:19:0;;15865:220;16097:23;;-1:-1:-1;;;;;16097:23:0;:39;16151:5;16171:11;16097:23;16213:12;16097:139;;-1:-1:-1;;;16097:139:0;;;;;;-1:-1:-1;;;;;16097:139:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16097:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;16284:29:0;;-1:-1:-1;;;;;;;;;;;16284:29:0;16280:138;;-1:-1:-1;;;;;16338:21:0;;;16372;;;;:11;:21;;;;;;;16338;;;;16360:10;;16372:21;;;16395:9;;16372:21;16338:67;;;;;;-1:-1:-1;;;16338:67:0;;;;;;-1:-1:-1;;;;;16338:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16330:76;;;;;;;;-1:-1:-1;;;;;16463:30:0;;-1:-1:-1;;;;;;;;;;;16463:30:0;16459:208;;;-1:-1:-1;;;;;16510:20:0;;:32;;;;16531:10;16510:32;;;;;;;;;;;;;;;;;;;;;;;;;;16459:208;;;-1:-1:-1;;;;;16583:22:0;;;16606;;;;:11;:22;;;;;;;16583;;;;16606;;16630:11;;16643:10;;16606:22;16583:71;;;;;;-1:-1:-1;;;16583:71:0;;;;;;-1:-1:-1;;;;;16583:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16575:80;;;;;;;;16692:10;-1:-1:-1;;;;;16679:81:0;;16704:8;16714:9;16725;16736:10;16748:11;16679:81;;-1:-1:-1;;;;;16679:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16780:4:0;;15098:1694;-1:-1:-1;;;;;;;;;15098:1694:0:o;6038:479::-;6094:4;;-1:-1:-1;;;;;6115:26:0;;-1:-1:-1;;;;;;;;;;;6115:26:0;6111:51;;;5798:2;6143:19;;;;6111:51;-1:-1:-1;;;;;;6217:15:0;;;;;;:8;:15;;;;;;6433:18;;6430:46;;;6460:5;-1:-1:-1;;;;;6460:14:0;;:16;;;;;;;;;;;-1:-1:-1;;;6460:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6453:23;;;;6430:46;6496:13;6489:20;;6038:479;;;;;:::o;7102:861::-;7204:4;;;5594:6;7229:17;;;7221:26;;;;;;5659:17;7266:16;;;7258:25;;;;;;7440:26;;;7436:430;;5750:2;7492:25;;;7491:43;;7483:52;;;;;;-1:-1:-1;;7590:25:0;;;7585:2;:31;7563:54;;5543:6;7563:54;7647:4;7436:430;;;5750:2;7693:25;;;7692:43;;7684:52;;;;;;-1:-1:-1;;5543:6:0;7764:18;;7826:25;;;7821:2;:31;7813:40;;7436:430;7915:11;7910:1;7896:11;7884:9;:23;:27;7883:43;;;;;;;;;7102:861;-1:-1:-1;;;;;;;7102:861:0:o;6525:569::-;6627:4;5594:6;6652:17;;;6644:26;;;;;;5659:17;6689:16;;;6681:25;;;;;;6723:26;;;6719:368;;5750:2;6775:25;;;6774:43;;6766:52;;;;;;5543:6;6841:13;;;6863:25;;;6858:2;:31;6841:49;6840:63;;6833:70;;;;6719:368;5750:2;6945:25;;;6944:43;;6936:52;;;;;;7061:11;7047;:25;7042:2;:31;5543:6;7029:45;7020:4;7011:6;:13;7010:65;;;;;;6719:368;6525:569;;;;;;:::o;8681:8114::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://1d59d0bf4f7bf28f3790eed68bfeae39ef8fe90b7386feae63cfac4f72a64812

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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