ETH Price: $3,192.32 (-0.30%)

Contract

0x3f06DB6334435fF4150e14aD69F6280BF8E8dA64
 
Transaction Hash
Method
Block
From
To
Rely125479822021-06-01 10:19:031259 days ago1622542743IN
0x3f06DB63...BF8E8dA64
0 ETH0.001253225
0x60806040125174632021-05-27 16:36:201263 days ago1622133380IN
 Create: Tranche
0 ETH0.1504560645

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Tranche

Compiler Version
v0.5.15+commit.6a57276f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-27
*/

// Copyright (C) 2020 Centrifuge
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

pragma solidity >=0.5.15 <0.6.0;
pragma experimental ABIEncoderV2;

// Copyright (C) Centrifuge 2020, based on MakerDAO dss https://github.com/makerdao/dss
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

pragma solidity >=0.5.15 <0.6.0;

/// note.sol -- the `note' modifier, for logging calls as events

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

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

pragma solidity >=0.4.23;

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

    modifier note {
        bytes32 foo;
        bytes32 bar;
        uint256 wad;

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

        _;

        emit LogNote(msg.sig, msg.sender, foo, bar, wad, msg.data);
    }
}


contract Auth is DSNote {
    mapping (address => uint) public wards;
    function rely(address usr) public auth note { wards[usr] = 1; }
    function deny(address usr) public auth note { wards[usr] = 0; }
    modifier auth { require(wards[msg.sender] == 1); _; }
}

// Copyright (C) 2018 Rain <[email protected]>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

pragma solidity >=0.5.15 <0.6.0;

contract Math {
    uint256 constant ONE = 10 ** 27;

    function safeAdd(uint x, uint y) public pure returns (uint z) {
        require((z = x + y) >= x, "safe-add-failed");
    }

    function safeSub(uint x, uint y) public pure returns (uint z) {
        require((z = x - y) <= x, "safe-sub-failed");
    }

    function safeMul(uint x, uint y) public pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, "safe-mul-failed");
    }

    function safeDiv(uint x, uint y) public pure returns (uint z) {
        z = x / y;
    }

    function rmul(uint x, uint y) public pure returns (uint z) {
        z = safeMul(x, y) / ONE;
    }

    function rdiv(uint x, uint y) public pure returns (uint z) {
        require(y > 0, "division by zero");
        z = safeAdd(safeMul(x, ONE), y / 2) / y;
    }

    function rdivup(uint x, uint y) internal pure returns (uint z) {
        require(y > 0, "division by zero");
        // always rounds up
        z = safeAdd(safeMul(x, ONE), safeSub(y, 1)) / y;
    }


}

// Copyright (C) 2020 Centrifuge
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

pragma solidity >=0.5.15 <0.6.0;

contract FixedPoint {
    struct Fixed27 {
        uint value;
    }
}


interface ERC20Like {
    function balanceOf(address) external view returns (uint);
    function transferFrom(address, address, uint) external returns (bool);
    function transfer(address to, uint amount) external returns (bool);
    function mint(address, uint) external;
    function burn(address, uint) external;
    function totalSupply() external view returns (uint);
    function approve(address usr, uint amount) external;
}

interface ReserveLike {
    function deposit(uint amount) external;
    function payout(uint amount) external;
    function totalBalanceAvailable() external returns (uint);
}

interface EpochTickerLike {
    function currentEpoch() external view returns (uint);
    function lastEpochExecuted() external view returns(uint);
}

