ETH Price: $2,309.91 (-0.26%)

Contract

0xe5A5F138005E19A3E6D0FE68b039397EeEf2322b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Burn207111342024-09-09 6:01:598 days ago1725861719IN
Wrapped BTC: Factory
0 ETH0.000589892.04989335
Burn206834652024-09-05 9:23:4711 days ago1725528227IN
Wrapped BTC: Factory
0 ETH0.00073172.54259585
Burn206681542024-09-03 6:07:1114 days ago1725343631IN
Wrapped BTC: Factory
0 ETH0.000337061.17132312
Burn205383112024-08-16 2:50:4732 days ago1723776647IN
Wrapped BTC: Factory
0 ETH0.000682452.37143877
Burn205305512024-08-15 0:48:3533 days ago1723682915IN
Wrapped BTC: Factory
0 ETH0.000610862.08794345
Burn205237412024-08-14 1:59:3534 days ago1723600775IN
Wrapped BTC: Factory
0 ETH0.000308581.05474807
Burn205157272024-08-12 23:09:2335 days ago1723504163IN
Wrapped BTC: Factory
0 ETH0.000569191.9455211
Burn205144582024-08-12 18:55:3535 days ago1723488935IN
Wrapped BTC: Factory
0 ETH0.001672215.71543834
Burn205098272024-08-12 3:23:5936 days ago1723433039IN
Wrapped BTC: Factory
0 ETH0.00049131.84104484
Burn205098242024-08-12 3:23:2336 days ago1723433003IN
Wrapped BTC: Factory
0 ETH0.000460211.57301038
Burn205030562024-08-11 4:42:2337 days ago1723351343IN
Wrapped BTC: Factory
0 ETH0.000289640.99005392
Add Mint Request204645222024-08-05 19:41:5942 days ago1722886919IN
Wrapped BTC: Factory
0 ETH0.002546538.29585493
Cancel Mint Requ...204644712024-08-05 19:31:3542 days ago1722886295IN
Wrapped BTC: Factory
0 ETH0.000782378.72451477
Add Mint Request204640082024-08-05 17:58:3542 days ago1722880715IN
Wrapped BTC: Factory
0 ETH0.002730848.8966179
Add Mint Request204581652024-08-04 22:25:2343 days ago1722810323IN
Wrapped BTC: Factory
0 ETH0.000607491.97912625
Burn201729342024-06-26 2:40:1183 days ago1719369611IN
Wrapped BTC: Factory
0 ETH0.001388234.74499889
Burn200122482024-06-03 15:39:59105 days ago1717429199IN
Wrapped BTC: Factory
0 ETH0.0059203420.572544
Add Mint Request199854772024-05-30 21:56:59109 days ago1717106219IN
Wrapped BTC: Factory
0 ETH0.0047061215.33175444
Burn199168272024-05-21 7:35:23119 days ago1716276923IN
Wrapped BTC: Factory
0 ETH0.0036579912.50311259
Burn198958702024-05-18 9:14:59121 days ago1716023699IN
Wrapped BTC: Factory
0 ETH0.001099723.75904957
Add Mint Request194776032024-03-20 18:09:47180 days ago1710958187IN
Wrapped BTC: Factory
0 ETH0.0116527937.96428444
Burn194421782024-03-15 18:38:11185 days ago1710527891IN
Wrapped BTC: Factory
0 ETH0.0097388733.28765771
Burn194267202024-03-13 14:22:11187 days ago1710339731IN
Wrapped BTC: Factory
0 ETH0.0169254356.91766001
Add Mint Request193925822024-03-08 19:37:35192 days ago1709926655IN
Wrapped BTC: Factory
0 ETH0.0216258770.45337997
Burn193353092024-02-29 19:39:35200 days ago1709235575IN
Wrapped BTC: Factory
0 ETH0.0188826163.49935978
View all transactions

Latest 5 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
135864882021-11-10 4:54:041042 days ago1636520044
Wrapped BTC: Factory
0.0001 ETH
112024052020-11-06 7:25:581411 days ago1604647558
Wrapped BTC: Factory
0 ETH
104661262020-07-15 20:06:071524 days ago1594843567
Wrapped BTC: Factory
0.000001 ETH
97764072020-03-31 1:02:531631 days ago1585616573
Wrapped BTC: Factory
0.000001 ETH
94708052020-02-12 22:11:511678 days ago1581545511
Wrapped BTC: Factory
0.00001 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Factory

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-11-24
*/

pragma solidity 0.4.24;

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

// File: openzeppelin-solidity/contracts/ownership/Claimable.sol

/**
 * @title Claimable
 * @dev Extension for the Ownable contract, where the ownership needs to be claimed.
 * This allows the new owner to accept the transfer.
 */
contract Claimable is Ownable {
  address public pendingOwner;

  /**
   * @dev Modifier throws if called by any account other than the pendingOwner.
   */
  modifier onlyPendingOwner() {
    require(msg.sender == pendingOwner);
    _;
  }

  /**
   * @dev Allows the current owner to set the pendingOwner address.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    pendingOwner = newOwner;
  }

  /**
   * @dev Allows the pendingOwner address to finalize the transfer.
   */
  function claimOwnership() public onlyPendingOwner {
    emit OwnershipTransferred(owner, pendingOwner);
    owner = pendingOwner;
    pendingOwner = address(0);
  }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * See https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address _who) public view returns (uint256);
  function transfer(address _to, uint256 _value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address _owner, address _spender)
    public view returns (uint256);

  function transferFrom(address _from, address _to, uint256 _value)
    public returns (bool);

  function approve(address _spender, uint256 _value) public returns (bool);
  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

// File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
  function safeTransfer(
    ERC20Basic _token,
    address _to,
    uint256 _value
  )
    internal
  {
    require(_token.transfer(_to, _value));
  }

  function safeTransferFrom(
    ERC20 _token,
    address _from,
    address _to,
    uint256 _value
  )
    internal
  {
    require(_token.transferFrom(_from, _to, _value));
  }

  function safeApprove(
    ERC20 _token,
    address _spender,
    uint256 _value
  )
    internal
  {
    require(_token.approve(_spender, _value));
  }
}

// File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol

/**
 * @title Contracts that should be able to recover tokens
 * @author SylTi
 * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner.
 * This will prevent any accidental loss of tokens.
 */
contract CanReclaimToken is Ownable {
  using SafeERC20 for ERC20Basic;

  /**
   * @dev Reclaim all ERC20Basic compatible tokens
   * @param _token ERC20Basic The address of the token contract
   */
  function reclaimToken(ERC20Basic _token) external onlyOwner {
    uint256 balance = _token.balanceOf(this);
    _token.safeTransfer(owner, balance);
  }

}

// File: contracts/utils/OwnableContract.sol

// empty block is used as this contract just inherits others.
contract OwnableContract is CanReclaimToken, Claimable { } /* solhint-disable-line no-empty-blocks */

// File: contracts/controller/ControllerInterface.sol

interface ControllerInterface {
    function mint(address to, uint amount) external returns (bool);
    function burn(uint value) external returns (bool);
    function isCustodian(address addr) external view returns (bool);
    function isMerchant(address addr) external view returns (bool);
    function getWBTC() external view returns (ERC20);
}

// File: contracts/factory/Factory.sol

contract Factory is OwnableContract {

    enum RequestStatus {PENDING, CANCELED, APPROVED, REJECTED}

    struct Request {
        address requester; // sender of the request.
        uint amount; // amount of wbtc to mint/burn.
        string btcDepositAddress; // custodian's btc address in mint, merchant's btc address in burn.
        string btcTxid; // bitcoin txid for sending/redeeming btc in the mint/burn process.
        uint nonce; // serial number allocated for each request.
        uint timestamp; // time of the request creation.
        RequestStatus status; // status of the request.
    }

    ControllerInterface public controller;

    // mapping between merchant to the corresponding custodian deposit address, used in the minting process.
    // by using a different deposit address per merchant the custodian can identify which merchant deposited.
    mapping(address=>string) public custodianBtcDepositAddress;

    // mapping between merchant to the its deposit address where btc should be moved to, used in the burning process.
    mapping(address=>string) public merchantBtcDepositAddress;

    // mapping between a mint request hash and the corresponding request nonce. 
    mapping(bytes32=>uint) public mintRequestNonce;

    // mapping between a burn request hash and the corresponding request nonce.
    mapping(bytes32=>uint) public burnRequestNonce;

    Request[] public mintRequests;
    Request[] public burnRequests;

    constructor(ControllerInterface _controller) public {
        require(_controller != address(0), "invalid _controller address");
        controller = _controller;
        owner = _controller;
    }

    modifier onlyMerchant() {
        require(controller.isMerchant(msg.sender), "sender not a merchant.");
        _;
    }

    modifier onlyCustodian() {
        require(controller.isCustodian(msg.sender), "sender not a custodian.");
        _;
    }

    event CustodianBtcDepositAddressSet(address indexed merchant, address indexed sender, string btcDepositAddress);

    function setCustodianBtcDepositAddress(
        address merchant,
        string btcDepositAddress
    )
        external
        onlyCustodian
        returns (bool) 
    {
        require(merchant != 0, "invalid merchant address");
        require(controller.isMerchant(merchant), "merchant address is not a real merchant.");
        require(!isEmptyString(btcDepositAddress), "invalid btc deposit address");

        custodianBtcDepositAddress[merchant] = btcDepositAddress;
        emit CustodianBtcDepositAddressSet(merchant, msg.sender, btcDepositAddress);
        return true;
    }

    event MerchantBtcDepositAddressSet(address indexed merchant, string btcDepositAddress);

    function setMerchantBtcDepositAddress(string btcDepositAddress) external onlyMerchant returns (bool) {
        require(!isEmptyString(btcDepositAddress), "invalid btc deposit address");

        merchantBtcDepositAddress[msg.sender] = btcDepositAddress;
        emit MerchantBtcDepositAddressSet(msg.sender, btcDepositAddress);
        return true; 
    }

    event MintRequestAdd(
        uint indexed nonce,
        address indexed requester,
        uint amount,
        string btcDepositAddress,
        string btcTxid,
        uint timestamp,
        bytes32 requestHash
    );

    function addMintRequest(
        uint amount,
        string btcTxid,
        string btcDepositAddress
    )
        external
        onlyMerchant
        returns (bool)
    {
        require(!isEmptyString(btcDepositAddress), "invalid btc deposit address"); 
        require(compareStrings(btcDepositAddress, custodianBtcDepositAddress[msg.sender]), "wrong btc deposit address");

        uint nonce = mintRequests.length;
        uint timestamp = getTimestamp();

        Request memory request = Request({
            requester: msg.sender,
            amount: amount,
            btcDepositAddress: btcDepositAddress,
            btcTxid: btcTxid,
            nonce: nonce,
            timestamp: timestamp,
            status: RequestStatus.PENDING
        });

        bytes32 requestHash = calcRequestHash(request);
        mintRequestNonce[requestHash] = nonce; 
        mintRequests.push(request);

        emit MintRequestAdd(nonce, msg.sender, amount, btcDepositAddress, btcTxid, timestamp, requestHash);
        return true;
    }

    event MintRequestCancel(uint indexed nonce, address indexed requester, bytes32 requestHash);

    function cancelMintRequest(bytes32 requestHash) external onlyMerchant returns (bool) {
        uint nonce;
        Request memory request;

        (nonce, request) = getPendingMintRequest(requestHash);

        require(msg.sender == request.requester, "cancel sender is different than pending request initiator");
        mintRequests[nonce].status = RequestStatus.CANCELED;

        emit MintRequestCancel(nonce, msg.sender, requestHash);
        return true;
    }

    event MintConfirmed(
        uint indexed nonce,
        address indexed requester,
        uint amount,
        string btcDepositAddress,
        string btcTxid,
        uint timestamp,
        bytes32 requestHash
    );

    function confirmMintRequest(bytes32 requestHash) external onlyCustodian returns (bool) {
        uint nonce;
        Request memory request;

        (nonce, request) = getPendingMintRequest(requestHash);

        mintRequests[nonce].status = RequestStatus.APPROVED;
        require(controller.mint(request.requester, request.amount), "mint failed");

        emit MintConfirmed(
            request.nonce,
            request.requester,
            request.amount,
            request.btcDepositAddress,
            request.btcTxid,
            request.timestamp,
            requestHash
        );
        return true;
    }

    event MintRejected(
        uint indexed nonce,
        address indexed requester,
        uint amount,
        string btcDepositAddress,
        string btcTxid,
        uint timestamp,
        bytes32 requestHash
    );

    function rejectMintRequest(bytes32 requestHash) external onlyCustodian returns (bool) {
        uint nonce;
        Request memory request;

        (nonce, request) = getPendingMintRequest(requestHash);

        mintRequests[nonce].status = RequestStatus.REJECTED;

        emit MintRejected(
            request.nonce,
            request.requester,
            request.amount,
            request.btcDepositAddress,
            request.btcTxid,
            request.timestamp,
            requestHash
        );
        return true;
    }

    event Burned(
        uint indexed nonce,
        address indexed requester,
        uint amount,
        string btcDepositAddress,
        uint timestamp,
        bytes32 requestHash
    );

    function burn(uint amount) external onlyMerchant returns (bool) {
        string memory btcDepositAddress = merchantBtcDepositAddress[msg.sender];
        require(!isEmptyString(btcDepositAddress), "merchant btc deposit address was not set"); 

        uint nonce = burnRequests.length;
        uint timestamp = getTimestamp();

        // set txid as empty since it is not known yet.
        string memory btcTxid = "";

        Request memory request = Request({
            requester: msg.sender,
            amount: amount,
            btcDepositAddress: btcDepositAddress,
            btcTxid: btcTxid,
            nonce: nonce,
            timestamp: timestamp,
            status: RequestStatus.PENDING
        });

        bytes32 requestHash = calcRequestHash(request);
        burnRequestNonce[requestHash] = nonce; 
        burnRequests.push(request);

        require(controller.getWBTC().transferFrom(msg.sender, controller, amount), "trasnfer tokens to burn failed");
        require(controller.burn(amount), "burn failed");

        emit Burned(nonce, msg.sender, amount, btcDepositAddress, timestamp, requestHash);
        return true;
    }

    event BurnConfirmed(
        uint indexed nonce,
        address indexed requester,
        uint amount,
        string btcDepositAddress,
        string btcTxid,
        uint timestamp,
        bytes32 inputRequestHash
    );

    function confirmBurnRequest(bytes32 requestHash, string btcTxid) external onlyCustodian returns (bool) {
        uint nonce;
        Request memory request;

        (nonce, request) = getPendingBurnRequest(requestHash);

        burnRequests[nonce].btcTxid = btcTxid;
        burnRequests[nonce].status = RequestStatus.APPROVED;
        burnRequestNonce[calcRequestHash(burnRequests[nonce])] = nonce;

        emit BurnConfirmed(
            request.nonce,
            request.requester,
            request.amount,
            request.btcDepositAddress,
            btcTxid,
            request.timestamp,
            requestHash
        );
        return true;
    }

    function getMintRequest(uint nonce)
        external
        view
        returns (
            uint requestNonce,
            address requester,
            uint amount,
            string btcDepositAddress,
            string btcTxid,
            uint timestamp,
            string status,
            bytes32 requestHash
        )
    {
        Request memory request = mintRequests[nonce];
        string memory statusString = getStatusString(request.status); 

        requestNonce = request.nonce;
        requester = request.requester;
        amount = request.amount;
        btcDepositAddress = request.btcDepositAddress;
        btcTxid = request.btcTxid;
        timestamp = request.timestamp;
        status = statusString;
        requestHash = calcRequestHash(request);
    }

    function getMintRequestsLength() external view returns (uint length) {
        return mintRequests.length;
    }

    function getBurnRequest(uint nonce)
        external
        view
        returns (
            uint requestNonce,
            address requester,
            uint amount,
            string btcDepositAddress,
            string btcTxid,
            uint timestamp,
            string status,
            bytes32 requestHash
        )
    {
        Request storage request = burnRequests[nonce];
        string memory statusString = getStatusString(request.status); 

        requestNonce = request.nonce;
        requester = request.requester;
        amount = request.amount;
        btcDepositAddress = request.btcDepositAddress;
        btcTxid = request.btcTxid;
        timestamp = request.timestamp;
        status = statusString;
        requestHash = calcRequestHash(request);
    }

    function getBurnRequestsLength() external view returns (uint length) {
        return burnRequests.length;
    }

    function getTimestamp() internal view returns (uint) {
        // timestamp is only used for data maintaining purpose, it is not relied on for critical logic.
        return block.timestamp; // solhint-disable-line not-rely-on-time
    }

    function getPendingMintRequest(bytes32 requestHash) internal view returns (uint nonce, Request memory request) {
        require(requestHash != 0, "request hash is 0");
        nonce = mintRequestNonce[requestHash];
        request = mintRequests[nonce];
        validatePendingRequest(request, requestHash);
    }

    function getPendingBurnRequest(bytes32 requestHash) internal view returns (uint nonce, Request memory request) {
        require(requestHash != 0, "request hash is 0");
        nonce = burnRequestNonce[requestHash];
        request = burnRequests[nonce];
        validatePendingRequest(request, requestHash);
    }

    function validatePendingRequest(Request memory request, bytes32 requestHash) internal pure {
        require(request.status == RequestStatus.PENDING, "request is not pending");
        require(requestHash == calcRequestHash(request), "given request hash does not match a pending request");
    }

    function calcRequestHash(Request request) internal pure returns (bytes32) {
        return keccak256(abi.encode(
            request.requester,
            request.amount,
            request.btcDepositAddress,
            request.btcTxid,
            request.nonce,
            request.timestamp
        ));
    }

    function compareStrings (string a, string b) internal pure returns (bool) {
        return (keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)));
    }

    function isEmptyString (string a) internal pure returns (bool) {
        return (compareStrings(a, ""));
    }

    function getStatusString(RequestStatus status) internal pure returns (string) {
        if (status == RequestStatus.PENDING) {
            return "pending";
        } else if (status == RequestStatus.CANCELED) {
            return "canceled";
        } else if (status == RequestStatus.APPROVED) {
            return "approved";
        } else if (status == RequestStatus.REJECTED) {
            return "rejected";
        } else {
            // this fallback can never be reached.
            return "unknown";
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"requestHash","type":"bytes32"}],"name":"confirmMintRequest","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMintRequestsLength","outputs":[{"name":"length","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"btcDepositAddress","type":"string"}],"name":"setMerchantBtcDepositAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"mintRequests","outputs":[{"name":"requester","type":"address"},{"name":"amount","type":"uint256"},{"name":"btcDepositAddress","type":"string"},{"name":"btcTxid","type":"string"},{"name":"nonce","type":"uint256"},{"name":"timestamp","type":"uint256"},{"name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"burn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"burnRequests","outputs":[{"name":"requester","type":"address"},{"name":"amount","type":"uint256"},{"name":"btcDepositAddress","type":"string"},{"name":"btcTxid","type":"string"},{"name":"nonce","type":"uint256"},{"name":"timestamp","type":"uint256"},{"name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"merchant","type":"address"},{"name":"btcDepositAddress","type":"string"}],"name":"setCustodianBtcDepositAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getBurnRequestsLength","outputs":[{"name":"length","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"custodianBtcDepositAddress","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"requestHash","type":"bytes32"}],"name":"rejectMintRequest","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"btcTxid","type":"string"},{"name":"btcDepositAddress","type":"string"}],"name":"addMintRequest","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"requestHash","type":"bytes32"},{"name":"btcTxid","type":"string"}],"name":"confirmBurnRequest","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"mintRequestNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nonce","type":"uint256"}],"name":"getMintRequest","outputs":[{"name":"requestNonce","type":"uint256"},{"name":"requester","type":"address"},{"name":"amount","type":"uint256"},{"name":"btcDepositAddress","type":"string"},{"name":"btcTxid","type":"string"},{"name":"timestamp","type":"uint256"},{"name":"status","type":"string"},{"name":"requestHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"requestHash","type":"bytes32"}],"name":"cancelMintRequest","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"burnRequestNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"merchantBtcDepositAddress","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nonce","type":"uint256"}],"name":"getBurnRequest","outputs":[{"name":"requestNonce","type":"uint256"},{"name":"requester","type":"address"},{"name":"amount","type":"uint256"},{"name":"btcDepositAddress","type":"string"},{"name":"btcTxid","type":"string"},{"name":"timestamp","type":"uint256"},{"name":"status","type":"string"},{"name":"requestHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_controller","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"merchant","type":"address"},{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"btcDepositAddress","type":"string"}],"name":"CustodianBtcDepositAddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"merchant","type":"address"},{"indexed":false,"name":"btcDepositAddress","type":"string"}],"name":"MerchantBtcDepositAddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nonce","type":"uint256"},{"indexed":true,"name":"requester","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"btcDepositAddress","type":"string"},{"indexed":false,"name":"btcTxid","type":"string"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"requestHash","type":"bytes32"}],"name":"MintRequestAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nonce","type":"uint256"},{"indexed":true,"name":"requester","type":"address"},{"indexed":false,"name":"requestHash","type":"bytes32"}],"name":"MintRequestCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nonce","type":"uint256"},{"indexed":true,"name":"requester","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"btcDepositAddress","type":"string"},{"indexed":false,"name":"btcTxid","type":"string"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"requestHash","type":"bytes32"}],"name":"MintConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nonce","type":"uint256"},{"indexed":true,"name":"requester","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"btcDepositAddress","type":"string"},{"indexed":false,"name":"btcTxid","type":"string"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"requestHash","type":"bytes32"}],"name":"MintRejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nonce","type":"uint256"},{"indexed":true,"name":"requester","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"btcDepositAddress","type":"string"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"requestHash","type":"bytes32"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nonce","type":"uint256"},{"indexed":true,"name":"requester","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"btcDepositAddress","type":"string"},{"indexed":false,"name":"btcTxid","type":"string"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"inputRequestHash","type":"bytes32"}],"name":"BurnConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405234801561001057600080fd5b506040516020806137e0833981016040525160008054600160a060020a03191633179055600160a060020a03811615156100ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964205f636f6e74726f6c6c657220616464726573730000000000604482015290519081900360640190fd5b60028054600160a060020a03909216600160a060020a03199283168117909155600080549092161790556136fc806100e46000396000f30060806040526004361061012f5763ffffffff60e060020a60003504166317ffc32081146101345780632bf90baa14610157578063311104f314610183578063321d0f7e146101aa578063424e6575146101ca57806342966c68146103035780634e71e0c81461031b5780636406c10c1461033057806368c4d91914610348578063715018a61461037557806372f69a721461038a5780637840fc8e1461039f578063861f92a8146104355780638da5cb5b1461044d5780638e24a7641461047e5780639355f0a4146104ae5780639ad4b86b146104d2578063b69b22d8146104ea578063c06e2d2414610683578063c72551be1461069b578063d25e178d146106b3578063e21c40c0146106d4578063e30c3978146106ec578063f2fde38b14610701578063f77c479114610722575b600080fd5b34801561014057600080fd5b50610155600160a060020a0360043516610737565b005b34801561016357600080fd5b5061016f600435610803565b604080519115158252519081900360200190f35b34801561018f57600080fd5b50610198610b5c565b60408051918252519081900360200190f35b3480156101b657600080fd5b5061016f6004803560248101910135610b63565b3480156101d657600080fd5b506101e2600435610d2e565b6040518088600160a060020a0316600160a060020a03168152602001878152602001806020018060200186815260200185815260200184600381111561022457fe5b60ff168152602001838103835288818151815260200191508051906020019080838360005b83811015610261578181015183820152602001610249565b50505050905090810190601f16801561028e5780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b838110156102c15781810151838201526020016102a9565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561030f57600080fd5b5061016f600435610e9e565b34801561032757600080fd5b5061015561154f565b34801561033c57600080fd5b506101e26004356115d7565b34801561035457600080fd5b5061016f60048035600160a060020a031690602480359081019101356115e5565b34801561038157600080fd5b5061015561191e565b34801561039657600080fd5b5061019861198a565b3480156103ab57600080fd5b506103c0600160a060020a0360043516611990565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103fa5781810151838201526020016103e2565b50505050905090810190601f1680156104275780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044157600080fd5b5061016f600435611a2b565b34801561045957600080fd5b50610462611be5565b60408051600160a060020a039092168252519081900360200190f35b34801561048a57600080fd5b5061016f600480359060248035808201929081013591604435908101910135611bf4565b3480156104ba57600080fd5b5061016f60048035906024803590810191013561210d565b3480156104de57600080fd5b50610198600435612527565b3480156104f657600080fd5b50610502600435612539565b6040518089815260200188600160a060020a0316600160a060020a031681526020018781526020018060200180602001868152602001806020018560001916600019168152602001848103845289818151815260200191508051906020019080838360005b8381101561057f578181015183820152602001610567565b50505050905090810190601f1680156105ac5780820380516001836020036101000a031916815260200191505b5084810383528851815288516020918201918a019080838360005b838110156105df5781810151838201526020016105c7565b50505050905090810190601f16801561060c5780820380516001836020036101000a031916815260200191505b50848103825286518152865160209182019188019080838360005b8381101561063f578181015183820152602001610627565b50505050905090810190601f16801561066c5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b34801561068f57600080fd5b5061016f600435612750565b3480156106a757600080fd5b5061019860043561292e565b3480156106bf57600080fd5b506103c0600160a060020a0360043516612940565b3480156106e057600080fd5b506105026004356129a8565b3480156106f857600080fd5b50610462612bdd565b34801561070d57600080fd5b50610155600160a060020a0360043516612bec565b34801561072e57600080fd5b50610462612c32565b60008054600160a060020a0316331461074f57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b1580156107b057600080fd5b505af11580156107c4573d6000803e3d6000fd5b505050506040513d60208110156107da57600080fd5b50516000549091506107ff90600160a060020a0384811691168363ffffffff612c4116565b5050565b60008061080e613539565b6002546040805160e260020a630d7203230281523360048201529051600160a060020a03909216916335c80c8c916024808201926020929091908290030181600087803b15801561085e57600080fd5b505af1158015610872573d6000803e3d6000fd5b505050506040513d602081101561088857600080fd5b505115156108ce576040805160e560020a62461bcd02815260206004820152601760248201526000805160206136b1833981519152604482015290519081900360640190fd5b6108d784612ce0565b60078054929450909250600291849081106108ee57fe5b60009182526020909120600660079092020101805460ff1916600183600381111561091557fe5b02179055506002548151602080840151604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03948516600482015260248101929092525192909316926340c10f1992604480830193928290030181600087803b15801561098d57600080fd5b505af11580156109a1573d6000803e3d6000fd5b505050506040513d60208110156109b757600080fd5b50511515610a0f576040805160e560020a62461bcd02815260206004820152600b60248201527f6d696e74206661696c6564000000000000000000000000000000000000000000604482015290519081900360640190fd5b8060000151600160a060020a031681608001517f051f4ba27061b0e6dc829669a7baa8bba9cf7f6cd2f95e1f0bdd9c22126d8b218360200151846040015185606001518660a001518a6040518086815260200180602001806020018581526020018460001916600019168152602001838103835287818151815260200191508051906020019080838360005b83811015610ab3578181015183820152602001610a9b565b50505050905090810190601f168015610ae05780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b83811015610b13578181015183820152602001610afb565b50505050905090810190601f168015610b405780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a35060019392505050565b6007545b90565b6002546040805160e060020a631a2f71670281523360048201529051600092600160a060020a031691631a2f716791602480830192602092919082900301818787803b158015610bb257600080fd5b505af1158015610bc6573d6000803e3d6000fd5b505050506040513d6020811015610bdc57600080fd5b50511515610c22576040805160e560020a62461bcd0281526020600482015260166024820152600080516020613691833981519152604482015290519081900360640190fd5b610c5b83838080601f01602080910402602001604051908101604052809392919081815260200183838082843750612f0c945050505050565b15610cb0576040805160e560020a62461bcd02815260206004820152601b60248201527f696e76616c696420627463206465706f73697420616464726573730000000000604482015290519081900360640190fd5b336000908152600460205260409020610cca90848461358a565b5033600160a060020a03167fec7032a7f06b5d29ee5a6a1e73ab4e4dc80890c75a5104e3c075584e42775c2984846040518080602001828103825284848281815260200192508082843760405192018290039550909350505050a250600192915050565b6007805482908110610d3c57fe5b6000918252602091829020600791909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f8101889004880285018801909252818452600160a060020a0390941696509094919291830182828015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b5050505060038301805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152949594935090830182828015610e7d5780601f10610e5257610100808354040283529160200191610e7d565b820191906000526020600020905b815481529060010190602001808311610e6057829003601f168201915b50505050600483015460058401546006909401549293909290915060ff1687565b600060606000806060610eaf613539565b6002546040805160e060020a631a2f71670281523360048201529051600092600160a060020a031691631a2f716791602480830192602092919082900301818787803b158015610efe57600080fd5b505af1158015610f12573d6000803e3d6000fd5b505050506040513d6020811015610f2857600080fd5b50511515610f6e576040805160e560020a62461bcd0281526020600482015260166024820152600080516020613691833981519152604482015290519081900360640190fd5b3360009081526004602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156110025780601f10610fd757610100808354040283529160200191611002565b820191906000526020600020905b815481529060010190602001808311610fe557829003601f168201915b5050505050955061101286612f0c565b1561108d576040805160e560020a62461bcd02815260206004820152602860248201527f6d65726368616e7420627463206465706f73697420616464726573732077617360448201527f206e6f7420736574000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600854945061109a612f30565b60408051602081810183526000808352835160e0810185523381529182018d90529281018a9052606081018290526080810189905260a08101849052929650945060c082015291506110eb82612f34565b6000818152600660209081526040808320899055600880546001810180835591909452865160079094027ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee381018054600160a060020a0390961673ffffffffffffffffffffffffffffffffffffffff19909616959095178555878401517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee482015591870151805195965090948794936111c8937ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee501920190613608565b50606082015180516111e4916003840191602090910190613608565b506080820151600482015560a0820151600582015560c082015160068201805460ff1916600183600381111561121657fe5b0217905550505050600260009054906101000a9004600160a060020a0316600160a060020a0316635eebb1ce6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561127157600080fd5b505af1158015611285573d6000803e3d6000fd5b505050506040513d602081101561129b57600080fd5b5051600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a039283166024820152604481018c9052905191909216916323b872dd9160648083019260209291908290030181600087803b15801561131257600080fd5b505af1158015611326573d6000803e3d6000fd5b505050506040513d602081101561133c57600080fd5b50511515611394576040805160e560020a62461bcd02815260206004820152601e60248201527f747261736e66657220746f6b656e7320746f206275726e206661696c65640000604482015290519081900360640190fd5b600254604080517f42966c68000000000000000000000000000000000000000000000000000000008152600481018b90529051600160a060020a03909216916342966c68916024808201926020929091908290030181600087803b1580156113fb57600080fd5b505af115801561140f573d6000803e3d6000fd5b505050506040513d602081101561142557600080fd5b5051151561147d576040805160e560020a62461bcd02815260206004820152600b60248201527f6275726e206661696c6564000000000000000000000000000000000000000000604482015290519081900360640190fd5b33600160a060020a0316857f865e64c3fa22a0daee479fc02875d3e97d581930b9679232344d4d5dcce6a7b28a89888660405180858152602001806020018481526020018360001916600019168152602001828103825285818151815260200191508051906020019080838360005b838110156115045781810151838201526020016114ec565b50505050905090810190601f1680156115315780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a3506001979650505050505050565b600154600160a060020a0316331461156657600080fd5b60015460008054604051600160a060020a0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b6008805482908110610d3c57fe5b6002546040805160e260020a630d7203230281523360048201529051600092600160a060020a0316916335c80c8c91602480830192602092919082900301818787803b15801561163457600080fd5b505af1158015611648573d6000803e3d6000fd5b505050506040513d602081101561165e57600080fd5b505115156116a4576040805160e560020a62461bcd02815260206004820152601760248201526000805160206136b1833981519152604482015290519081900360640190fd5b600160a060020a0384161515611704576040805160e560020a62461bcd02815260206004820152601860248201527f696e76616c6964206d65726368616e7420616464726573730000000000000000604482015290519081900360640190fd5b6002546040805160e060020a631a2f7167028152600160a060020a03878116600483015291519190921691631a2f71679160248083019260209291908290030181600087803b15801561175657600080fd5b505af115801561176a573d6000803e3d6000fd5b505050506040513d602081101561178057600080fd5b505115156117fe576040805160e560020a62461bcd02815260206004820152602860248201527f6d65726368616e742061646472657373206973206e6f742061207265616c206d60448201527f65726368616e742e000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61183783838080601f01602080910402602001604051908101604052809392919081815260200183838082843750612f0c945050505050565b1561188c576040805160e560020a62461bcd02815260206004820152601b60248201527f696e76616c696420627463206465706f73697420616464726573730000000000604482015290519081900360640190fd5b600160a060020a03841660009081526003602052604090206118af90848461358a565b5033600160a060020a031684600160a060020a03167fa1cea79438a06b74491693be087a2035e62acbe738749fc0ba7fc87df2eed93985856040518080602001828103825284848281815260200192508082843760405192018290039550909350505050a35060019392505050565b600054600160a060020a0316331461193557600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60085490565b60036020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015611a235780601f106119f857610100808354040283529160200191611a23565b820191906000526020600020905b815481529060010190602001808311611a0657829003601f168201915b505050505081565b600080611a36613539565b6002546040805160e260020a630d7203230281523360048201529051600160a060020a03909216916335c80c8c916024808201926020929091908290030181600087803b158015611a8657600080fd5b505af1158015611a9a573d6000803e3d6000fd5b505050506040513d6020811015611ab057600080fd5b50511515611af6576040805160e560020a62461bcd02815260206004820152601760248201526000805160206136b1833981519152604482015290519081900360640190fd5b611aff84612ce0565b6007805492945090925060039184908110611b1657fe5b60009182526020909120600660079092020101805460ff19166001836003811115611b3d57fe5b02179055508060000151600160a060020a031681608001517fdadc06f5b98131083e96b856c044184efd23ae2e797a876fd80aa5dae4f724558360200151846040015185606001518660a001518a60405180868152602001806020018060200185815260200184600019166000191681526020018381038352878181518152602001915080519060200190808383600083811015610ab3578181015183820152602001610a9b565b600054600160a060020a031681565b6000806000611c01613539565b6002546040805160e060020a631a2f71670281523360048201529051600092600160a060020a031691631a2f716791602480830192602092919082900301818787803b158015611c5057600080fd5b505af1158015611c64573d6000803e3d6000fd5b505050506040513d6020811015611c7a57600080fd5b50511515611cc0576040805160e560020a62461bcd0281526020600482015260166024820152600080516020613691833981519152604482015290519081900360640190fd5b611cf987878080601f01602080910402602001604051908101604052809392919081815260200183838082843750612f0c945050505050565b15611d4e576040805160e560020a62461bcd02815260206004820152601b60248201527f696e76616c696420627463206465706f73697420616464726573730000000000604482015290519081900360640190fd5b611e2187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375050336000908152600360209081526040918290208054835160026001831615610100026000190190921691909104601f8101849004840282018401909452838152965094509092508401905082828015611e175780601f10611dec57610100808354040283529160200191611e17565b820191906000526020600020905b815481529060010190602001808311611dfa57829003601f168201915b50505050506130ca565b1515611e77576040805160e560020a62461bcd02815260206004820152601960248201527f77726f6e6720627463206465706f736974206164647265737300000000000000604482015290519081900360640190fd5b6007549350611e84612f30565b925060e06040519081016040528033600160a060020a031681526020018b815260200188888080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505081526020018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375050509284525050506020810186905260408101859052606001600090529150611f3282612f34565b6000818152600560209081526040808320889055600780546001810180835594829052875191027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68881018054600160a060020a0390931673ffffffffffffffffffffffffffffffffffffffff19909316929092178255878401517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68982015591870151805195965093948794919361200d937fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a01920190613608565b5060608201518051612029916003840191602090910190613608565b506080820151600482015560a0820151600582015560c082015160068201805460ff1916600183600381111561205b57fe5b021790555050505033600160a060020a0316847f09e00024b3e14e42d4e78c05bf370a34c2e4ce4027dad38abafdb1bf49da432f8c8a8a8e8e8a89604051808881526020018060200180602001858152602001846000191660001916815260200183810383528989828181526020019250808284379091018481038352878152602001905087878082843760405192018290039b50909950505050505050505050a35060019998505050505050505050565b600080612118613539565b6002546040805160e260020a630d7203230281523360048201529051600160a060020a03909216916335c80c8c916024808201926020929091908290030181600087803b15801561216857600080fd5b505af115801561217c573d6000803e3d6000fd5b505050506040513d602081101561219257600080fd5b505115156121d8576040805160e560020a62461bcd02815260206004820152601760248201526000805160206136b1833981519152604482015290519081900360640190fd5b6121e186613257565b809250819350505084846008848154811015156121fa57fe5b9060005260206000209060070201600301919061221892919061358a565b50600260088381548110151561222a57fe5b60009182526020909120600660079092020101805460ff1916600183600381111561225157fe5b0217905550816006600061240b60088681548110151561226d57fe5b60009182526020918290206040805160e0810182526007939093029091018054600160a060020a03168352600180820154848601526002808301805485516101009482161594909402600019011691909104601f810187900487028301870185528083529495929493860193919290919083018282801561232f5780601f106123045761010080835404028352916020019161232f565b820191906000526020600020905b81548152906001019060200180831161231257829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156123c35780601f10612398576101008083540402835291602001916123c3565b820191906000526020600020905b8154815290600101906020018083116123a657829003601f168201915b50505091835250506004820154602082015260058201546040820152600682015460609091019060ff1660038111156123f857fe5b600381111561240357fe5b905250612f34565b60001916600019168152602001908152602001600020819055508060000151600160a060020a031681608001517f1949e77206780c38f7c6487c926f8a51280fcdbf63397a01a3428dbfccd2b09f8360200151846040015189898760a001518d6040518087815260200180602001806020018581526020018460001916600019168152602001838103835288818151815260200191508051906020019080838360005b838110156124c65781810151838201526020016124ae565b50505050905090810190601f1680156124f35780820380516001836020036101000a031916815260200191505b50838103825286815260200187878082843760405192018290039a509098505050505050505050a350600195945050505050565b60056020526000908152604090205481565b600080600060608060006060600061254f613539565b606060078b81548110151561256057fe5b60009182526020918290206040805160e0810182526007939093029091018054600160a060020a03168352600180820154848601526002808301805485516101009482161594909402600019011691909104601f81018790048702830187018552808352949592949386019391929091908301828280156126225780601f106125f757610100808354040283529160200191612622565b820191906000526020600020905b81548152906001019060200180831161260557829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156126b65780601f1061268b576101008083540402835291602001916126b6565b820191906000526020600020905b81548152906001019060200180831161269957829003601f168201915b50505091835250506004820154602082015260058201546040820152600682015460609091019060ff1660038111156126eb57fe5b60038111156126f657fe5b8152505091506127098260c001516132d9565b905081608001519950816000015198508160200151975081604001519650816060015195508160a00151945080935061274182612f34565b92505050919395975091939597565b60008061275b613539565b6002546040805160e060020a631a2f71670281523360048201529051600160a060020a0390921691631a2f7167916024808201926020929091908290030181600087803b1580156127ab57600080fd5b505af11580156127bf573d6000803e3d6000fd5b505050506040513d60208110156127d557600080fd5b5051151561281b576040805160e560020a62461bcd0281526020600482015260166024820152600080516020613691833981519152604482015290519081900360640190fd5b61282484612ce0565b80519193509150600160a060020a031633146128b0576040805160e560020a62461bcd02815260206004820152603960248201527f63616e63656c2073656e64657220697320646966666572656e74207468616e2060448201527f70656e64696e67207265717565737420696e69746961746f7200000000000000606482015290519081900360840190fd5b60016007838154811015156128c157fe5b60009182526020909120600660079092020101805460ff191660018360038111156128e857fe5b0217905550604080518581529051339184917fb419f275eebfa354bbab2709955ee0c0e25ca95fae50a8e3672c5e3d9c931f589181900360200190a35060019392505050565b60066020526000908152604090205481565b60046020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015611a235780601f106119f857610100808354040283529160200191611a23565b600080600060608060006060600080606060088b8154811015156129c857fe5b6000918252602090912060079091020160068101549092506129ec9060ff166132d9565b9050816004015499508160000160009054906101000a9004600160a060020a0316985081600101549750816002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612aae5780601f10612a8357610100808354040283529160200191612aae565b820191906000526020600020905b815481529060010190602001808311612a9157829003601f168201915b5050505060038401805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152949b50919250830182828015612b3e5780601f10612b1357610100808354040283529160200191612b3e565b820191906000526020600020905b815481529060010190602001808311612b2157829003601f168201915b5050505060058401546040805160e0810182528654600160a060020a031681526001808801546020808401919091526002808a01805486516101009582161595909502600019011691909104601f81018390048302840183018652808452979d50949b5096995089966127419692955088949386019391929083018282801561232f5780601f106123045761010080835404028352916020019161232f565b600154600160a060020a031681565b600054600160a060020a03163314612c0357600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600254600160a060020a031681565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015612ca457600080fd5b505af1158015612cb8573d6000803e3d6000fd5b505050506040513d6020811015612cce57600080fd5b50511515612cdb57600080fd5b505050565b6000612cea613539565b821515612d41576040805160e560020a62461bcd02815260206004820152601160248201527f7265717565737420686173682069732030000000000000000000000000000000604482015290519081900360640190fd5b600083815260056020526040902054600780549193509083908110612d6257fe5b60009182526020918290206040805160e0810182526007939093029091018054600160a060020a03168352600180820154848601526002808301805485516101009482161594909402600019011691909104601f8101879004870283018701855280835294959294938601939192909190830182828015612e245780601f10612df957610100808354040283529160200191612e24565b820191906000526020600020905b815481529060010190602001808311612e0757829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015612eb85780601f10612e8d57610100808354040283529160200191612eb8565b820191906000526020600020905b815481529060010190602001808311612e9b57829003601f168201915b50505091835250506004820154602082015260058201546040820152600682015460609091019060ff166003811115612eed57fe5b6003811115612ef857fe5b9052509050612f07818461344d565b915091565b6000612f288260206040519081016040528060008152506130ca565b90505b919050565b4290565b6000816000015182602001518360400151846060015185608001518660a001516040516020018087600160a060020a0316600160a060020a031681526020018681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015612fc2578181015183820152602001612faa565b50505050905090810190601f168015612fef5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b8381101561302257818101518382015260200161300a565b50505050905090810190601f16801561304f5780820380516001836020036101000a031916815260200191505b50985050505050505050506040516020818303038152906040526040518082805190602001908083835b602083106130985780518252601f199092019160209182019101613079565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b6000816040516020018082805190602001908083835b602083106130ff5780518252601f1990920191602091820191016130e0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106131625780518252601f199092019160209182019101613143565b51815160209384036101000a60001901801990921691161790526040519190930181900381208851909550889450908301928392508401908083835b602083106131bd5780518252601f19909201916020918201910161319e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106132205780518252601f199092019160209182019101613201565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120939093149695505050505050565b6000613261613539565b8215156132b8576040805160e560020a62461bcd02815260206004820152601160248201527f7265717565737420686173682069732030000000000000000000000000000000604482015290519081900360640190fd5b600083815260066020526040902054600880549193509083908110612d6257fe5b606060008260038111156132e957fe5b1415613329575060408051808201909152600781527f70656e64696e67000000000000000000000000000000000000000000000000006020820152612f2b565b600182600381111561333757fe5b1415613377575060408051808201909152600881527f63616e63656c65640000000000000000000000000000000000000000000000006020820152612f2b565b600282600381111561338557fe5b14156133c5575060408051808201909152600881527f617070726f7665640000000000000000000000000000000000000000000000006020820152612f2b565b60038260038111156133d357fe5b1415613413575060408051808201909152600881527f72656a65637465640000000000000000000000000000000000000000000000006020820152612f2b565b5060408051808201909152600781527f756e6b6e6f776e000000000000000000000000000000000000000000000000006020820152612f2b565b60008260c00151600381111561345f57fe5b146134b4576040805160e560020a62461bcd02815260206004820152601660248201527f72657175657374206973206e6f742070656e64696e6700000000000000000000604482015290519081900360640190fd5b6134bd82612f34565b81146107ff576040805160e560020a62461bcd02815260206004820152603360248201527f676976656e2072657175657374206861736820646f6573206e6f74206d61746360448201527f6820612070656e64696e67207265717565737400000000000000000000000000606482015290519081900360840190fd5b60e0604051908101604052806000600160a060020a0316815260200160008152602001606081526020016060815260200160008152602001600081526020016000600381111561358557fe5b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106135cb5782800160ff198235161785556135f8565b828001600101855582156135f8579182015b828111156135f85782358255916020019190600101906135dd565b50613604929150613676565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061364957805160ff19168380011785556135f8565b828001600101855582156135f8579182015b828111156135f857825182559160200191906001019061365b565b610b6091905b80821115613604576000815560010161367c560073656e646572206e6f742061206d65726368616e742e0000000000000000000073656e646572206e6f74206120637573746f6469616e2e000000000000000000a165627a7a72305820b0338d43bfb4717e2a4fd01cd472082587b04b41ff45fca666860ac3fdfc7f140029000000000000000000000000ca06411bd7a7296d7dbdd0050dfc846e95febeb7

Deployed Bytecode

0x60806040526004361061012f5763ffffffff60e060020a60003504166317ffc32081146101345780632bf90baa14610157578063311104f314610183578063321d0f7e146101aa578063424e6575146101ca57806342966c68146103035780634e71e0c81461031b5780636406c10c1461033057806368c4d91914610348578063715018a61461037557806372f69a721461038a5780637840fc8e1461039f578063861f92a8146104355780638da5cb5b1461044d5780638e24a7641461047e5780639355f0a4146104ae5780639ad4b86b146104d2578063b69b22d8146104ea578063c06e2d2414610683578063c72551be1461069b578063d25e178d146106b3578063e21c40c0146106d4578063e30c3978146106ec578063f2fde38b14610701578063f77c479114610722575b600080fd5b34801561014057600080fd5b50610155600160a060020a0360043516610737565b005b34801561016357600080fd5b5061016f600435610803565b604080519115158252519081900360200190f35b34801561018f57600080fd5b50610198610b5c565b60408051918252519081900360200190f35b3480156101b657600080fd5b5061016f6004803560248101910135610b63565b3480156101d657600080fd5b506101e2600435610d2e565b6040518088600160a060020a0316600160a060020a03168152602001878152602001806020018060200186815260200185815260200184600381111561022457fe5b60ff168152602001838103835288818151815260200191508051906020019080838360005b83811015610261578181015183820152602001610249565b50505050905090810190601f16801561028e5780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b838110156102c15781810151838201526020016102a9565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561030f57600080fd5b5061016f600435610e9e565b34801561032757600080fd5b5061015561154f565b34801561033c57600080fd5b506101e26004356115d7565b34801561035457600080fd5b5061016f60048035600160a060020a031690602480359081019101356115e5565b34801561038157600080fd5b5061015561191e565b34801561039657600080fd5b5061019861198a565b3480156103ab57600080fd5b506103c0600160a060020a0360043516611990565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103fa5781810151838201526020016103e2565b50505050905090810190601f1680156104275780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044157600080fd5b5061016f600435611a2b565b34801561045957600080fd5b50610462611be5565b60408051600160a060020a039092168252519081900360200190f35b34801561048a57600080fd5b5061016f600480359060248035808201929081013591604435908101910135611bf4565b3480156104ba57600080fd5b5061016f60048035906024803590810191013561210d565b3480156104de57600080fd5b50610198600435612527565b3480156104f657600080fd5b50610502600435612539565b6040518089815260200188600160a060020a0316600160a060020a031681526020018781526020018060200180602001868152602001806020018560001916600019168152602001848103845289818151815260200191508051906020019080838360005b8381101561057f578181015183820152602001610567565b50505050905090810190601f1680156105ac5780820380516001836020036101000a031916815260200191505b5084810383528851815288516020918201918a019080838360005b838110156105df5781810151838201526020016105c7565b50505050905090810190601f16801561060c5780820380516001836020036101000a031916815260200191505b50848103825286518152865160209182019188019080838360005b8381101561063f578181015183820152602001610627565b50505050905090810190601f16801561066c5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b34801561068f57600080fd5b5061016f600435612750565b3480156106a757600080fd5b5061019860043561292e565b3480156106bf57600080fd5b506103c0600160a060020a0360043516612940565b3480156106e057600080fd5b506105026004356129a8565b3480156106f857600080fd5b50610462612bdd565b34801561070d57600080fd5b50610155600160a060020a0360043516612bec565b34801561072e57600080fd5b50610462612c32565b60008054600160a060020a0316331461074f57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b1580156107b057600080fd5b505af11580156107c4573d6000803e3d6000fd5b505050506040513d60208110156107da57600080fd5b50516000549091506107ff90600160a060020a0384811691168363ffffffff612c4116565b5050565b60008061080e613539565b6002546040805160e260020a630d7203230281523360048201529051600160a060020a03909216916335c80c8c916024808201926020929091908290030181600087803b15801561085e57600080fd5b505af1158015610872573d6000803e3d6000fd5b505050506040513d602081101561088857600080fd5b505115156108ce576040805160e560020a62461bcd02815260206004820152601760248201526000805160206136b1833981519152604482015290519081900360640190fd5b6108d784612ce0565b60078054929450909250600291849081106108ee57fe5b60009182526020909120600660079092020101805460ff1916600183600381111561091557fe5b02179055506002548151602080840151604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03948516600482015260248101929092525192909316926340c10f1992604480830193928290030181600087803b15801561098d57600080fd5b505af11580156109a1573d6000803e3d6000fd5b505050506040513d60208110156109b757600080fd5b50511515610a0f576040805160e560020a62461bcd02815260206004820152600b60248201527f6d696e74206661696c6564000000000000000000000000000000000000000000604482015290519081900360640190fd5b8060000151600160a060020a031681608001517f051f4ba27061b0e6dc829669a7baa8bba9cf7f6cd2f95e1f0bdd9c22126d8b218360200151846040015185606001518660a001518a6040518086815260200180602001806020018581526020018460001916600019168152602001838103835287818151815260200191508051906020019080838360005b83811015610ab3578181015183820152602001610a9b565b50505050905090810190601f168015610ae05780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b83811015610b13578181015183820152602001610afb565b50505050905090810190601f168015610b405780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a35060019392505050565b6007545b90565b6002546040805160e060020a631a2f71670281523360048201529051600092600160a060020a031691631a2f716791602480830192602092919082900301818787803b158015610bb257600080fd5b505af1158015610bc6573d6000803e3d6000fd5b505050506040513d6020811015610bdc57600080fd5b50511515610c22576040805160e560020a62461bcd0281526020600482015260166024820152600080516020613691833981519152604482015290519081900360640190fd5b610c5b83838080601f01602080910402602001604051908101604052809392919081815260200183838082843750612f0c945050505050565b15610cb0576040805160e560020a62461bcd02815260206004820152601b60248201527f696e76616c696420627463206465706f73697420616464726573730000000000604482015290519081900360640190fd5b336000908152600460205260409020610cca90848461358a565b5033600160a060020a03167fec7032a7f06b5d29ee5a6a1e73ab4e4dc80890c75a5104e3c075584e42775c2984846040518080602001828103825284848281815260200192508082843760405192018290039550909350505050a250600192915050565b6007805482908110610d3c57fe5b6000918252602091829020600791909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f8101889004880285018801909252818452600160a060020a0390941696509094919291830182828015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b5050505060038301805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152949594935090830182828015610e7d5780601f10610e5257610100808354040283529160200191610e7d565b820191906000526020600020905b815481529060010190602001808311610e6057829003601f168201915b50505050600483015460058401546006909401549293909290915060ff1687565b600060606000806060610eaf613539565b6002546040805160e060020a631a2f71670281523360048201529051600092600160a060020a031691631a2f716791602480830192602092919082900301818787803b158015610efe57600080fd5b505af1158015610f12573d6000803e3d6000fd5b505050506040513d6020811015610f2857600080fd5b50511515610f6e576040805160e560020a62461bcd0281526020600482015260166024820152600080516020613691833981519152604482015290519081900360640190fd5b3360009081526004602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156110025780601f10610fd757610100808354040283529160200191611002565b820191906000526020600020905b815481529060010190602001808311610fe557829003601f168201915b5050505050955061101286612f0c565b1561108d576040805160e560020a62461bcd02815260206004820152602860248201527f6d65726368616e7420627463206465706f73697420616464726573732077617360448201527f206e6f7420736574000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600854945061109a612f30565b60408051602081810183526000808352835160e0810185523381529182018d90529281018a9052606081018290526080810189905260a08101849052929650945060c082015291506110eb82612f34565b6000818152600660209081526040808320899055600880546001810180835591909452865160079094027ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee381018054600160a060020a0390961673ffffffffffffffffffffffffffffffffffffffff19909616959095178555878401517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee482015591870151805195965090948794936111c8937ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee501920190613608565b50606082015180516111e4916003840191602090910190613608565b506080820151600482015560a0820151600582015560c082015160068201805460ff1916600183600381111561121657fe5b0217905550505050600260009054906101000a9004600160a060020a0316600160a060020a0316635eebb1ce6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561127157600080fd5b505af1158015611285573d6000803e3d6000fd5b505050506040513d602081101561129b57600080fd5b5051600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a039283166024820152604481018c9052905191909216916323b872dd9160648083019260209291908290030181600087803b15801561131257600080fd5b505af1158015611326573d6000803e3d6000fd5b505050506040513d602081101561133c57600080fd5b50511515611394576040805160e560020a62461bcd02815260206004820152601e60248201527f747261736e66657220746f6b656e7320746f206275726e206661696c65640000604482015290519081900360640190fd5b600254604080517f42966c68000000000000000000000000000000000000000000000000000000008152600481018b90529051600160a060020a03909216916342966c68916024808201926020929091908290030181600087803b1580156113fb57600080fd5b505af115801561140f573d6000803e3d6000fd5b505050506040513d602081101561142557600080fd5b5051151561147d576040805160e560020a62461bcd02815260206004820152600b60248201527f6275726e206661696c6564000000000000000000000000000000000000000000604482015290519081900360640190fd5b33600160a060020a0316857f865e64c3fa22a0daee479fc02875d3e97d581930b9679232344d4d5dcce6a7b28a89888660405180858152602001806020018481526020018360001916600019168152602001828103825285818151815260200191508051906020019080838360005b838110156115045781810151838201526020016114ec565b50505050905090810190601f1680156115315780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a3506001979650505050505050565b600154600160a060020a0316331461156657600080fd5b60015460008054604051600160a060020a0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b6008805482908110610d3c57fe5b6002546040805160e260020a630d7203230281523360048201529051600092600160a060020a0316916335c80c8c91602480830192602092919082900301818787803b15801561163457600080fd5b505af1158015611648573d6000803e3d6000fd5b505050506040513d602081101561165e57600080fd5b505115156116a4576040805160e560020a62461bcd02815260206004820152601760248201526000805160206136b1833981519152604482015290519081900360640190fd5b600160a060020a0384161515611704576040805160e560020a62461bcd02815260206004820152601860248201527f696e76616c6964206d65726368616e7420616464726573730000000000000000604482015290519081900360640190fd5b6002546040805160e060020a631a2f7167028152600160a060020a03878116600483015291519190921691631a2f71679160248083019260209291908290030181600087803b15801561175657600080fd5b505af115801561176a573d6000803e3d6000fd5b505050506040513d602081101561178057600080fd5b505115156117fe576040805160e560020a62461bcd02815260206004820152602860248201527f6d65726368616e742061646472657373206973206e6f742061207265616c206d60448201527f65726368616e742e000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61183783838080601f01602080910402602001604051908101604052809392919081815260200183838082843750612f0c945050505050565b1561188c576040805160e560020a62461bcd02815260206004820152601b60248201527f696e76616c696420627463206465706f73697420616464726573730000000000604482015290519081900360640190fd5b600160a060020a03841660009081526003602052604090206118af90848461358a565b5033600160a060020a031684600160a060020a03167fa1cea79438a06b74491693be087a2035e62acbe738749fc0ba7fc87df2eed93985856040518080602001828103825284848281815260200192508082843760405192018290039550909350505050a35060019392505050565b600054600160a060020a0316331461193557600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60085490565b60036020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015611a235780601f106119f857610100808354040283529160200191611a23565b820191906000526020600020905b815481529060010190602001808311611a0657829003601f168201915b505050505081565b600080611a36613539565b6002546040805160e260020a630d7203230281523360048201529051600160a060020a03909216916335c80c8c916024808201926020929091908290030181600087803b158015611a8657600080fd5b505af1158015611a9a573d6000803e3d6000fd5b505050506040513d6020811015611ab057600080fd5b50511515611af6576040805160e560020a62461bcd02815260206004820152601760248201526000805160206136b1833981519152604482015290519081900360640190fd5b611aff84612ce0565b6007805492945090925060039184908110611b1657fe5b60009182526020909120600660079092020101805460ff19166001836003811115611b3d57fe5b02179055508060000151600160a060020a031681608001517fdadc06f5b98131083e96b856c044184efd23ae2e797a876fd80aa5dae4f724558360200151846040015185606001518660a001518a60405180868152602001806020018060200185815260200184600019166000191681526020018381038352878181518152602001915080519060200190808383600083811015610ab3578181015183820152602001610a9b565b600054600160a060020a031681565b6000806000611c01613539565b6002546040805160e060020a631a2f71670281523360048201529051600092600160a060020a031691631a2f716791602480830192602092919082900301818787803b158015611c5057600080fd5b505af1158015611c64573d6000803e3d6000fd5b505050506040513d6020811015611c7a57600080fd5b50511515611cc0576040805160e560020a62461bcd0281526020600482015260166024820152600080516020613691833981519152604482015290519081900360640190fd5b611cf987878080601f01602080910402602001604051908101604052809392919081815260200183838082843750612f0c945050505050565b15611d4e576040805160e560020a62461bcd02815260206004820152601b60248201527f696e76616c696420627463206465706f73697420616464726573730000000000604482015290519081900360640190fd5b611e2187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375050336000908152600360209081526040918290208054835160026001831615610100026000190190921691909104601f8101849004840282018401909452838152965094509092508401905082828015611e175780601f10611dec57610100808354040283529160200191611e17565b820191906000526020600020905b815481529060010190602001808311611dfa57829003601f168201915b50505050506130ca565b1515611e77576040805160e560020a62461bcd02815260206004820152601960248201527f77726f6e6720627463206465706f736974206164647265737300000000000000604482015290519081900360640190fd5b6007549350611e84612f30565b925060e06040519081016040528033600160a060020a031681526020018b815260200188888080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505081526020018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375050509284525050506020810186905260408101859052606001600090529150611f3282612f34565b6000818152600560209081526040808320889055600780546001810180835594829052875191027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68881018054600160a060020a0390931673ffffffffffffffffffffffffffffffffffffffff19909316929092178255878401517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68982015591870151805195965093948794919361200d937fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a01920190613608565b5060608201518051612029916003840191602090910190613608565b506080820151600482015560a0820151600582015560c082015160068201805460ff1916600183600381111561205b57fe5b021790555050505033600160a060020a0316847f09e00024b3e14e42d4e78c05bf370a34c2e4ce4027dad38abafdb1bf49da432f8c8a8a8e8e8a89604051808881526020018060200180602001858152602001846000191660001916815260200183810383528989828181526020019250808284379091018481038352878152602001905087878082843760405192018290039b50909950505050505050505050a35060019998505050505050505050565b600080612118613539565b6002546040805160e260020a630d7203230281523360048201529051600160a060020a03909216916335c80c8c916024808201926020929091908290030181600087803b15801561216857600080fd5b505af115801561217c573d6000803e3d6000fd5b505050506040513d602081101561219257600080fd5b505115156121d8576040805160e560020a62461bcd02815260206004820152601760248201526000805160206136b1833981519152604482015290519081900360640190fd5b6121e186613257565b809250819350505084846008848154811015156121fa57fe5b9060005260206000209060070201600301919061221892919061358a565b50600260088381548110151561222a57fe5b60009182526020909120600660079092020101805460ff1916600183600381111561225157fe5b0217905550816006600061240b60088681548110151561226d57fe5b60009182526020918290206040805160e0810182526007939093029091018054600160a060020a03168352600180820154848601526002808301805485516101009482161594909402600019011691909104601f810187900487028301870185528083529495929493860193919290919083018282801561232f5780601f106123045761010080835404028352916020019161232f565b820191906000526020600020905b81548152906001019060200180831161231257829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156123c35780601f10612398576101008083540402835291602001916123c3565b820191906000526020600020905b8154815290600101906020018083116123a657829003601f168201915b50505091835250506004820154602082015260058201546040820152600682015460609091019060ff1660038111156123f857fe5b600381111561240357fe5b905250612f34565b60001916600019168152602001908152602001600020819055508060000151600160a060020a031681608001517f1949e77206780c38f7c6487c926f8a51280fcdbf63397a01a3428dbfccd2b09f8360200151846040015189898760a001518d6040518087815260200180602001806020018581526020018460001916600019168152602001838103835288818151815260200191508051906020019080838360005b838110156124c65781810151838201526020016124ae565b50505050905090810190601f1680156124f35780820380516001836020036101000a031916815260200191505b50838103825286815260200187878082843760405192018290039a509098505050505050505050a350600195945050505050565b60056020526000908152604090205481565b600080600060608060006060600061254f613539565b606060078b81548110151561256057fe5b60009182526020918290206040805160e0810182526007939093029091018054600160a060020a03168352600180820154848601526002808301805485516101009482161594909402600019011691909104601f81018790048702830187018552808352949592949386019391929091908301828280156126225780601f106125f757610100808354040283529160200191612622565b820191906000526020600020905b81548152906001019060200180831161260557829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156126b65780601f1061268b576101008083540402835291602001916126b6565b820191906000526020600020905b81548152906001019060200180831161269957829003601f168201915b50505091835250506004820154602082015260058201546040820152600682015460609091019060ff1660038111156126eb57fe5b60038111156126f657fe5b8152505091506127098260c001516132d9565b905081608001519950816000015198508160200151975081604001519650816060015195508160a00151945080935061274182612f34565b92505050919395975091939597565b60008061275b613539565b6002546040805160e060020a631a2f71670281523360048201529051600160a060020a0390921691631a2f7167916024808201926020929091908290030181600087803b1580156127ab57600080fd5b505af11580156127bf573d6000803e3d6000fd5b505050506040513d60208110156127d557600080fd5b5051151561281b576040805160e560020a62461bcd0281526020600482015260166024820152600080516020613691833981519152604482015290519081900360640190fd5b61282484612ce0565b80519193509150600160a060020a031633146128b0576040805160e560020a62461bcd02815260206004820152603960248201527f63616e63656c2073656e64657220697320646966666572656e74207468616e2060448201527f70656e64696e67207265717565737420696e69746961746f7200000000000000606482015290519081900360840190fd5b60016007838154811015156128c157fe5b60009182526020909120600660079092020101805460ff191660018360038111156128e857fe5b0217905550604080518581529051339184917fb419f275eebfa354bbab2709955ee0c0e25ca95fae50a8e3672c5e3d9c931f589181900360200190a35060019392505050565b60066020526000908152604090205481565b60046020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015611a235780601f106119f857610100808354040283529160200191611a23565b600080600060608060006060600080606060088b8154811015156129c857fe5b6000918252602090912060079091020160068101549092506129ec9060ff166132d9565b9050816004015499508160000160009054906101000a9004600160a060020a0316985081600101549750816002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612aae5780601f10612a8357610100808354040283529160200191612aae565b820191906000526020600020905b815481529060010190602001808311612a9157829003601f168201915b5050505060038401805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152949b50919250830182828015612b3e5780601f10612b1357610100808354040283529160200191612b3e565b820191906000526020600020905b815481529060010190602001808311612b2157829003601f168201915b5050505060058401546040805160e0810182528654600160a060020a031681526001808801546020808401919091526002808a01805486516101009582161595909502600019011691909104601f81018390048302840183018652808452979d50949b5096995089966127419692955088949386019391929083018282801561232f5780601f106123045761010080835404028352916020019161232f565b600154600160a060020a031681565b600054600160a060020a03163314612c0357600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600254600160a060020a031681565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015612ca457600080fd5b505af1158015612cb8573d6000803e3d6000fd5b505050506040513d6020811015612cce57600080fd5b50511515612cdb57600080fd5b505050565b6000612cea613539565b821515612d41576040805160e560020a62461bcd02815260206004820152601160248201527f7265717565737420686173682069732030000000000000000000000000000000604482015290519081900360640190fd5b600083815260056020526040902054600780549193509083908110612d6257fe5b60009182526020918290206040805160e0810182526007939093029091018054600160a060020a03168352600180820154848601526002808301805485516101009482161594909402600019011691909104601f8101879004870283018701855280835294959294938601939192909190830182828015612e245780601f10612df957610100808354040283529160200191612e24565b820191906000526020600020905b815481529060010190602001808311612e0757829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015612eb85780601f10612e8d57610100808354040283529160200191612eb8565b820191906000526020600020905b815481529060010190602001808311612e9b57829003601f168201915b50505091835250506004820154602082015260058201546040820152600682015460609091019060ff166003811115612eed57fe5b6003811115612ef857fe5b9052509050612f07818461344d565b915091565b6000612f288260206040519081016040528060008152506130ca565b90505b919050565b4290565b6000816000015182602001518360400151846060015185608001518660a001516040516020018087600160a060020a0316600160a060020a031681526020018681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015612fc2578181015183820152602001612faa565b50505050905090810190601f168015612fef5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b8381101561302257818101518382015260200161300a565b50505050905090810190601f16801561304f5780820380516001836020036101000a031916815260200191505b50985050505050505050506040516020818303038152906040526040518082805190602001908083835b602083106130985780518252601f199092019160209182019101613079565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b6000816040516020018082805190602001908083835b602083106130ff5780518252601f1990920191602091820191016130e0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106131625780518252601f199092019160209182019101613143565b51815160209384036101000a60001901801990921691161790526040519190930181900381208851909550889450908301928392508401908083835b602083106131bd5780518252601f19909201916020918201910161319e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106132205780518252601f199092019160209182019101613201565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120939093149695505050505050565b6000613261613539565b8215156132b8576040805160e560020a62461bcd02815260206004820152601160248201527f7265717565737420686173682069732030000000000000000000000000000000604482015290519081900360640190fd5b600083815260066020526040902054600880549193509083908110612d6257fe5b606060008260038111156132e957fe5b1415613329575060408051808201909152600781527f70656e64696e67000000000000000000000000000000000000000000000000006020820152612f2b565b600182600381111561333757fe5b1415613377575060408051808201909152600881527f63616e63656c65640000000000000000000000000000000000000000000000006020820152612f2b565b600282600381111561338557fe5b14156133c5575060408051808201909152600881527f617070726f7665640000000000000000000000000000000000000000000000006020820152612f2b565b60038260038111156133d357fe5b1415613413575060408051808201909152600881527f72656a65637465640000000000000000000000000000000000000000000000006020820152612f2b565b5060408051808201909152600781527f756e6b6e6f776e000000000000000000000000000000000000000000000000006020820152612f2b565b60008260c00151600381111561345f57fe5b146134b4576040805160e560020a62461bcd02815260206004820152601660248201527f72657175657374206973206e6f742070656e64696e6700000000000000000000604482015290519081900360640190fd5b6134bd82612f34565b81146107ff576040805160e560020a62461bcd02815260206004820152603360248201527f676976656e2072657175657374206861736820646f6573206e6f74206d61746360448201527f6820612070656e64696e67207265717565737400000000000000000000000000606482015290519081900360840190fd5b60e0604051908101604052806000600160a060020a0316815260200160008152602001606081526020016060815260200160008152602001600081526020016000600381111561358557fe5b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106135cb5782800160ff198235161785556135f8565b828001600101855582156135f8579182015b828111156135f85782358255916020019190600101906135dd565b50613604929150613676565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061364957805160ff19168380011785556135f8565b828001600101855582156135f8579182015b828111156135f857825182559160200191906001019061365b565b610b6091905b80821115613604576000815560010161367c560073656e646572206e6f742061206d65726368616e742e0000000000000000000073656e646572206e6f74206120637573746f6469616e2e000000000000000000a165627a7a72305820b0338d43bfb4717e2a4fd01cd472082587b04b41ff45fca666860ac3fdfc7f140029

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

000000000000000000000000ca06411bd7a7296d7dbdd0050dfc846e95febeb7

-----Decoded View---------------
Arg [0] : _controller (address): 0xCA06411bd7a7296d7dbdd0050DFc846E95fEBEB7

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ca06411bd7a7296d7dbdd0050dfc846e95febeb7


Swarm Source

bzzr://b0338d43bfb4717e2a4fd01cd472082587b04b41ff45fca666860ac3fdfc7f14

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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