contract Tranche is Math, Auth, FixedPoint {
    mapping(uint => Epoch) public epochs;

    struct Epoch {
        // denominated in 10^27
        // percentage ONE == 100%
        Fixed27 redeemFulfillment;
        // denominated in 10^27
        // percentage ONE == 100%
        Fixed27 supplyFulfillment;
        // tokenPrice after end of epoch
        Fixed27 tokenPrice;
    }

    struct UserOrder {
        uint orderedInEpoch;
        uint supplyCurrencyAmount;
        uint redeemTokenAmount;
    }

    mapping(address => UserOrder) public users;

    uint public  totalSupply;
    uint public  totalRedeem;

    ERC20Like public currency;
    ERC20Like public token;
    ReserveLike public reserve;
    EpochTickerLike public epochTicker;

    // additional requested currency if the reserve could not fulfill a tranche request
    uint public requestedCurrency;
    address self;

    bool public waitingForUpdate = false;

    modifier orderAllowed(address usr) {
        require((users[usr].supplyCurrencyAmount == 0 && users[usr].redeemTokenAmount == 0)
        || users[usr].orderedInEpoch == epochTicker.currentEpoch(), "disburse required");
        _;
    }

    constructor(address currency_, address token_) public {
        wards[msg.sender] = 1;
        token = ERC20Like(token_);
        currency = ERC20Like(currency_);
        self = address(this);
    }

    function balance() external view returns (uint) {
        return currency.balanceOf(self);
    }

    function tokenSupply() external view returns (uint) {
        return token.totalSupply();
    }

    function depend(bytes32 contractName, address addr) public auth {
        if (contractName == "token") {token = ERC20Like(addr);}
        else if (contractName == "currency") {currency = ERC20Like(addr);}
        else if (contractName == "reserve") {reserve = ReserveLike(addr);}
        else if (contractName == "epochTicker") {epochTicker = EpochTickerLike(addr);}
        else revert();
    }

    // supplyOrder function can be used to place or revoke an supply
    function supplyOrder(address usr, uint newSupplyAmount) public auth orderAllowed(usr) {
        users[usr].orderedInEpoch = epochTicker.currentEpoch();

        uint currentSupplyAmount = users[usr].supplyCurrencyAmount;

        users[usr].supplyCurrencyAmount = newSupplyAmount;

        totalSupply = safeAdd(safeTotalSub(totalSupply, currentSupplyAmount), newSupplyAmount);

        if (newSupplyAmount > currentSupplyAmount) {
            uint delta = safeSub(newSupplyAmount, currentSupplyAmount);
            require(currency.transferFrom(usr, self, delta), "currency-transfer-failed");
            return;
        }
        uint delta = safeSub(currentSupplyAmount, newSupplyAmount);
        if (delta > 0) {
            _safeTransfer(currency, usr, delta);
        }
    }

    // redeemOrder function can be used to place or revoke a redeem
    function redeemOrder(address usr, uint newRedeemAmount) public auth orderAllowed(usr) {
        users[usr].orderedInEpoch = epochTicker.currentEpoch();

        uint currentRedeemAmount = users[usr].redeemTokenAmount;
        users[usr].redeemTokenAmount = newRedeemAmount;
        totalRedeem = safeAdd(safeTotalSub(totalRedeem, currentRedeemAmount), newRedeemAmount);

        if (newRedeemAmount > currentRedeemAmount) {
            uint delta = safeSub(newRedeemAmount, currentRedeemAmount);
            require(token.transferFrom(usr, self, delta), "token-transfer-failed");
            return;
        }

        uint delta = safeSub(currentRedeemAmount, newRedeemAmount);
        if (delta > 0) {
            _safeTransfer(token, usr, delta);
        }
    }

    function calcDisburse(address usr) public view returns(uint payoutCurrencyAmount, uint payoutTokenAmount, uint remainingSupplyCurrency, uint remainingRedeemToken) {
        return calcDisburse(usr, epochTicker.lastEpochExecuted());
    }

    ///  calculates the current disburse of a user starting from the ordered epoch until endEpoch
    function calcDisburse(address usr, uint endEpoch) public view returns(uint payoutCurrencyAmount, uint payoutTokenAmount, uint remainingSupplyCurrency, uint remainingRedeemToken) {
        uint epochIdx = users[usr].orderedInEpoch;
        uint lastEpochExecuted = epochTicker.lastEpochExecuted();

        // no disburse possible in this epoch
        if (users[usr].orderedInEpoch == epochTicker.currentEpoch()) {
            return (payoutCurrencyAmount, payoutTokenAmount, users[usr].supplyCurrencyAmount, users[usr].redeemTokenAmount);
        }

        if (endEpoch > lastEpochExecuted) {
            // it is only possible to disburse epochs which are already over
            endEpoch = lastEpochExecuted;
        }

        remainingSupplyCurrency = users[usr].supplyCurrencyAmount;
        remainingRedeemToken = users[usr].redeemTokenAmount;
        uint amount = 0;

        // calculates disburse amounts as long as remaining tokens or currency is left or the end epoch is reached
        while(epochIdx <= endEpoch && (remainingSupplyCurrency != 0 || remainingRedeemToken != 0 )){
            if(remainingSupplyCurrency != 0) {
                amount = rmul(remainingSupplyCurrency, epochs[epochIdx].supplyFulfillment.value);
                // supply currency payout in token
                if (amount != 0) {
                    payoutTokenAmount = safeAdd(payoutTokenAmount, safeDiv(safeMul(amount, ONE), epochs[epochIdx].tokenPrice.value));
                    remainingSupplyCurrency = safeSub(remainingSupplyCurrency, amount);
                }
            }

            if(remainingRedeemToken != 0) {
                amount = rmul(remainingRedeemToken, epochs[epochIdx].redeemFulfillment.value);
                // redeem token payout in currency
                if (amount != 0) {
                    payoutCurrencyAmount = safeAdd(payoutCurrencyAmount, rmul(amount, epochs[epochIdx].tokenPrice.value));
                    remainingRedeemToken = safeSub(remainingRedeemToken, amount);
                }
            }
            epochIdx = safeAdd(epochIdx, 1);
        }

        return (payoutCurrencyAmount, payoutTokenAmount, remainingSupplyCurrency, remainingRedeemToken);
    }

    // the disburse function can be used after an epoch is over to receive currency and tokens
    function disburse(address usr) public auth returns (uint payoutCurrencyAmount, uint payoutTokenAmount, uint remainingSupplyCurrency, uint remainingRedeemToken) {
        return disburse(usr, epochTicker.lastEpochExecuted());
    }

    function _safeTransfer(ERC20Like erc20, address usr, uint amount) internal returns(uint) {
        uint max = erc20.balanceOf(self);
        if(amount > max) {
            amount = max;
        }
        require(erc20.transfer(usr, amount), "token-transfer-failed");
        return amount;
    }

    // the disburse function can be used after an epoch is over to receive currency and tokens
    function disburse(address usr,  uint endEpoch) public auth returns (uint payoutCurrencyAmount, uint payoutTokenAmount, uint remainingSupplyCurrency, uint remainingRedeemToken) {
        require(users[usr].orderedInEpoch <= epochTicker.lastEpochExecuted(), "epoch-not-executed-yet");

        uint lastEpochExecuted = epochTicker.lastEpochExecuted();

        if (endEpoch > lastEpochExecuted) {
            // it is only possible to disburse epochs which are already over
            endEpoch = lastEpochExecuted;
        }

        (payoutCurrencyAmount, payoutTokenAmount,
        remainingSupplyCurrency, remainingRedeemToken) = calcDisburse(usr, endEpoch);
        users[usr].supplyCurrencyAmount = remainingSupplyCurrency;
        users[usr].redeemTokenAmount = remainingRedeemToken;
        // if lastEpochExecuted is disbursed, orderInEpoch is at the current epoch again
        // which allows to change the order. This is only possible if all previous epochs are disbursed
        users[usr].orderedInEpoch = safeAdd(endEpoch, 1);


        if (payoutCurrencyAmount > 0) {
            payoutCurrencyAmount = _safeTransfer(currency, usr, payoutCurrencyAmount);
        }

        if (payoutTokenAmount > 0) {
            payoutTokenAmount = _safeTransfer(token, usr, payoutTokenAmount);
        }
        return (payoutCurrencyAmount, payoutTokenAmount, remainingSupplyCurrency, remainingRedeemToken);
    }


    // called by epoch coordinator in epoch execute method
    function epochUpdate(uint epochID, uint supplyFulfillment_, uint redeemFulfillment_, uint tokenPrice_, uint epochSupplyOrderCurrency, uint epochRedeemOrderCurrency) public auth {
        require(waitingForUpdate == true);
        waitingForUpdate = false;

        epochs[epochID].supplyFulfillment.value = supplyFulfillment_;
        epochs[epochID].redeemFulfillment.value = redeemFulfillment_;
        epochs[epochID].tokenPrice.value = tokenPrice_;

        // currency needs to be converted to tokenAmount with current token price
        uint redeemInToken = 0;
        uint supplyInToken = 0;
        if(tokenPrice_ > 0) {
            supplyInToken = rdiv(epochSupplyOrderCurrency, tokenPrice_);
            redeemInToken = safeDiv(safeMul(epochRedeemOrderCurrency, ONE), tokenPrice_);
        }

        // calculates the delta between supply and redeem for currency and deposit or get them from the reserve
        adjustCurrencyBalance(epochID, epochSupplyOrderCurrency, epochRedeemOrderCurrency);
        // calculates the delta between supply and redeem for tokens and burn or mint them
        adjustTokenBalance(epochID, supplyInToken, redeemInToken);

        // the unfulfilled orders (1-fulfillment) is automatically ordered
        totalSupply = safeAdd(safeTotalSub(totalSupply, epochSupplyOrderCurrency), rmul(epochSupplyOrderCurrency, safeSub(ONE, epochs[epochID].supplyFulfillment.value)));
        totalRedeem = safeAdd(safeTotalSub(totalRedeem, redeemInToken), rmul(redeemInToken, safeSub(ONE, epochs[epochID].redeemFulfillment.value)));
    }
    
    function closeEpoch() public auth returns (uint totalSupplyCurrency_, uint totalRedeemToken_) {
        require(waitingForUpdate == false);
        waitingForUpdate = true;
        return (totalSupply, totalRedeem);
    }

    function safeBurn(uint tokenAmount) internal {
        uint max = token.balanceOf(self);
        if(tokenAmount > max) {
            tokenAmount = max;
        }
        token.burn(self, tokenAmount);
    }

    function safePayout(uint currencyAmount) internal returns(uint payoutAmount) {
        uint max = reserve.totalBalanceAvailable();

        if(currencyAmount > max) {
            // currently reserve can't fulfill the entire request
            currencyAmount = max;
        }
        reserve.payout(currencyAmount);
        return currencyAmount;
    }

    function payoutRequestedCurrency() public {
        if(requestedCurrency > 0) {
            uint payoutAmount = safePayout(requestedCurrency);
            requestedCurrency = safeSub(requestedCurrency, payoutAmount);
        }
    }
    // adjust token balance after epoch execution -> min/burn tokens
    function adjustTokenBalance(uint epochID, uint epochSupplyToken, uint epochRedeemToken) internal {
        // mint token amount for supply

        uint mintAmount = 0;
        if (epochs[epochID].tokenPrice.value > 0) {
            mintAmount = rmul(epochSupplyToken, epochs[epochID].supplyFulfillment.value);
        }

        // burn token amount for redeem
        uint burnAmount = rmul(epochRedeemToken, epochs[epochID].redeemFulfillment.value);
        // burn tokens that are not needed for disbursement
        if (burnAmount > mintAmount) {
            uint diff = safeSub(burnAmount, mintAmount);
            safeBurn(diff);
            return;
        }
        // mint tokens that are required for disbursement
        uint diff = safeSub(mintAmount, burnAmount);
        if (diff > 0) {
            token.mint(self, diff);
        }
    }

    // additional minting of tokens produces a dilution of all token holders
    // interface is required for adapters
    function mint(address usr, uint amount) public auth {
        token.mint(usr, amount);
    }

    // adjust currency balance after epoch execution -> receive/send currency from/to reserve
    function adjustCurrencyBalance(uint epochID, uint epochSupply, uint epochRedeem) internal {
        // currency that was supplied in this epoch
        uint currencySupplied = rmul(epochSupply, epochs[epochID].supplyFulfillment.value);
        // currency required for redemption
        uint currencyRequired = rmul(epochRedeem, epochs[epochID].redeemFulfillment.value);

        if (currencySupplied > currencyRequired) {
            // send surplus currency to reserve
            uint diff = safeSub(currencySupplied, currencyRequired);
            currency.approve(address(reserve), diff);
            reserve.deposit(diff);
            return;
        }
        uint diff = safeSub(currencyRequired, currencySupplied);
        if (diff > 0) {
            // get missing currency from reserve
            uint payoutAmount = safePayout(diff);
            if(payoutAmount < diff) {
                // reserve couldn't fulfill the entire request
                requestedCurrency = safeAdd(requestedCurrency, safeSub(diff, payoutAmount));
            }
        }
    }

    // recovery transfer can be used by governance to recover funds if tokens are stuck
    function authTransfer(address erc20, address usr, uint amount) public auth {
        ERC20Like(erc20).transfer(usr, amount);
    }

    // due to rounding in token & currency conversions currency & token balances might be off by 1 wei with the totalSupply/totalRedeem amounts.
    // in order to prevent an underflow error, 0 is returned when amount to be subtracted is bigger then the total value.
    function safeTotalSub(uint total, uint amount) internal returns (uint) {
        if (total < amount) {
            return 0;
        }
        return safeSub(total, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"currency_","type":"address"},{"internalType":"address","name":"token_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"bytes4","name":"sig","type":"bytes4"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":true,"internalType":"bytes32","name":"foo","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"bar","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"fax","type":"bytes"}],"name":"LogNote","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"erc20","type":"address"},{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"authTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"calcDisburse","outputs":[{"internalType":"uint256","name":"payoutCurrencyAmount","type":"uint256"},{"internalType":"uint256","name":"payoutTokenAmount","type":"uint256"},{"internalType":"uint256","name":"remainingSupplyCurrency","type":"uint256"},{"internalType":"uint256","name":"remainingRedeemToken","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"endEpoch","type":"uint256"}],"name":"calcDisburse","outputs":[{"internalType":"uint256","name":"payoutCurrencyAmount","type":"uint256"},{"internalType":"uint256","name":"payoutTokenAmount","type":"uint256"},{"internalType":"uint256","name":"remainingSupplyCurrency","type":"uint256"},{"internalType":"uint256","name":"remainingRedeemToken","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"closeEpoch","outputs":[{"internalType":"uint256","name":"totalSupplyCurrency_","type":"uint256"},{"internalType":"uint256","name":"totalRedeemToken_","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currency","outputs":[{"internalType":"contract ERC20Like","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"contractName","type":"bytes32"},{"internalType":"address","name":"addr","type":"address"}],"name":"depend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"disburse","outputs":[{"internalType":"uint256","name":"payoutCurrencyAmount","type":"uint256"},{"internalType":"uint256","name":"payoutTokenAmount","type":"uint256"},{"internalType":"uint256","name":"remainingSupplyCurrency","type":"uint256"},{"internalType":"uint256","name":"remainingRedeemToken","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"endEpoch","type":"uint256"}],"name":"disburse","outputs":[{"internalType":"uint256","name":"payoutCurrencyAmount","type":"uint256"},{"internalType":"uint256","name":"payoutTokenAmount","type":"uint256"},{"internalType":"uint256","name":"remainingSupplyCurrency","type":"uint256"},{"internalType":"uint256","name":"remainingRedeemToken","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"epochTicker","outputs":[{"internalType":"contract EpochTickerLike","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"epochID","type":"uint256"},{"internalType":"uint256","name":"supplyFulfillment_","type":"uint256"},{"internalType":"uint256","name":"redeemFulfillment_","type":"uint256"},{"internalType":"uint256","name":"tokenPrice_","type":"uint256"},{"internalType":"uint256","name":"epochSupplyOrderCurrency","type":"uint256"},{"internalType":"uint256","name":"epochRedeemOrderCurrency","type":"uint256"}],"name":"epochUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"epochs","outputs":[{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct FixedPoint.Fixed27","name":"redeemFulfillment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct FixedPoint.Fixed27","name":"supplyFulfillment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct FixedPoint.Fixed27","name":"tokenPrice","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"payoutRequestedCurrency","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"rdiv","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"newRedeemAmount","type":"uint256"}],"name":"redeemOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"requestedCurrency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reserve","outputs":[{"internalType":"contract ReserveLike","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"rmul","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeAdd","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeDiv","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeMul","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeSub","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"newSupplyAmount","type":"uint256"}],"name":"supplyOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"contract ERC20Like","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"orderedInEpoch","type":"uint256"},{"internalType":"uint256","name":"supplyCurrencyAmount","type":"uint256"},{"internalType":"uint256","name":"redeemTokenAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"waitingForUpdate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040526000600a60146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162003c0038038062003c00833981810160405262000052919081019062000178565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555030600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000207565b6000815190506200017281620001ed565b92915050565b600080604083850312156200018c57600080fd5b60006200019c8582860162000161565b9250506020620001af8582860162000161565b9150509250929050565b6000620001c682620001cd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620001f881620001b9565b81146200020457600080fd5b50565b6139e980620002176000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80639adc339d1161011a578063c6b61e4c116100ad578063e5a6b10f1161007c578063e5a6b10f146105f8578063e6cb901314610616578063ed12a99c14610646578063f5a09bb414610664578063fc0c546a14610697576101fb565b8063c6b61e4c14610559578063cd3293de1461058b578063cdd5f2c8146105a9578063d05c78da146105c8576101fb565b8063a87430ba116100e9578063a87430ba146104a9578063b5931f7c146104db578063b69ef8a81461050b578063bf353dbb14610529576101fb565b80639adc339d146104375780639c52a7f1146104535780639edce7981461046f578063a293d1e814610479576101fb565b806369c7a051116101925780637f3bd56e116101615780637f3bd56e146103ac578063805c66ec146103df5780638be03ca1146103fd5780638d060dfa14610419576101fb565b806369c7a0511461032357806373cd07831461035657806374299b5a146103725780637824407f1461038e576101fb565b80632edd2976116101ce5780632edd29761461029f57806340c10f19146102bb57806365fae35e146102d757806367457022146102f3576101fb565b8063078c74c3146102005780630e2286d31461021e57806318160ddd1461024e5780631c8ce8901461026c575b600080fd5b6102086106b5565b6040516102159190613758565b60405180910390f35b610238600480360361023391908101906131c3565b6106bb565b6040516102459190613758565b60405180910390f35b610256610739565b6040516102639190613758565b60405180910390f35b61028660048036036102819190810190613058565b61073f565b6040516102969493929190613805565b60405180910390f35b6102b960048036036102b491908101906130d0565b610848565b005b6102d560048036036102d091908101906130d0565b610d5e565b005b6102f160048036036102ec9190810190613058565b610e3c565b005b61030d600480360361030891908101906131c3565b610f5b565b60405161031a9190613758565b60405180910390f35b61033d60048036036103389190810190613058565b610f84565b60405161034d9493929190613805565b60405180910390f35b610370600480360361036b9190810190613081565b611042565b005b61038c600480360361038791908101906130d0565b611120565b005b610396611636565b6040516103a39190613758565b60405180910390f35b6103c660048036036103c191908101906130d0565b6116dd565b6040516103d69493929190613805565b60405180910390f35b6103e7611a83565b6040516103f49190613758565b60405180910390f35b610417600480360361041291908101906131ff565b611a89565b005b610421611c6e565b60405161042e91906135b5565b60405180910390f35b610451600480360361044c9190810190613135565b611c81565b005b61046d60048036036104689190810190613058565b611e90565b005b610477611faf565b005b610493600480360361048e91908101906131c3565b611fdf565b6040516104a09190613758565b60405180910390f35b6104c360048036036104be9190810190613058565b61202f565b6040516104d2939291906137ce565b60405180910390f35b6104f560048036036104f091908101906131c3565b612059565b6040516105029190613758565b60405180910390f35b61051361206d565b6040516105209190613758565b60405180910390f35b610543600480360361053e9190810190613058565b612141565b6040516105509190613758565b60405180910390f35b610573600480360361056e9190810190613171565b612159565b60405161058293929190613721565b60405180910390f35b6105936121bf565b6040516105a09190613606565b60405180910390f35b6105b16121e5565b6040516105bf9291906137a5565b60405180910390f35b6105e260048036036105dd91908101906131c3565b61227c565b6040516105ef9190613758565b60405180910390f35b6106006122de565b60405161060d91906135d0565b60405180910390f35b610630600480360361062b91908101906131c3565b612304565b60405161063d9190613758565b60405180910390f35b61064e612354565b60405161065b91906135eb565b60405180910390f35b61067e600480360361067991908101906130d0565b61237a565b60405161068e9493929190613805565b60405180910390f35b61069f6127cb565b6040516106ac91906135d0565b60405180910390f35b60045481565b60008082116106ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f6906136e1565b60405180910390fd5b81610729610719856b033b2e3c9fd0803ce800000061227c565b6002858161072357fe5b04612304565b8161073057fe5b04905092915050565b60035481565b60008060008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461079057600080fd5b61083985600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fc57600080fd5b505afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610834919081019061319a565b6116dd565b93509350935093509193509193565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461089357600080fd5b816000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414801561092857506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154145b80610a135750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561099657600080fd5b505afa1580156109aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109ce919081019061319a565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b610a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4990613641565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b158015610aba57600080fd5b505afa158015610ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610af2919081019061319a565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610bdb610bd5600454836127f1565b84612304565b60048190555080831115610d10576000610bf58483611fdf565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd86600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401610c7893929190613555565b602060405180830381600087803b158015610c9257600080fd5b505af1158015610ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cca919081019061310c565b610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090613621565b60405180910390fd5b5050610d59565b6000610d1c8285611fdf565b90506000811115610d5657610d54600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168683612817565b505b50505b505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610da957600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401610e0692919061358c565b600060405180830381600087803b158015610e2057600080fd5b505af1158015610e34573d6000803e3d6000fd5b505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e8757600080fd5b60008060006004359250602435915034905060016000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684600036604051610f4d93929190613773565b60405180910390a450505050565b60006b033b2e3c9fd0803ce8000000610f74848461227c565b81610f7b57fe5b04905092915050565b60008060008061103385600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff657600080fd5b505afa15801561100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061102e919081019061319a565b61237a565b93509350935093509193509193565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461108d57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016110c892919061358c565b602060405180830381600087803b1580156110e257600080fd5b505af11580156110f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061111a919081019061310c565b50505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461116b57600080fd5b816000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414801561120057506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154145b806112eb5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561126e57600080fd5b505afa158015611282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112a6919081019061319a565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b61132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190613641565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561139257600080fd5b505afa1580156113a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113ca919081019061319a565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506114b36114ad600354836127f1565b84612304565b600381905550808311156115e85760006114cd8483611fdf565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd86600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161155093929190613555565b602060405180830381600087803b15801561156a57600080fd5b505af115801561157e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115a2919081019061310c565b6115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890613681565b60405180910390fd5b5050611631565b60006115f48285611fdf565b9050600081111561162e5761162c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168683612817565b505b50505b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116a057600080fd5b505afa1580156116b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116d8919081019061319a565b905090565b60008060008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461172e57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b15801561179657600080fd5b505afa1580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117ce919081019061319a565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541115611852576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611849906136c1565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b1580156118bc57600080fd5b505afa1580156118d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118f4919081019061319a565b905080861115611902578095505b61190c878761237a565b8095508196508297508398505050505082600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506119b5866001612304565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000851115611a3457611a31600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168887612817565b94505b6000841115611a6d57611a6a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168886612817565b93505b8484848494509450945094505092959194509250565b60095481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ad457600080fd5b60011515600a60149054906101000a900460ff16151514611af457600080fd5b6000600a60146101000a81548160ff021916908315150217905550846001600088815260200190815260200160002060010160000181905550836001600088815260200190815260200160002060000160000181905550826001600088815260200190815260200160002060020160000181905550600080905060008090506000851115611baa57611b8684866106bb565b9050611ba7611ba1846b033b2e3c9fd0803ce800000061227c565b86612059565b91505b611bb58885856129aa565b611bc0888284612ba7565b611c0c611bcf600354866127f1565b611c0786611c026b033b2e3c9fd0803ce8000000600160008f815260200190815260200160002060010160000154611fdf565b610f5b565b612304565b600381905550611c5e611c21600454846127f1565b611c5984611c546b033b2e3c9fd0803ce8000000600160008f815260200190815260200160002060000160000154611fdf565b610f5b565b612304565b6004819055505050505050505050565b600a60149054906101000a900460ff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ccc57600080fd5b7f746f6b656e000000000000000000000000000000000000000000000000000000821415611d3a5780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e8c565b7f63757272656e6379000000000000000000000000000000000000000000000000821415611da85780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e8b565b7f7265736572766500000000000000000000000000000000000000000000000000821415611e165780600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e8a565b7f65706f63685469636b6572000000000000000000000000000000000000000000821415611e845780600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e89565b600080fd5b5b5b5b5050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611edb57600080fd5b60008060006004359250602435915034905060008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684600036604051611fa193929190613773565b60405180910390a450505050565b60006009541115611fdd576000611fc7600954612d14565b9050611fd560095482611fdf565b600981905550505b565b6000828284039150811115612029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202090613701565b60405180910390fd5b92915050565b60026020528060005260406000206000915090508060000154908060010154908060020154905083565b600081838161206457fe5b04905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016120ec919061353a565b60206040518083038186803b15801561210457600080fd5b505afa158015612118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061213c919081019061319a565b905090565b60006020528060005260406000206000915090505481565b60016020528060005260406000206000915090508060000160405180602001604052908160008201548152505090806001016040518060200160405290816000820154815250509080600201604051806020016040529081600082015481525050905083565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461223357600080fd5b60001515600a60149054906101000a900460ff1615151461225357600080fd5b6001600a60146101000a81548160ff021916908315150217905550600354600454915091509091565b600080821480612299575082828385029250828161229657fe5b04145b6122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90613661565b60405180910390fd5b92915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082828401915081101561234e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612345906136a1565b60405180910390fd5b92915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b15801561243157600080fd5b505afa158015612445573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612469919081019061319a565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b1580156124d357600080fd5b505afa1580156124e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061250b919081019061319a565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156125eb578585600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154955095509550955050506127c2565b808711156125f7578096505b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549350600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154925060008090505b8783111580156126a457506000851415806126a3575060008414155b5b156127b2576000851461272f576126d4856001600086815260200190815260200160002060010160000154610f5b565b90506000811461272e5761271f8661271a6126fb846b033b2e3c9fd0803ce800000061227c565b6001600088815260200190815260200160002060020160000154612059565b612304565b955061272b8582611fdf565b94505b5b600084146127a05761275a846001600086815260200190815260200160002060000160000154610f5b565b90506000811461279f576127908761278b836001600088815260200190815260200160002060020160000154610f5b565b612304565b965061279c8482611fdf565b93505b5b6127ab836001612304565b9250612687565b8686868696509650965096505050505b92959194509250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000818310156128045760009050612811565b61280e8383611fdf565b90505b92915050565b6000808473ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612875919061353a565b60206040518083038186803b15801561288d57600080fd5b505afa1580156128a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128c5919081019061319a565b9050808311156128d3578092505b8473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b815260040161290e92919061358c565b602060405180830381600087803b15801561292857600080fd5b505af115801561293c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612960919081019061310c565b61299f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299690613621565b60405180910390fd5b829150509392505050565b60006129cf836001600087815260200190815260200160002060010160000154610f5b565b905060006129f6836001600088815260200190815260200160002060000160000154610f5b565b905080821115612b54576000612a0c8383611fdf565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612a8d92919061358c565b600060405180830381600087803b158015612aa757600080fd5b505af1158015612abb573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b8152600401612b1a9190613758565b600060405180830381600087803b158015612b3457600080fd5b505af1158015612b48573d6000803e3d6000fd5b50505050505050612ba2565b6000612b608284611fdf565b90506000811115612b9e576000612b7682612d14565b905081811015612b9c57612b95600954612b908484611fdf565b612304565b6009819055505b505b5050505b505050565b6000809050600060016000868152602001908152602001600020600201600001541115612bf457612bf1836001600087815260200190815260200160002060010160000154610f5b565b90505b6000612c19836001600088815260200190815260200160002060000160000154610f5b565b905081811115612c42576000612c2f8284611fdf565b9050612c3a81612e5d565b505050612d0f565b6000612c4e8383611fdf565b90506000811115612d0b57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612cd892919061358c565b600060405180830381600087803b158015612cf257600080fd5b505af1158015612d06573d6000803e3d6000fd5b505050505b5050505b505050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fb7932146040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612d8157600080fd5b505af1158015612d95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612db9919081019061319a565b905080831115612dc7578092505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1152343846040518263ffffffff1660e01b8152600401612e229190613758565b600060405180830381600087803b158015612e3c57600080fd5b505af1158015612e50573d6000803e3d6000fd5b5050505082915050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612edc919061353a565b60206040518083038186803b158015612ef457600080fd5b505afa158015612f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f2c919081019061319a565b905080821115612f3a578091505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612fb992919061358c565b600060405180830381600087803b158015612fd357600080fd5b505af1158015612fe7573d6000803e3d6000fd5b505050505050565b600081359050612ffe8161394a565b92915050565b60008151905061301381613961565b92915050565b60008135905061302881613978565b92915050565b60008135905061303d8161398f565b92915050565b6000815190506130528161398f565b92915050565b60006020828403121561306a57600080fd5b600061307884828501612fef565b91505092915050565b60008060006060848603121561309657600080fd5b60006130a486828701612fef565b93505060206130b586828701612fef565b92505060406130c68682870161302e565b9150509250925092565b600080604083850312156130e357600080fd5b60006130f185828601612fef565b92505060206131028582860161302e565b9150509250929050565b60006020828403121561311e57600080fd5b600061312c84828501613004565b91505092915050565b6000806040838503121561314857600080fd5b600061315685828601613019565b925050602061316785828601612fef565b9150509250929050565b60006020828403121561318357600080fd5b60006131918482850161302e565b91505092915050565b6000602082840312156131ac57600080fd5b60006131ba84828501613043565b91505092915050565b600080604083850312156131d657600080fd5b60006131e48582860161302e565b92505060206131f58582860161302e565b9150509250929050565b60008060008060008060c0878903121561321857600080fd5b600061322689828a0161302e565b965050602061323789828a0161302e565b955050604061324889828a0161302e565b945050606061325989828a0161302e565b935050608061326a89828a0161302e565b92505060a061327b89828a0161302e565b9150509295509295509295565b6132918161386c565b82525050565b6132a08161387e565b82525050565b60006132b2838561384a565b93506132bf83858461392a565b6132c883613939565b840190509392505050565b6132dc816138be565b82525050565b6132eb816138e2565b82525050565b6132fa81613906565b82525050565b600061330d60158361385b565b91507f746f6b656e2d7472616e736665722d6661696c656400000000000000000000006000830152602082019050919050565b600061334d60118361385b565b91507f64697362757273652072657175697265640000000000000000000000000000006000830152602082019050919050565b600061338d600f8361385b565b91507f736166652d6d756c2d6661696c656400000000000000000000000000000000006000830152602082019050919050565b60006133cd60188361385b565b91507f63757272656e63792d7472616e736665722d6661696c656400000000000000006000830152602082019050919050565b600061340d600f8361385b565b91507f736166652d6164642d6661696c656400000000000000000000000000000000006000830152602082019050919050565b600061344d60168361385b565b91507f65706f63682d6e6f742d65786563757465642d796574000000000000000000006000830152602082019050919050565b600061348d60108361385b565b91507f6469766973696f6e206279207a65726f000000000000000000000000000000006000830152602082019050919050565b60006134cd600f8361385b565b91507f736166652d7375622d6661696c656400000000000000000000000000000000006000830152602082019050919050565b602082016000820151613516600085018261351c565b50505050565b613525816138b4565b82525050565b613534816138b4565b82525050565b600060208201905061354f6000830184613288565b92915050565b600060608201905061356a6000830186613288565b6135776020830185613288565b613584604083018461352b565b949350505050565b60006040820190506135a16000830185613288565b6135ae602083018461352b565b9392505050565b60006020820190506135ca6000830184613297565b92915050565b60006020820190506135e560008301846132d3565b92915050565b600060208201905061360060008301846132e2565b92915050565b600060208201905061361b60008301846132f1565b92915050565b6000602082019050818103600083015261363a81613300565b9050919050565b6000602082019050818103600083015261365a81613340565b9050919050565b6000602082019050818103600083015261367a81613380565b9050919050565b6000602082019050818103600083015261369a816133c0565b9050919050565b600060208201905081810360008301526136ba81613400565b9050919050565b600060208201905081810360008301526136da81613440565b9050919050565b600060208201905081810360008301526136fa81613480565b9050919050565b6000602082019050818103600083015261371a816134c0565b9050919050565b60006060820190506137366000830186613500565b6137436020830185613500565b6137506040830184613500565b949350505050565b600060208201905061376d600083018461352b565b92915050565b6000604082019050613788600083018661352b565b818103602083015261379b8184866132a6565b9050949350505050565b60006040820190506137ba600083018561352b565b6137c7602083018461352b565b9392505050565b60006060820190506137e3600083018661352b565b6137f0602083018561352b565b6137fd604083018461352b565b949350505050565b600060808201905061381a600083018761352b565b613827602083018661352b565b613834604083018561352b565b613841606083018461352b565b95945050505050565b600082825260208201905092915050565b600082825260208201905092915050565b600061387782613894565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006138c9826138d0565b9050919050565b60006138db82613894565b9050919050565b60006138ed826138f4565b9050919050565b60006138ff82613894565b9050919050565b600061391182613918565b9050919050565b600061392382613894565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6139538161386c565b811461395e57600080fd5b50565b61396a8161387e565b811461397557600080fd5b50565b6139818161388a565b811461398c57600080fd5b50565b613998816138b4565b81146139a357600080fd5b5056fea365627a7a72315820c61c454d61e4755c875eafb1c721a0e16fb535e3e75047098486601d4d562d776c6578706572696d656e74616cf564736f6c634300050f00400000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000e4c72b4de5b0f9accea880ad0b1f944f85a9daa0

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80639adc339d1161011a578063c6b61e4c116100ad578063e5a6b10f1161007c578063e5a6b10f146105f8578063e6cb901314610616578063ed12a99c14610646578063f5a09bb414610664578063fc0c546a14610697576101fb565b8063c6b61e4c14610559578063cd3293de1461058b578063cdd5f2c8146105a9578063d05c78da146105c8576101fb565b8063a87430ba116100e9578063a87430ba146104a9578063b5931f7c146104db578063b69ef8a81461050b578063bf353dbb14610529576101fb565b80639adc339d146104375780639c52a7f1146104535780639edce7981461046f578063a293d1e814610479576101fb565b806369c7a051116101925780637f3bd56e116101615780637f3bd56e146103ac578063805c66ec146103df5780638be03ca1146103fd5780638d060dfa14610419576101fb565b806369c7a0511461032357806373cd07831461035657806374299b5a146103725780637824407f1461038e576101fb565b80632edd2976116101ce5780632edd29761461029f57806340c10f19146102bb57806365fae35e146102d757806367457022146102f3576101fb565b8063078c74c3146102005780630e2286d31461021e57806318160ddd1461024e5780631c8ce8901461026c575b600080fd5b6102086106b5565b6040516102159190613758565b60405180910390f35b610238600480360361023391908101906131c3565b6106bb565b6040516102459190613758565b60405180910390f35b610256610739565b6040516102639190613758565b60405180910390f35b61028660048036036102819190810190613058565b61073f565b6040516102969493929190613805565b60405180910390f35b6102b960048036036102b491908101906130d0565b610848565b005b6102d560048036036102d091908101906130d0565b610d5e565b005b6102f160048036036102ec9190810190613058565b610e3c565b005b61030d600480360361030891908101906131c3565b610f5b565b60405161031a9190613758565b60405180910390f35b61033d60048036036103389190810190613058565b610f84565b60405161034d9493929190613805565b60405180910390f35b610370600480360361036b9190810190613081565b611042565b005b61038c600480360361038791908101906130d0565b611120565b005b610396611636565b6040516103a39190613758565b60405180910390f35b6103c660048036036103c191908101906130d0565b6116dd565b6040516103d69493929190613805565b60405180910390f35b6103e7611a83565b6040516103f49190613758565b60405180910390f35b610417600480360361041291908101906131ff565b611a89565b005b610421611c6e565b60405161042e91906135b5565b60405180910390f35b610451600480360361044c9190810190613135565b611c81565b005b61046d60048036036104689190810190613058565b611e90565b005b610477611faf565b005b610493600480360361048e91908101906131c3565b611fdf565b6040516104a09190613758565b60405180910390f35b6104c360048036036104be9190810190613058565b61202f565b6040516104d2939291906137ce565b60405180910390f35b6104f560048036036104f091908101906131c3565b612059565b6040516105029190613758565b60405180910390f35b61051361206d565b6040516105209190613758565b60405180910390f35b610543600480360361053e9190810190613058565b612141565b6040516105509190613758565b60405180910390f35b610573600480360361056e9190810190613171565b612159565b60405161058293929190613721565b60405180910390f35b6105936121bf565b6040516105a09190613606565b60405180910390f35b6105b16121e5565b6040516105bf9291906137a5565b60405180910390f35b6105e260048036036105dd91908101906131c3565b61227c565b6040516105ef9190613758565b60405180910390f35b6106006122de565b60405161060d91906135d0565b60405180910390f35b610630600480360361062b91908101906131c3565b612304565b60405161063d9190613758565b60405180910390f35b61064e612354565b60405161065b91906135eb565b60405180910390f35b61067e600480360361067991908101906130d0565b61237a565b60405161068e9493929190613805565b60405180910390f35b61069f6127cb565b6040516106ac91906135d0565b60405180910390f35b60045481565b60008082116106ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f6906136e1565b60405180910390fd5b81610729610719856b033b2e3c9fd0803ce800000061227c565b6002858161072357fe5b04612304565b8161073057fe5b04905092915050565b60035481565b60008060008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461079057600080fd5b61083985600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fc57600080fd5b505afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610834919081019061319a565b6116dd565b93509350935093509193509193565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461089357600080fd5b816000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414801561092857506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154145b80610a135750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561099657600080fd5b505afa1580156109aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109ce919081019061319a565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b610a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4990613641565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b158015610aba57600080fd5b505afa158015610ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610af2919081019061319a565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610bdb610bd5600454836127f1565b84612304565b60048190555080831115610d10576000610bf58483611fdf565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd86600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401610c7893929190613555565b602060405180830381600087803b158015610c9257600080fd5b505af1158015610ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cca919081019061310c565b610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090613621565b60405180910390fd5b5050610d59565b6000610d1c8285611fdf565b90506000811115610d5657610d54600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168683612817565b505b50505b505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610da957600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401610e0692919061358c565b600060405180830381600087803b158015610e2057600080fd5b505af1158015610e34573d6000803e3d6000fd5b505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e8757600080fd5b60008060006004359250602435915034905060016000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684600036604051610f4d93929190613773565b60405180910390a450505050565b60006b033b2e3c9fd0803ce8000000610f74848461227c565b81610f7b57fe5b04905092915050565b60008060008061103385600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff657600080fd5b505afa15801561100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061102e919081019061319a565b61237a565b93509350935093509193509193565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461108d57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016110c892919061358c565b602060405180830381600087803b1580156110e257600080fd5b505af11580156110f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061111a919081019061310c565b50505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461116b57600080fd5b816000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414801561120057506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154145b806112eb5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561126e57600080fd5b505afa158015611282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112a6919081019061319a565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b61132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190613641565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561139257600080fd5b505afa1580156113a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113ca919081019061319a565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506114b36114ad600354836127f1565b84612304565b600381905550808311156115e85760006114cd8483611fdf565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd86600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161155093929190613555565b602060405180830381600087803b15801561156a57600080fd5b505af115801561157e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115a2919081019061310c565b6115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890613681565b60405180910390fd5b5050611631565b60006115f48285611fdf565b9050600081111561162e5761162c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168683612817565b505b50505b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116a057600080fd5b505afa1580156116b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116d8919081019061319a565b905090565b60008060008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461172e57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b15801561179657600080fd5b505afa1580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117ce919081019061319a565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541115611852576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611849906136c1565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b1580156118bc57600080fd5b505afa1580156118d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118f4919081019061319a565b905080861115611902578095505b61190c878761237a565b8095508196508297508398505050505082600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506119b5866001612304565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000851115611a3457611a31600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168887612817565b94505b6000841115611a6d57611a6a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168886612817565b93505b8484848494509450945094505092959194509250565b60095481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ad457600080fd5b60011515600a60149054906101000a900460ff16151514611af457600080fd5b6000600a60146101000a81548160ff021916908315150217905550846001600088815260200190815260200160002060010160000181905550836001600088815260200190815260200160002060000160000181905550826001600088815260200190815260200160002060020160000181905550600080905060008090506000851115611baa57611b8684866106bb565b9050611ba7611ba1846b033b2e3c9fd0803ce800000061227c565b86612059565b91505b611bb58885856129aa565b611bc0888284612ba7565b611c0c611bcf600354866127f1565b611c0786611c026b033b2e3c9fd0803ce8000000600160008f815260200190815260200160002060010160000154611fdf565b610f5b565b612304565b600381905550611c5e611c21600454846127f1565b611c5984611c546b033b2e3c9fd0803ce8000000600160008f815260200190815260200160002060000160000154611fdf565b610f5b565b612304565b6004819055505050505050505050565b600a60149054906101000a900460ff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ccc57600080fd5b7f746f6b656e000000000000000000000000000000000000000000000000000000821415611d3a5780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e8c565b7f63757272656e6379000000000000000000000000000000000000000000000000821415611da85780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e8b565b7f7265736572766500000000000000000000000000000000000000000000000000821415611e165780600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e8a565b7f65706f63685469636b6572000000000000000000000000000000000000000000821415611e845780600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e89565b600080fd5b5b5b5b5050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611edb57600080fd5b60008060006004359250602435915034905060008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684600036604051611fa193929190613773565b60405180910390a450505050565b60006009541115611fdd576000611fc7600954612d14565b9050611fd560095482611fdf565b600981905550505b565b6000828284039150811115612029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202090613701565b60405180910390fd5b92915050565b60026020528060005260406000206000915090508060000154908060010154908060020154905083565b600081838161206457fe5b04905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016120ec919061353a565b60206040518083038186803b15801561210457600080fd5b505afa158015612118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061213c919081019061319a565b905090565b60006020528060005260406000206000915090505481565b60016020528060005260406000206000915090508060000160405180602001604052908160008201548152505090806001016040518060200160405290816000820154815250509080600201604051806020016040529081600082015481525050905083565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461223357600080fd5b60001515600a60149054906101000a900460ff1615151461225357600080fd5b6001600a60146101000a81548160ff021916908315150217905550600354600454915091509091565b600080821480612299575082828385029250828161229657fe5b04145b6122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90613661565b60405180910390fd5b92915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082828401915081101561234e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612345906136a1565b60405180910390fd5b92915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b15801561243157600080fd5b505afa158015612445573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612469919081019061319a565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b1580156124d357600080fd5b505afa1580156124e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061250b919081019061319a565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156125eb578585600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154955095509550955050506127c2565b808711156125f7578096505b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549350600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154925060008090505b8783111580156126a457506000851415806126a3575060008414155b5b156127b2576000851461272f576126d4856001600086815260200190815260200160002060010160000154610f5b565b90506000811461272e5761271f8661271a6126fb846b033b2e3c9fd0803ce800000061227c565b6001600088815260200190815260200160002060020160000154612059565b612304565b955061272b8582611fdf565b94505b5b600084146127a05761275a846001600086815260200190815260200160002060000160000154610f5b565b90506000811461279f576127908761278b836001600088815260200190815260200160002060020160000154610f5b565b612304565b965061279c8482611fdf565b93505b5b6127ab836001612304565b9250612687565b8686868696509650965096505050505b92959194509250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000818310156128045760009050612811565b61280e8383611fdf565b90505b92915050565b6000808473ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612875919061353a565b60206040518083038186803b15801561288d57600080fd5b505afa1580156128a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128c5919081019061319a565b9050808311156128d3578092505b8473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b815260040161290e92919061358c565b602060405180830381600087803b15801561292857600080fd5b505af115801561293c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612960919081019061310c565b61299f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299690613621565b60405180910390fd5b829150509392505050565b60006129cf836001600087815260200190815260200160002060010160000154610f5b565b905060006129f6836001600088815260200190815260200160002060000160000154610f5b565b905080821115612b54576000612a0c8383611fdf565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612a8d92919061358c565b600060405180830381600087803b158015612aa757600080fd5b505af1158015612abb573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b8152600401612b1a9190613758565b600060405180830381600087803b158015612b3457600080fd5b505af1158015612b48573d6000803e3d6000fd5b50505050505050612ba2565b6000612b608284611fdf565b90506000811115612b9e576000612b7682612d14565b905081811015612b9c57612b95600954612b908484611fdf565b612304565b6009819055505b505b5050505b505050565b6000809050600060016000868152602001908152602001600020600201600001541115612bf457612bf1836001600087815260200190815260200160002060010160000154610f5b565b90505b6000612c19836001600088815260200190815260200160002060000160000154610f5b565b905081811115612c42576000612c2f8284611fdf565b9050612c3a81612e5d565b505050612d0f565b6000612c4e8383611fdf565b90506000811115612d0b57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612cd892919061358c565b600060405180830381600087803b158015612cf257600080fd5b505af1158015612d06573d6000803e3d6000fd5b505050505b5050505b505050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fb7932146040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612d8157600080fd5b505af1158015612d95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612db9919081019061319a565b905080831115612dc7578092505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1152343846040518263ffffffff1660e01b8152600401612e229190613758565b600060405180830381600087803b158015612e3c57600080fd5b505af1158015612e50573d6000803e3d6000fd5b5050505082915050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612edc919061353a565b60206040518083038186803b158015612ef457600080fd5b505afa158015612f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f2c919081019061319a565b905080821115612f3a578091505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612fb992919061358c565b600060405180830381600087803b158015612fd357600080fd5b505af1158015612fe7573d6000803e3d6000fd5b505050505050565b600081359050612ffe8161394a565b92915050565b60008151905061301381613961565b92915050565b60008135905061302881613978565b92915050565b60008135905061303d8161398f565b92915050565b6000815190506130528161398f565b92915050565b60006020828403121561306a57600080fd5b600061307884828501612fef565b91505092915050565b60008060006060848603121561309657600080fd5b60006130a486828701612fef565b93505060206130b586828701612fef565b92505060406130c68682870161302e565b9150509250925092565b600080604083850312156130e357600080fd5b60006130f185828601612fef565b92505060206131028582860161302e565b9150509250929050565b60006020828403121561311e57600080fd5b600061312c84828501613004565b91505092915050565b6000806040838503121561314857600080fd5b600061315685828601613019565b925050602061316785828601612fef565b9150509250929050565b60006020828403121561318357600080fd5b60006131918482850161302e565b91505092915050565b6000602082840312156131ac57600080fd5b60006131ba84828501613043565b91505092915050565b600080604083850312156131d657600080fd5b60006131e48582860161302e565b92505060206131f58582860161302e565b9150509250929050565b60008060008060008060c0878903121561321857600080fd5b600061322689828a0161302e565b965050602061323789828a0161302e565b955050604061324889828a0161302e565b945050606061325989828a0161302e565b935050608061326a89828a0161302e565b92505060a061327b89828a0161302e565b9150509295509295509295565b6132918161386c565b82525050565b6132a08161387e565b82525050565b60006132b2838561384a565b93506132bf83858461392a565b6132c883613939565b840190509392505050565b6132dc816138be565b82525050565b6132eb816138e2565b82525050565b6132fa81613906565b82525050565b600061330d60158361385b565b91507f746f6b656e2d7472616e736665722d6661696c656400000000000000000000006000830152602082019050919050565b600061334d60118361385b565b91507f64697362757273652072657175697265640000000000000000000000000000006000830152602082019050919050565b600061338d600f8361385b565b91507f736166652d6d756c2d6661696c656400000000000000000000000000000000006000830152602082019050919050565b60006133cd60188361385b565b91507f63757272656e63792d7472616e736665722d6661696c656400000000000000006000830152602082019050919050565b600061340d600f8361385b565b91507f736166652d6164642d6661696c656400000000000000000000000000000000006000830152602082019050919050565b600061344d60168361385b565b91507f65706f63682d6e6f742d65786563757465642d796574000000000000000000006000830152602082019050919050565b600061348d60108361385b565b91507f6469766973696f6e206279207a65726f000000000000000000000000000000006000830152602082019050919050565b60006134cd600f8361385b565b91507f736166652d7375622d6661696c656400000000000000000000000000000000006000830152602082019050919050565b602082016000820151613516600085018261351c565b50505050565b613525816138b4565b82525050565b613534816138b4565b82525050565b600060208201905061354f6000830184613288565b92915050565b600060608201905061356a6000830186613288565b6135776020830185613288565b613584604083018461352b565b949350505050565b60006040820190506135a16000830185613288565b6135ae602083018461352b565b9392505050565b60006020820190506135ca6000830184613297565b92915050565b60006020820190506135e560008301846132d3565b92915050565b600060208201905061360060008301846132e2565b92915050565b600060208201905061361b60008301846132f1565b92915050565b6000602082019050818103600083015261363a81613300565b9050919050565b6000602082019050818103600083015261365a81613340565b9050919050565b6000602082019050818103600083015261367a81613380565b9050919050565b6000602082019050818103600083015261369a816133c0565b9050919050565b600060208201905081810360008301526136ba81613400565b9050919050565b600060208201905081810360008301526136da81613440565b9050919050565b600060208201905081810360008301526136fa81613480565b9050919050565b6000602082019050818103600083015261371a816134c0565b9050919050565b60006060820190506137366000830186613500565b6137436020830185613500565b6137506040830184613500565b949350505050565b600060208201905061376d600083018461352b565b92915050565b6000604082019050613788600083018661352b565b818103602083015261379b8184866132a6565b9050949350505050565b60006040820190506137ba600083018561352b565b6137c7602083018461352b565b9392505050565b60006060820190506137e3600083018661352b565b6137f0602083018561352b565b6137fd604083018461352b565b949350505050565b600060808201905061381a600083018761352b565b613827602083018661352b565b613834604083018561352b565b613841606083018461352b565b95945050505050565b600082825260208201905092915050565b600082825260208201905092915050565b600061387782613894565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006138c9826138d0565b9050919050565b60006138db82613894565b9050919050565b60006138ed826138f4565b9050919050565b60006138ff82613894565b9050919050565b600061391182613918565b9050919050565b600061392382613894565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6139538161386c565b811461395e57600080fd5b50565b61396a8161387e565b811461397557600080fd5b50565b6139818161388a565b811461398c57600080fd5b50565b613998816138b4565b81146139a357600080fd5b5056fea365627a7a72315820c61c454d61e4755c875eafb1c721a0e16fb535e3e75047098486601d4d562d776c6578706572696d656e74616cf564736f6c634300050f0040

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

0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000e4c72b4de5b0f9accea880ad0b1f944f85a9daa0

-----Decoded View---------------
Arg [0] : currency_ (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [1] : token_ (address): 0xE4C72b4dE5b0F9ACcEA880Ad0b1F944F85A9dAA0

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [1] : 000000000000000000000000e4c72b4de5b0f9accea880ad0b1f944f85a9daa0


Deployed Bytecode Sourcemap

6655:14375:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6655:14375:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7272:24;;;:::i;:::-;;;;;;;;;;;;;;;;4657:162;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7241:24;;;:::i;:::-;;;;;;;;;;;;;;;;13147:232;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9657:782;;;;;;;;;;;;;;;;:::i;:::-;;19047:94;;;;;;;;;;;;;;;;:::i;:::-;;3005:63;;;;;;;;;;;;;;;;:::i;:::-;;4548:101;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10447:239;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20434:132;;;;;;;;;;;;;;;;:::i;:::-;;8781:799;;;;;;;;;;;;;;;;:::i;:::-;;8197:97;;;:::i;:::-;;;;;;;;;;;;;;;;13793:1442;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7531:29;;;:::i;:::-;;;;;;;;;;;;;;;;15305:1591;;;;;;;;;;;;;;;;:::i;:::-;;7588:36;;;:::i;:::-;;;;;;;;;;;;;;;;8302:401;;;;;;;;;;;;;;;;:::i;:::-;;3074:63;;;;;;;;;;;;;;;;:::i;:::-;;17731:237;;;:::i;:::-;;4170:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7190:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4450:90;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8091:98;;;:::i;:::-;;;;;;;;;;;;;;;;2960:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;6705:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7366:26;;;:::i;:::-;;;;;;;;;;;;;;;;16908:225;;;:::i;:::-;;;;;;;;;;;;;;;;;4303:139;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7305:25;;;:::i;:::-;;;;;;;;;;;;;;;;4037:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7399:34;;;:::i;:::-;;;;;;;;;;;;;;;;10793:2250;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7337:22;;;:::i;:::-;;;;;;;;;;;;;;;;7272:24;;;;:::o;4657:162::-;4708:6;4739:1;4735;:5;4727:34;;;;;;;;;;;;;;;;;;;;;;4810:1;4776:31;4784:15;4792:1;4020:8;4784:7;:15::i;:::-;4805:1;4801;:5;;;;;;4776:7;:31::i;:::-;:35;;;;;;4772:39;;4657:162;;;;:::o;7241:24::-;;;;:::o;13147:232::-;13199:25;13226:22;13250:28;13280:25;3188:1;3167:5;:17;3173:10;3167:17;;;;;;;;;;;;;;;;:22;3159:31;;;;;;13325:46;13334:3;13339:11;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13339:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13339:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13339:31:0;;;;;;;;;13325:8;:46::i;:::-;13318:53;;;;;;;;13147:232;;;;;:::o;9657:782::-;3188:1;3167:5;:17;3173:10;3167:17;;;;;;;;;;;;;;;;:22;3159:31;;;;;;9738:3;7723:1;7688:5;:10;7694:3;7688:10;;;;;;;;;;;;;;;:31;;;:36;:73;;;;;7760:1;7728:5;:10;7734:3;7728:10;;;;;;;;;;;;;;;:28;;;:33;7688:73;7687:143;;;;7804:11;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7804:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7804:26:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;7804:26:0;;;;;;;;;7775:5;:10;7781:3;7775:10;;;;;;;;;;;;;;;:25;;;:55;7687:143;7679:173;;;;;;;;;;;;;;;;;;;;;;9782:11;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9782:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9782:26:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;9782:26:0;;;;;;;;;9754:5;:10;9760:3;9754:10;;;;;;;;;;;;;;;:25;;:54;;;;9821:24;9848:5;:10;9854:3;9848:10;;;;;;;;;;;;;;;:28;;;9821:55;;9918:15;9887:5;:10;9893:3;9887:10;;;;;;;;;;;;;;;:28;;:46;;;;9958:72;9966:46;9979:11;;9992:19;9966:12;:46::i;:::-;10014:15;9958:7;:72::i;:::-;9944:11;:86;;;;10065:19;10047:15;:37;10043:234;;;10101:10;10114:45;10122:15;10139:19;10114:7;:45::i;:::-;10101:58;;10182:5;;;;;;;;;;;:18;;;10201:3;10206:4;;;;;;;;;;;10212:5;10182:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10182:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10182:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10182:36:0;;;;;;;;;10174:70;;;;;;;;;;;;;;;;;;;;;;10259:7;;;;10043:234;10289:10;10302:45;10310:19;10331:15;10302:7;:45::i;:::-;10289:58;;10370:1;10362:5;:9;10358:74;;;10388:32;10402:5;;;;;;;;;;;10409:3;10414:5;10388:13;:32::i;:::-;;10358:74;7863:1;;;3192;9657:782;;:::o;19047:94::-;3188:1;3167:5;:17;3173:10;3167:17;;;;;;;;;;;;;;;;:22;3159:31;;;;;;19110:5;;;;;;;;;;;:10;;;19121:3;19126:6;19110:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19110:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19110:23:0;;;;19047:94;;:::o;3005:63::-;3188:1;3167:5;:17;3173:10;3167:17;;;;;;;;;;;;;;;;:22;3159:31;;;;;;2634:11;2656;2678;2746:1;2733:15;2726:22;;2782:2;2769:16;2762:23;;2806:11;2799:18;;3064:1;3051:5;:10;3057:3;3051:10;;;;;;;;;;;;;;;:14;;;;2893:3;2888;2876:10;2859:53;;2867:7;;;;2859:53;;;2898:3;2903:8;;2859:53;;;;;;;;;;;;;;;;;3192:1;;;3005:63;:::o;4548:101::-;4599:6;4020:8;4622:13;4630:1;4633;4622:7;:13::i;:::-;:19;;;;;;4618:23;;4548:101;;;;:::o;10447:239::-;10502:25;10529:22;10553:28;10583:25;10628:50;10641:3;10646:11;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10646:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10646:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10646:31:0;;;;;;;;;10628:12;:50::i;:::-;10621:57;;;;;;;;10447:239;;;;;:::o;20434:132::-;3188:1;3167:5;:17;3173:10;3167:17;;;;;;;;;;;;;;;;:22;3159:31;;;;;;20530:5;20520:25;;;20546:3;20551:6;20520:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20520:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20520:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20520:38:0;;;;;;;;;;20434:132;;;:::o;8781:799::-;3188:1;3167:5;:17;3173:10;3167:17;;;;;;;;;;;;;;;;:22;3159:31;;;;;;8862:3;7723:1;7688:5;:10;7694:3;7688:10;;;;;;;;;;;;;;;:31;;;:36;:73;;;;;7760:1;7728:5;:10;7734:3;7728:10;;;;;;;;;;;;;;;:28;;;:33;7688:73;7687:143;;;;7804:11;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7804:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7804:26:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;7804:26:0;;;;;;;;;7775:5;:10;7781:3;7775:10;;;;;;;;;;;;;;;:25;;;:55;7687:143;7679:173;;;;;;;;;;;;;;;;;;;;;;8906:11;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8906:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8906:26:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;8906:26:0;;;;;;;;;8878:5;:10;8884:3;8878:10;;;;;;;;;;;;;;;:25;;:54;;;;8945:24;8972:5;:10;8978:3;8972:10;;;;;;;;;;;;;;;:31;;;8945:58;;9050:15;9016:5;:10;9022:3;9016:10;;;;;;;;;;;;;;;:31;;:49;;;;9092:72;9100:46;9113:11;;9126:19;9100:12;:46::i;:::-;9148:15;9092:7;:72::i;:::-;9078:11;:86;;;;9199:19;9181:15;:37;9177:240;;;9235:10;9248:45;9256:15;9273:19;9248:7;:45::i;:::-;9235:58;;9316:8;;;;;;;;;;;:21;;;9338:3;9343:4;;;;;;;;;;;9349:5;9316:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9316:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9316:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;9316:39:0;;;;;;;;;9308:76;;;;;;;;;;;;;;;;;;;;;;9399:7;;;;9177:240;9427:10;9440:45;9448:19;9469:15;9440:7;:45::i;:::-;9427:58;;9508:1;9500:5;:9;9496:77;;;9526:35;9540:8;;;;;;;;;;;9550:3;9555:5;9526:13;:35::i;:::-;;9496:77;7863:1;;;3192;8781:799;;:::o;8197:97::-;8243:4;8267:5;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8267:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8267:19:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;8267:19:0;;;;;;;;;8260:26;;8197:97;:::o;13793:1442::-;13861:25;13888:22;13912:28;13942:25;3188:1;3167:5;:17;3173:10;3167:17;;;;;;;;;;;;;;;;:22;3159:31;;;;;;14017:11;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14017:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14017:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14017:31:0;;;;;;;;;13988:5;:10;13994:3;13988:10;;;;;;;;;;;;;;;:25;;;:60;;13980:95;;;;;;;;;;;;;;;;;;;;;;14088:22;14113:11;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14113:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14113:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14113:31:0;;;;;;;;;14088:56;;14172:17;14161:8;:28;14157:167;;;14295:17;14284:28;;14157:167;14436:27;14449:3;14454:8;14436:12;:27::i;:::-;14336:127;;;;;;;;;;;;;;;;14508:23;14474:5;:10;14480:3;14474:10;;;;;;;;;;;;;;;:31;;:57;;;;14573:20;14542:5;:10;14548:3;14542:10;;;;;;;;;;;;;;;:28;;:51;;;;14827:20;14835:8;14845:1;14827:7;:20::i;:::-;14799:5;:10;14805:3;14799:10;;;;;;;;;;;;;;;:25;;:48;;;;14889:1;14866:20;:24;14862:130;;;14930:50;14944:8;;;;;;;;;;;14954:3;14959:20;14930:13;:50::i;:::-;14907:73;;14862:130;15028:1;15008:17;:21;15004:118;;;15066:44;15080:5;;;;;;;;;;;15087:3;15092:17;15066:13;:44::i;:::-;15046:64;;15004:118;15140:20;15162:17;15181:23;15206:20;15132:95;;;;;;;;;13793:1442;;;;;;;:::o;7531:29::-;;;;:::o;15305:1591::-;3188:1;3167:5;:17;3173:10;3167:17;;;;;;;;;;;;;;;;:22;3159:31;;;;;;15521:4;15501:24;;:16;;;;;;;;;;;:24;;;15493:33;;;;;;15556:5;15537:16;;:24;;;;;;;;;;;;;;;;;;15616:18;15574:6;:15;15581:7;15574:15;;;;;;;;;;;:33;;:39;;:60;;;;15687:18;15645:6;:15;15652:7;15645:15;;;;;;;;;;;:33;;:39;;:60;;;;15751:11;15716:6;:15;15723:7;15716:15;;;;;;;;;;;:26;;:32;;:46;;;;15858:18;15879:1;15858:22;;15891:18;15912:1;15891:22;;15941:1;15927:11;:15;15924:197;;;15975:43;15980:24;16006:11;15975:4;:43::i;:::-;15959:59;;16049:60;16057:38;16065:24;4020:8;16057:7;:38::i;:::-;16097:11;16049:7;:60::i;:::-;16033:76;;15924:197;16246:82;16268:7;16277:24;16303;16246:21;:82::i;:::-;16431:57;16450:7;16459:13;16474;16431:18;:57::i;:::-;16591:147;16599:51;16612:11;;16625:24;16599:12;:51::i;:::-;16652:85;16657:24;16683:53;4020:8;16696:6;:15;16703:7;16696:15;;;;;;;;;;;:33;;:39;;;16683:7;:53::i;:::-;16652:4;:85::i;:::-;16591:7;:147::i;:::-;16577:11;:161;;;;16763:125;16771:40;16784:11;;16797:13;16771:12;:40::i;:::-;16813:74;16818:13;16833:53;4020:8;16846:6;:15;16853:7;16846:15;;;;;;;;;;;:33;;:39;;;16833:7;:53::i;:::-;16813:4;:74::i;:::-;16763:7;:125::i;:::-;16749:11;:139;;;;3192:1;;15305:1591;;;;;;:::o;7588:36::-;;;;;;;;;;;;;:::o;8302:401::-;3188:1;3167:5;:17;3173:10;3167:17;;;;;;;;;;;;;;;;:22;3159:31;;;;;;8381:23;:12;:23;8377:318;;;8425:4;8407:5;;:23;;;;;;;;;;;;;;;;;;8377:318;;;8451:26;:12;:26;8447:248;;;8501:4;8480:8;;:26;;;;;;;;;;;;;;;;;;8447:248;;;8527:25;:12;:25;8523:172;;;8577:4;8555:7;;:27;;;;;;;;;;;;;;;;;;8523:172;;;8603:29;:12;:29;8599:96;;;8665:4;8635:11;;:35;;;;;;;;;;;;;;;;;;8599:96;;;8687:8;;;8599:96;8523:172;8447:248;8377:318;8302:401;;:::o;3074:63::-;3188:1;3167:5;:17;3173:10;3167:17;;;;;;;;;;;;;;;;:22;3159:31;;;;;;2634:11;2656;2678;2746:1;2733:15;2726:22;;2782:2;2769:16;2762:23;;2806:11;2799:18;;3133:1;3120:5;:10;3126:3;3120:10;;;;;;;;;;;;;;;:14;;;;2893:3;2888;2876:10;2859:53;;2867:7;;;;2859:53;;;2898:3;2903:8;;2859:53;;;;;;;;;;;;;;;;;3192:1;;;3074:63;:::o;17731:237::-;17807:1;17787:17;;:21;17784:177;;;17825:17;17845:29;17856:17;;17845:10;:29::i;:::-;17825:49;;17909:40;17917:17;;17936:12;17909:7;:40::i;:::-;17889:17;:60;;;;17784:177;;17731:237::o;4170:125::-;4224:6;4266:1;4260;4256;:5;4252:9;;;4251:16;;4243:44;;;;;;;;;;;;;;;;;;;;;;4170:125;;;;:::o;7190:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4450:90::-;4504:6;4531:1;4527;:5;;;;;;4523:9;;4450:90;;;;:::o;8091:98::-;8133:4;8157:8;;;;;;;;;;;:18;;;8176:4;;;;;;;;;;;8157:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8157:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8157:24:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;8157:24:0;;;;;;;;;8150:31;;8091:98;:::o;2960:38::-;;;;;;;;;;;;;;;;;:::o;6705:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7366:26::-;;;;;;;;;;;;;:::o;16908:225::-;16951:25;16978:22;3188:1;3167:5;:17;3173:10;3167:17;;;;;;;;;;;;;;;;:22;3159:31;;;;;;17041:5;17021:25;;:16;;;;;;;;;;;:25;;;17013:34;;;;;;17077:4;17058:16;;:23;;;;;;;;;;;;;;;;;;17100:11;;17113;;17092:33;;;;16908:225;;:::o;4303:139::-;4357:6;4389:1;4384;:6;:30;;;;4413:1;4408;4403;4399;:5;4395:9;;;4394:15;;;;;;:20;4384:30;4376:58;;;;;;;;;;;;;;;;;;;;;;4303:139;;;;:::o;7305:25::-;;;;;;;;;;;;;:::o;4037:125::-;4091:6;4133:1;4127;4123;:5;4119:9;;;4118:16;;4110:44;;;;;;;;;;;;;;;;;;;;;;4037:125;;;;:::o;7399:34::-;;;;;;;;;;;;;:::o;10793:2250::-;10863:25;10890:22;10914:28;10944:25;10982:13;10998:5;:10;11004:3;10998:10;;;;;;;;;;;;;;;:25;;;10982:41;;11034:22;11059:11;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11059:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11059:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11059:31:0;;;;;;;;;11034:56;;11183:11;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11183:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11183:26:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11183:26:0;;;;;;;;;11154:5;:10;11160:3;11154:10;;;;;;;;;;;;;;;:25;;;:55;11150:199;;;11234:20;11256:17;11275:5;:10;11281:3;11275:10;;;;;;;;;;;;;;;:31;;;11308:5;:10;11314:3;11308:10;;;;;;;;;;;;;;;:28;;;11226:111;;;;;;;;;;;;11150:199;11376:17;11365:8;:28;11361:167;;;11499:17;11488:28;;11361:167;11566:5;:10;11572:3;11566:10;;;;;;;;;;;;;;;:31;;;11540:57;;11631:5;:10;11637:3;11631:10;;;;;;;;;;;;;;;:28;;;11608:51;;11670:11;11684:1;11670:15;;11814:1114;11832:8;11820;:20;;:84;;;;;11872:1;11845:23;:28;;:57;;;;11901:1;11877:20;:25;;11845:57;11820:84;11814:1114;;;11950:1;11923:23;:28;11920:479;;11981:71;11986:23;12011:6;:16;12018:8;12011:16;;;;;;;;;;;:34;;:40;;;11981:4;:71::i;:::-;11972:80;;12137:1;12127:6;:11;12123:261;;12183:92;12191:17;12210:64;12218:20;12226:6;4020:8;12218:7;:20::i;:::-;12240:6;:16;12247:8;12240:16;;;;;;;;;;;:27;;:33;;;12210:7;:64::i;:::-;12183:7;:92::i;:::-;12163:112;;12324:40;12332:23;12357:6;12324:7;:40::i;:::-;12298:66;;12123:261;11920:479;12442:1;12418:20;:25;12415:456;;12473:68;12478:20;12500:6;:16;12507:8;12500:16;;;;;;;;;;;:34;;:40;;;12473:4;:68::i;:::-;12464:77;;12626:1;12616:6;:11;12612:244;;12675:78;12683:20;12705:47;12710:6;12718;:16;12725:8;12718:16;;;;;;;;;;;:27;;:33;;;12705:4;:47::i;:::-;12675:7;:78::i;:::-;12652:101;;12799:37;12807:20;12829:6;12799:7;:37::i;:::-;12776:60;;12612:244;12415:456;12896:20;12904:8;12914:1;12896:7;:20::i;:::-;12885:31;;11814:1114;;;12948:20;12970:17;12989:23;13014:20;12940:95;;;;;;;;;;;10793:2250;;;;;;;;:::o;7337:22::-;;;;;;;;;;;;;:::o;20843:184::-;20908:4;20937:6;20929:5;:14;20925:55;;;20967:1;20960:8;;;;20925:55;20997:22;21005:5;21012:6;20997:7;:22::i;:::-;20990:29;;20843:184;;;;;:::o;13387:302::-;13470:4;13487:8;13498:5;:15;;;13514:4;;;;;;;;;;;13498:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13498:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13498:21:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13498:21:0;;;;;;;;;13487:32;;13542:3;13533:6;:12;13530:56;;;13571:3;13562:12;;13530:56;13604:5;:14;;;13619:3;13624:6;13604:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13604:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13604:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13604:27:0;;;;;;;;;13596:61;;;;;;;;;;;;;;;;;;;;;;13675:6;13668:13;;;13387:302;;;;;:::o;19244:1093::-;19398:21;19422:58;19427:11;19440:6;:15;19447:7;19440:15;;;;;;;;;;;:33;;:39;;;19422:4;:58::i;:::-;19398:82;;19536:21;19560:58;19565:11;19578:6;:15;19585:7;19578:15;;;;;;;;;;;:33;;:39;;;19560:4;:58::i;:::-;19536:82;;19654:16;19635;:35;19631:284;;;19736:9;19748:43;19756:16;19774;19748:7;:43::i;:::-;19736:55;;19806:8;;;;;;;;;;;:16;;;19831:7;;;;;;;;;;;19841:4;19806:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19806:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19806:40:0;;;;19861:7;;;;;;;;;;;:15;;;19877:4;19861:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19861:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19861:21:0;;;;19897:7;;;;;19631:284;19925:9;19937:43;19945:16;19963;19937:7;:43::i;:::-;19925:55;;20002:1;19995:4;:8;19991:339;;;20070:17;20090:16;20101:4;20090:10;:16::i;:::-;20070:36;;20139:4;20124:12;:19;20121:198;;;20248:55;20256:17;;20275:27;20283:4;20289:12;20275:7;:27::i;:::-;20248:7;:55::i;:::-;20228:17;:75;;;;20121:198;19991:339;;19244:1093;;;;;;;:::o;18044:874::-;18195:15;18213:1;18195:19;;18264:1;18229:6;:15;18236:7;18229:15;;;;;;;;;;;:26;;:32;;;:36;18225:145;;;18295:63;18300:16;18318:6;:15;18325:7;18318:15;;;;;;;;;;;:33;;:39;;;18295:4;:63::i;:::-;18282:76;;18225:145;18423:15;18441:63;18446:16;18464:6;:15;18471:7;18464:15;;;;;;;;;;;:33;;:39;;;18441:4;:63::i;:::-;18423:81;;18593:10;18580;:23;18576:149;;;18620:9;18632:31;18640:10;18652;18632:7;:31::i;:::-;18620:43;;18678:14;18687:4;18678:8;:14::i;:::-;18707:7;;;;;18576:149;18794:9;18806:31;18814:10;18826;18806:7;:31::i;:::-;18794:43;;18859:1;18852:4;:8;18848:63;;;18877:5;;;;;;;;;;;:10;;;18888:4;;;;;;;;;;;18894;18877:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18877:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18877:22:0;;;;18848:63;18044:874;;;;;;;:::o;17361:362::-;17419:17;17449:8;17460:7;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17460:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17460:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17460:31:0;;;;;;;;;17449:42;;17524:3;17507:14;:20;17504:139;;;17628:3;17611:20;;17504:139;17653:7;;;;;;;;;;;:14;;;17668;17653:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17653:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17653:30:0;;;;17701:14;17694:21;;;17361:362;;;:::o;17141:212::-;17197:8;17208:5;;;;;;;;;;;:15;;;17224:4;;;;;;;;;;;17208:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17208:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17208:21:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17208:21:0;;;;;;;;;17197:32;;17257:3;17243:11;:17;17240:66;;;17291:3;17277:17;;17240:66;17316:5;;;;;;;;;;;:10;;;17327:4;;;;;;;;;;;17333:11;17316:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17316:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17316:29:0;;;;17141:212;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:128;;223:6;217:13;208:22;;235:30;259:5;235:30;;;202:68;;;;;277:130;;357:6;344:20;335:29;;369:33;396:5;369:33;;;329:78;;;;;414:130;;494:6;481:20;472:29;;506:33;533:5;506:33;;;466:78;;;;;551:134;;635:6;629:13;620:22;;647:33;674:5;647:33;;;614:71;;;;;692:241;;796:2;784:9;775:7;771:23;767:32;764:2;;;812:1;809;802:12;764:2;847:1;864:53;909:7;900:6;889:9;885:22;864:53;;;854:63;;826:97;758:175;;;;;940:491;;;;1078:2;1066:9;1057:7;1053:23;1049:32;1046:2;;;1094:1;1091;1084:12;1046:2;1129:1;1146:53;1191:7;1182:6;1171:9;1167:22;1146:53;;;1136:63;;1108:97;1236:2;1254:53;1299:7;1290:6;1279:9;1275:22;1254:53;;;1244:63;;1215:98;1344:2;1362:53;1407:7;1398:6;1387:9;1383:22;1362:53;;;1352:63;;1323:98;1040:391;;;;;;1438:366;;;1559:2;1547:9;1538:7;1534:23;1530:32;1527:2;;;1575:1;1572;1565:12;1527:2;1610:1;1627:53;1672:7;1663:6;1652:9;1648:22;1627:53;;;1617:63;;1589:97;1717:2;1735:53;1780:7;1771:6;1760:9;1756:22;1735:53;;;1725:63;;1696:98;1521:283;;;;;;1811:257;;1923:2;1911:9;1902:7;1898:23;1894:32;1891:2;;;1939:1;1936;1929:12;1891:2;1974:1;1991:61;2044:7;2035:6;2024:9;2020:22;1991:61;;;1981:71;;1953:105;1885:183;;;;;2075:366;;;2196:2;2184:9;2175:7;2171:23;2167:32;2164:2;;;2212:1;2209;2202:12;2164:2;2247:1;2264:53;2309:7;2300:6;2289:9;2285:22;2264:53;;;2254:63;;2226:97;2354:2;2372:53;2417:7;2408:6;2397:9;2393:22;2372:53;;;2362:63;;2333:98;2158:283;;;;;;2448:241;;2552:2;2540:9;2531:7;2527:23;2523:32;2520:2;;;2568:1;2565;2558:12;2520:2;2603:1;2620:53;2665:7;2656:6;2645:9;2641:22;2620:53;;;2610:63;;2582:97;2514:175;;;;;2696:263;;2811:2;2799:9;2790:7;2786:23;2782:32;2779:2;;;2827:1;2824;2817:12;2779:2;2862:1;2879:64;2935:7;2926:6;2915:9;2911:22;2879:64;;;2869:74;;2841:108;2773:186;;;;;2966:366;;;3087:2;3075:9;3066:7;3062:23;3058:32;3055:2;;;3103:1;3100;3093:12;3055:2;3138:1;3155:53;3200:7;3191:6;3180:9;3176:22;3155:53;;;3145:63;;3117:97;3245:2;3263:53;3308:7;3299:6;3288:9;3284:22;3263:53;;;3253:63;;3224:98;3049:283;;;;;;3339:869;;;;;;;3528:3;3516:9;3507:7;3503:23;3499:33;3496:2;;;3545:1;3542;3535:12;3496:2;3580:1;3597:53;3642:7;3633:6;3622:9;3618:22;3597:53;;;3587:63;;3559:97;3687:2;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;;;3695:63;;3666:98;3795:2;3813:53;3858:7;3849:6;3838:9;3834:22;3813:53;;;3803:63;;3774:98;3903:2;3921:53;3966:7;3957:6;3946:9;3942:22;3921:53;;;3911:63;;3882:98;4011:3;4030:53;4075:7;4066:6;4055:9;4051:22;4030:53;;;4020:63;;3990:99;4120:3;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;;;4129:63;;4099:99;3490:718;;;;;;;;;4215:113;4298:24;4316:5;4298:24;;;4293:3;4286:37;4280:48;;;4335:104;4412:21;4427:5;4412:21;;;4407:3;4400:34;4394:45;;;4469:297;;4583:70;4646:6;4641:3;4583:70;;;4576:77;;4665:43;4701:6;4696:3;4689:5;4665:43;;;4730:29;4752:6;4730:29;;;4725:3;4721:39;4714:46;;4569:197;;;;;;4774:160;4874:54;4922:5;4874:54;;;4869:3;4862:67;4856:78;;;4941:172;5047:60;5101:5;5047:60;;;5042:3;5035:73;5029:84;;;5120:164;5222:56;5272:5;5222:56;;;5217:3;5210:69;5204:80;;;5292:321;;5452:67;5516:2;5511:3;5452:67;;;5445:74;;5552:23;5548:1;5543:3;5539:11;5532:44;5604:2;5599:3;5595:12;5588:19;;5438:175;;;;5622:317;;5782:67;5846:2;5841:3;5782:67;;;5775:74;;5882:19;5878:1;5873:3;5869:11;5862:40;5930:2;5925:3;5921:12;5914:19;;5768:171;;;;5948:315;;6108:67;6172:2;6167:3;6108:67;;;6101:74;;6208:17;6204:1;6199:3;6195:11;6188:38;6254:2;6249:3;6245:12;6238:19;;6094:169;;;;6272:324;;6432:67;6496:2;6491:3;6432:67;;;6425:74;;6532:26;6528:1;6523:3;6519:11;6512:47;6587:2;6582:3;6578:12;6571:19;;6418:178;;;;6605:315;;6765:67;6829:2;6824:3;6765:67;;;6758:74;;6865:17;6861:1;6856:3;6852:11;6845:38;6911:2;6906:3;6902:12;6895:19;;6751:169;;;;6929:322;;7089:67;7153:2;7148:3;7089:67;;;7082:74;;7189:24;7185:1;7180:3;7176:11;7169:45;7242:2;7237:3;7233:12;7226:19;;7075:176;;;;7260:316;;7420:67;7484:2;7479:3;7420:67;;;7413:74;;7520:18;7516:1;7511:3;7507:11;7500:39;7567:2;7562:3;7558:12;7551:19;;7406:170;;;;7585:315;;7745:67;7809:2;7804:3;7745:67;;;7738:74;;7845:17;7841:1;7836:3;7832:11;7825:38;7891:2;7886:3;7882:12;7875:19;;7731:169;;;;7969:317;8106:4;8101:3;8097:14;8190:4;8183:5;8179:16;8173:23;8202:63;8259:4;8254:3;8250:14;8236:12;8202:63;;;8126:145;8079:207;;;;8293:103;8366:24;8384:5;8366:24;;;8361:3;8354:37;8348:48;;;8403:113;8486:24;8504:5;8486:24;;;8481:3;8474:37;8468:48;;;8523:213;;8641:2;8630:9;8626:18;8618:26;;8655:71;8723:1;8712:9;8708:17;8699:6;8655:71;;;8612:124;;;;;8743:435;;8917:2;8906:9;8902:18;8894:26;;8931:71;8999:1;8988:9;8984:17;8975:6;8931:71;;;9013:72;9081:2;9070:9;9066:18;9057:6;9013:72;;;9096;9164:2;9153:9;9149:18;9140:6;9096:72;;;8888:290;;;;;;;9185:324;;9331:2;9320:9;9316:18;9308:26;;9345:71;9413:1;9402:9;9398:17;9389:6;9345:71;;;9427:72;9495:2;9484:9;9480:18;9471:6;9427:72;;;9302:207;;;;;;9516:201;;9628:2;9617:9;9613:18;9605:26;;9642:65;9704:1;9693:9;9689:17;9680:6;9642:65;;;9599:118;;;;;9724:247;;9859:2;9848:9;9844:18;9836:26;;9873:88;9958:1;9947:9;9943:17;9934:6;9873:88;;;9830:141;;;;;9978:259;;10119:2;10108:9;10104:18;10096:26;;10133:94;10224:1;10213:9;10209:17;10200:6;10133:94;;;10090:147;;;;;10244:251;;10381:2;10370:9;10366:18;10358:26;;10395:90;10482:1;10471:9;10467:17;10458:6;10395:90;;;10352:143;;;;;10502:407;;10693:2;10682:9;10678:18;10670:26;;10743:9;10737:4;10733:20;10729:1;10718:9;10714:17;10707:47;10768:131;10894:4;10768:131;;;10760:139;;10664:245;;;;10916:407;;11107:2;11096:9;11092:18;11084:26;;11157:9;11151:4;11147:20;11143:1;11132:9;11128:17;11121:47;11182:131;11308:4;11182:131;;;11174:139;;11078:245;;;;11330:407;;11521:2;11510:9;11506:18;11498:26;;11571:9;11565:4;11561:20;11557:1;11546:9;11542:17;11535:47;11596:131;11722:4;11596:131;;;11588:139;;11492:245;;;;11744:407;;11935:2;11924:9;11920:18;11912:26;;11985:9;11979:4;11975:20;11971:1;11960:9;11956:17;11949:47;12010:131;12136:4;12010:131;;;12002:139;;11906:245;;;;12158:407;;12349:2;12338:9;12334:18;12326:26;;12399:9;12393:4;12389:20;12385:1;12374:9;12370:17;12363:47;12424:131;12550:4;12424:131;;;12416:139;;12320:245;;;;12572:407;;12763:2;12752:9;12748:18;12740:26;;12813:9;12807:4;12803:20;12799:1;12788:9;12784:17;12777:47;12838:131;12964:4;12838:131;;;12830:139;;12734:245;;;;12986:407;;13177:2;13166:9;13162:18;13154:26;;13227:9;13221:4;13217:20;13213:1;13202:9;13198:17;13191:47;13252:131;13378:4;13252:131;;;13244:139;;13148:245;;;;13400:407;;13591:2;13580:9;13576:18;13568:26;;13641:9;13635:4;13631:20;13627:1;13616:9;13612:17;13605:47;13666:131;13792:4;13666:131;;;13658:139;;13562:245;;;;13814:699;;14120:2;14109:9;14105:18;14097:26;;14134:115;14246:1;14235:9;14231:17;14222:6;14134:115;;;14260:116;14372:2;14361:9;14357:18;14348:6;14260:116;;;14387;14499:2;14488:9;14484:18;14475:6;14387:116;;;14091:422;;;;;;;14520:213;;14638:2;14627:9;14623:18;14615:26;;14652:71;14720:1;14709:9;14705:17;14696:6;14652:71;;;14609:124;;;;;14740:428;;14914:2;14903:9;14899:18;14891:26;;14928:71;14996:1;14985:9;14981:17;14972:6;14928:71;;;15047:9;15041:4;15037:20;15032:2;15021:9;15017:18;15010:48;15072:86;15153:4;15144:6;15136;15072:86;;;15064:94;;14885:283;;;;;;;15175:324;;15321:2;15310:9;15306:18;15298:26;;15335:71;15403:1;15392:9;15388:17;15379:6;15335:71;;;15417:72;15485:2;15474:9;15470:18;15461:6;15417:72;;;15292:207;;;;;;15506:435;;15680:2;15669:9;15665:18;15657:26;;15694:71;15762:1;15751:9;15747:17;15738:6;15694:71;;;15776:72;15844:2;15833:9;15829:18;15820:6;15776:72;;;15859;15927:2;15916:9;15912:18;15903:6;15859:72;;;15651:290;;;;;;;15948:547;;16150:3;16139:9;16135:19;16127:27;;16165:71;16233:1;16222:9;16218:17;16209:6;16165:71;;;16247:72;16315:2;16304:9;16300:18;16291:6;16247:72;;;16330;16398:2;16387:9;16383:18;16374:6;16330:72;;;16413;16481:2;16470:9;16466:18;16457:6;16413:72;;;16121:374;;;;;;;;16503:162;;16617:6;16612:3;16605:19;16654:4;16649:3;16645:14;16630:29;;16598:67;;;;;16674:163;;16789:6;16784:3;16777:19;16826:4;16821:3;16817:14;16802:29;;16770:67;;;;;16845:91;;16907:24;16925:5;16907:24;;;16896:35;;16890:46;;;;16943:85;;17016:5;17009:13;17002:21;16991:32;;16985:43;;;;17035:72;;17097:5;17086:16;;17080:27;;;;17114:121;;17187:42;17180:5;17176:54;17165:65;;17159:76;;;;17242:72;;17304:5;17293:16;;17287:27;;;;17321:155;;17417:54;17465:5;17417:54;;;17404:67;;17398:78;;;;17483:125;;17579:24;17597:5;17579:24;;;17566:37;;17560:48;;;;17615:167;;17717:60;17771:5;17717:60;;;17704:73;;17698:84;;;;17789:131;;17891:24;17909:5;17891:24;;;17878:37;;17872:48;;;;17927:159;;18025:56;18075:5;18025:56;;;18012:69;;18006:80;;;;18093:127;;18191:24;18209:5;18191:24;;;18178:37;;18172:48;;;;18228:145;18309:6;18304:3;18299;18286:30;18365:1;18356:6;18351:3;18347:16;18340:27;18279:94;;;;18381:97;;18469:2;18465:7;18460:2;18453:5;18449:14;18445:28;18435:38;;18429:49;;;;18486:117;18555:24;18573:5;18555:24;;;18548:5;18545:35;18535:2;;18594:1;18591;18584:12;18535:2;18529:74;;18610:111;18676:21;18691:5;18676:21;;;18669:5;18666:32;18656:2;;18712:1;18709;18702:12;18656:2;18650:71;;18728:117;18797:24;18815:5;18797:24;;;18790:5;18787:35;18777:2;;18836:1;18833;18826:12;18777:2;18771:74;;18852:117;18921:24;18939:5;18921:24;;;18914:5;18911:35;18901:2;;18960:1;18957;18950:12;18901:2;18895:74;

Swarm Source

bzzr://c61c454d61e4755c875eafb1c721a0e16fb535e3e75047098486601d4d562d77

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  ]

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.