ETH Price: $3,213.53 (-3.30%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...224186512025-05-05 16:12:59219 days ago1746461579IN
0xc8425ACE...03440098A
0 ETH0.000030610.69860429
Set User Role223984112025-05-02 20:10:59222 days ago1746216659IN
0xc8425ACE...03440098A
0 ETH0.000047751.01099586
Set User Role223911542025-05-01 19:41:59223 days ago1746128519IN
0xc8425ACE...03440098A
0 ETH0.000035930.55859845
Set User Role223911532025-05-01 19:41:47223 days ago1746128507IN
0xc8425ACE...03440098A
0 ETH0.000033820.52570992
Set User Role223911522025-05-01 19:41:35223 days ago1746128495IN
0xc8425ACE...03440098A
0 ETH0.000034470.53575936
Set User Role223911512025-05-01 19:41:23223 days ago1746128483IN
0xc8425ACE...03440098A
0 ETH0.00003450.53631603
Set User Role223910612025-05-01 19:23:23223 days ago1746127403IN
0xc8425ACE...03440098A
0 ETH0.000050821.14368039
Set User Role223910562025-05-01 19:22:23223 days ago1746127343IN
0xc8425ACE...03440098A
0 ETH0.000044570.69288439
Set User Role223910552025-05-01 19:22:11223 days ago1746127331IN
0xc8425ACE...03440098A
0 ETH0.000045790.73456128
Set User Role223910412025-05-01 19:19:23223 days ago1746127163IN
0xc8425ACE...03440098A
0 ETH0.000053440.83064139
Set User Role223910392025-05-01 19:18:59223 days ago1746127139IN
0xc8425ACE...03440098A
0 ETH0.000054770.85137629
Set User Role223910372025-05-01 19:18:35223 days ago1746127115IN
0xc8425ACE...03440098A
0 ETH0.000053270.82817405
Set User Role223910362025-05-01 19:18:23223 days ago1746127103IN
0xc8425ACE...03440098A
0 ETH0.000049780.77384573
Set User Role223910352025-05-01 19:18:11223 days ago1746127091IN
0xc8425ACE...03440098A
0 ETH0.000050060.77816309
Set User Role223910342025-05-01 19:17:59223 days ago1746127079IN
0xc8425ACE...03440098A
0 ETH0.000046970.73017639
Set User Role223910332025-05-01 19:17:47223 days ago1746127067IN
0xc8425ACE...03440098A
0 ETH0.000050060.7780784
Set User Role223910322025-05-01 19:17:35223 days ago1746127055IN
0xc8425ACE...03440098A
0 ETH0.000051510.80065351
Set User Role223910312025-05-01 19:17:23223 days ago1746127043IN
0xc8425ACE...03440098A
0 ETH0.00005110.79436087
Set User Role223910292025-05-01 19:16:59223 days ago1746127019IN
0xc8425ACE...03440098A
0 ETH0.000052210.8115955
Set User Role223910282025-05-01 19:16:47223 days ago1746127007IN
0xc8425ACE...03440098A
0 ETH0.000052370.8139908
Set User Role223910272025-05-01 19:16:35223 days ago1746126995IN
0xc8425ACE...03440098A
0 ETH0.000051820.80542313
Set User Role223910262025-05-01 19:16:23223 days ago1746126983IN
0xc8425ACE...03440098A
0 ETH0.000049450.76865558
Set User Role223910242025-05-01 19:15:59223 days ago1746126959IN
0xc8425ACE...03440098A
0 ETH0.000050660.78750473
Set User Role223910222025-05-01 19:15:35223 days ago1746126935IN
0xc8425ACE...03440098A
0 ETH0.000054370.84517996
Set User Role223910212025-05-01 19:15:23223 days ago1746126923IN
0xc8425ACE...03440098A
0 ETH0.000053450.83088535
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x60806040223900372025-05-01 15:57:23223 days ago1746115043  Contract Creation0 ETH
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

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

Contract Name:
StrictRolesAuthority

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
cancun EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.28;

import {RolesAuthority} from "@solmate/src/auth/authorities/RolesAuthority.sol";
import {Authority} from "@solmate/src/auth/Auth.sol";

/**
 *                                     .-==+=======+:
 *                                      :---=-::-==:
 *                                      .-:-==-:-==:
 *                    .:::--::::::.     .--:-=--:--.       .:--:::--..
 *                   .=++=++:::::..     .:::---::--.    ....::...:::.
 *                    :::-::..::..      .::::-:::::.     ...::...:::.
 *                    ...::..::::..     .::::--::-:.    ....::...:::..
 *                    ............      ....:::..::.    ------:......
 *    ...........     ........:....     .....::..:..    ======-......      ...........
 *    :------:.:...   ...:+***++*#+     .------:---.    ...::::.:::...   .....:-----::.
 *    .::::::::-:..   .::--..:-::..    .-=+===++=-==:   ...:::..:--:..   .:==+=++++++*:
 *
 * @title StrictRolesAuthority
 * @notice An extension of RolesAuthority that enforces stricter role management rules
 * @dev This contract only allows adding roles through setUserRole() and requires admin multisig
 *      approval for role removal through removeUserRole()
 */
contract StrictRolesAuthority is RolesAuthority {
    /// @notice The error emitted when a user attempts to remove a role
    error RoleRemovalNotAllowed();

    /// @notice Emitted when a role is configured as removable
    event RemovableRoleConfigured(uint8 indexed role, bool allowed);

    /// @notice Which roles are allowed to be removed
    mapping(uint8 => bool) public isRoleRemovable;

    /**
     * @notice Creates a new StrictRolesAuthority instance
     * @param _owner The address that will be the owner of this authority
     * @param _authority The authority contract to use for authentication
     */
    constructor(address _owner, Authority _authority) RolesAuthority(_owner, _authority) {}

    /**
     * @notice Sets a role for a user, but only allows adding roles
     * @dev This function can only be called by authorized addresses
     * @param user The address of the user to set the role for
     * @param role The role to set
     * @param enabled Must be true, as this function only allows adding roles
     * @custom:reverts If enabled is false or caller is not authorized
     */
    function setUserRole(address user, uint8 role, bool enabled) public virtual override requiresAuth {
        if (!enabled) {
            revert RoleRemovalNotAllowed();
        }

        getUserRoles[user] |= bytes32(1 << role);

        emit UserRoleUpdated(user, role, true);
    }

    /**
     * @notice Removes a role from a user
     * @dev This function can only be called by called by the ADMIN_MULTISIG_ROLE
     * @param user The address of the user to remove the role from
     * @param role The role to remove
     * @custom:reverts If caller is not the admin multisig
     */
    function removeUserRole(address user, uint8 role) external virtual requiresAuth {
        if (!isRoleRemovable[role]) {
            revert RoleRemovalNotAllowed();
        }

        getUserRoles[user] &= ~bytes32(1 << role);

        emit UserRoleUpdated(user, role, false);
    }

    /**
     * @notice Returns all roles for a user
     * @param user The address of the user to get the roles for
     * @return A bitmask of all roles for the user
     */
    function getAllRoles(address user) public view returns (uint256) {
        return uint256(getUserRoles[user]);
    }

    /**
     * @notice Sets a role as removable or not
     * @dev This function can only be called by the owner (timelock)
     * @param role The role to set as removable
     * @param allowed Whether the role should be removable
     * @custom:reverts If caller is not the owner
     */
    function setRoleRemovable(uint8 role, bool allowed) external requiresAuth {
        isRoleRemovable[role] = allowed;
        emit RemovableRoleConfigured(role, allowed);
    }
}

// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

import {Auth, Authority} from "../Auth.sol";

/// @notice Role based Authority that supports up to 256 roles.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/authorities/RolesAuthority.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-roles/blob/master/src/roles.sol)
contract RolesAuthority is Auth, Authority {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event UserRoleUpdated(address indexed user, uint8 indexed role, bool enabled);

    event PublicCapabilityUpdated(address indexed target, bytes4 indexed functionSig, bool enabled);

    event RoleCapabilityUpdated(uint8 indexed role, address indexed target, bytes4 indexed functionSig, bool enabled);

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(address _owner, Authority _authority) Auth(_owner, _authority) {}

    /*//////////////////////////////////////////////////////////////
                            ROLE/USER STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(address => bytes32) public getUserRoles;

    mapping(address => mapping(bytes4 => bool)) public isCapabilityPublic;

    mapping(address => mapping(bytes4 => bytes32)) public getRolesWithCapability;

    function doesUserHaveRole(address user, uint8 role) public view virtual returns (bool) {
        return (uint256(getUserRoles[user]) >> role) & 1 != 0;
    }

    function doesRoleHaveCapability(
        uint8 role,
        address target,
        bytes4 functionSig
    ) public view virtual returns (bool) {
        return (uint256(getRolesWithCapability[target][functionSig]) >> role) & 1 != 0;
    }

    /*//////////////////////////////////////////////////////////////
                           AUTHORIZATION LOGIC
    //////////////////////////////////////////////////////////////*/

    function canCall(
        address user,
        address target,
        bytes4 functionSig
    ) public view virtual override returns (bool) {
        return
            isCapabilityPublic[target][functionSig] ||
            bytes32(0) != getUserRoles[user] & getRolesWithCapability[target][functionSig];
    }

    /*//////////////////////////////////////////////////////////////
                   ROLE CAPABILITY CONFIGURATION LOGIC
    //////////////////////////////////////////////////////////////*/

    function setPublicCapability(
        address target,
        bytes4 functionSig,
        bool enabled
    ) public virtual requiresAuth {
        isCapabilityPublic[target][functionSig] = enabled;

        emit PublicCapabilityUpdated(target, functionSig, enabled);
    }

    function setRoleCapability(
        uint8 role,
        address target,
        bytes4 functionSig,
        bool enabled
    ) public virtual requiresAuth {
        if (enabled) {
            getRolesWithCapability[target][functionSig] |= bytes32(1 << role);
        } else {
            getRolesWithCapability[target][functionSig] &= ~bytes32(1 << role);
        }

        emit RoleCapabilityUpdated(role, target, functionSig, enabled);
    }

    /*//////////////////////////////////////////////////////////////
                       USER ROLE ASSIGNMENT LOGIC
    //////////////////////////////////////////////////////////////*/

    function setUserRole(
        address user,
        uint8 role,
        bool enabled
    ) public virtual requiresAuth {
        if (enabled) {
            getUserRoles[user] |= bytes32(1 << role);
        } else {
            getUserRoles[user] &= ~bytes32(1 << role);
        }

        emit UserRoleUpdated(user, role, enabled);
    }
}

// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Provides a flexible and updatable auth pattern which is completely separate from application logic.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
abstract contract Auth {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    event AuthorityUpdated(address indexed user, Authority indexed newAuthority);

    address public owner;

    Authority public authority;

    constructor(address _owner, Authority _authority) {
        owner = _owner;
        authority = _authority;

        emit OwnershipTransferred(msg.sender, _owner);
        emit AuthorityUpdated(msg.sender, _authority);
    }

    modifier requiresAuth() virtual {
        require(isAuthorized(msg.sender, msg.sig), "UNAUTHORIZED");

        _;
    }

    function isAuthorized(address user, bytes4 functionSig) internal view virtual returns (bool) {
        Authority auth = authority; // Memoizing authority saves us a warm SLOAD, around 100 gas.

        // Checking if the caller is the owner only after calling the authority saves gas in most cases, but be
        // aware that this makes protected functions uncallable even to the owner if the authority is out of order.
        return (address(auth) != address(0) && auth.canCall(user, address(this), functionSig)) || user == owner;
    }

    function setAuthority(Authority newAuthority) public virtual {
        // We check if the caller is the owner first because we want to ensure they can
        // always swap out the authority even if it's reverting or using up a lot of gas.
        require(msg.sender == owner || authority.canCall(msg.sender, address(this), msg.sig));

        authority = newAuthority;

        emit AuthorityUpdated(msg.sender, newAuthority);
    }

    function transferOwnership(address newOwner) public virtual requiresAuth {
        owner = newOwner;

        emit OwnershipTransferred(msg.sender, newOwner);
    }
}

/// @notice A generic interface for a contract which provides authorization data to an Auth instance.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
interface Authority {
    function canCall(
        address user,
        address target,
        bytes4 functionSig
    ) external view returns (bool);
}

Settings
{
  "remappings": [
    "@level/src/=src/",
    "@level/config/=config/",
    "@level/script/=script/",
    "@level/test/=test/",
    "ds-test/=lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@openzeppelin-4.9.0/contracts/=lib/openzeppelin-contracts-4.9.0/contracts/",
    "@openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@solmate/=lib/solmate/",
    "@openzeppelin-upgrades/=lib/openzeppelin-foundry-upgrades/"
  ],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "none",
    "appendCBOR": false
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"contract Authority","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"RoleRemovalNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"PublicCapabilityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"role","type":"uint8"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"RemovableRoleConfigured","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"role","type":"uint8"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"RoleCapabilityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint8","name":"role","type":"uint8"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"UserRoleUpdated","type":"event"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract Authority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"}],"name":"canCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"}],"name":"doesRoleHaveCapability","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"role","type":"uint8"}],"name":"doesUserHaveRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAllRoles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"getRolesWithCapability","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"getUserRoles","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"isCapabilityPublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"isRoleRemovable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"role","type":"uint8"}],"name":"removeUserRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPublicCapability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setRoleCapability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setRoleRemovable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setUserRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

0x6080604052346100305761001a610014610133565b90610155565b610022610035565b6117686102e1823961176890f35b61003b565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906100679061003f565b810190811060018060401b0382111761007f57604052565b610049565b90610097610090610035565b928361005d565b565b5f80fd5b60018060a01b031690565b6100b19061009d565b90565b6100bd816100a8565b036100c457565b5f80fd5b905051906100d5826100b4565b565b6100e0906100a8565b90565b6100ec816100d7565b036100f357565b5f80fd5b90505190610104826100e3565b565b919060408382031261012e578061012261012b925f86016100c8565b936020016100f7565b90565b610099565b610151611a498038038061014681610084565b928339810190610106565b9091565b9061015f91610161565b565b9061016b9161016d565b565b9061017791610233565b565b5f1b90565b9061018f60018060a01b0391610179565b9181191691161790565b90565b6101b06101ab6101b59261009d565b610199565b61009d565b90565b6101c19061019c565b90565b6101cd906101b8565b90565b90565b906101e86101e36101ef926101c4565b6101d0565b825461017e565b9055565b6101fc9061019c565b90565b610208906101f3565b90565b90565b9061022361021e61022a926101ff565b61020b565b825461017e565b9055565b5f0190565b61023d815f6101d3565b61024882600161020e565b339061027d6102777f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101c4565b916101c4565b91610286610035565b806102908161022e565b0390a333906102c86102c27fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198936101c4565b916101ff565b916102d1610035565b806102db8161022e565b0390a356fe60806040526004361015610013575b610abb565b61001d5f3561012c565b806301d7b0221461012757806306a36aee146101225780632f47571f1461011d5780633e762e001461011857806367aff484146101135780637917b7941461010e5780637a9e5e4b146101095780637d40583d146101045780638da5cb5b146100ff578063b27fb668146100fa578063b44f794f146100f5578063b4bad06a146100f0578063b7009613146100eb578063bf7e214f146100e6578063c6b0263e146100e1578063ea7ca276146100dc5763f2fde38b0361000e57610a88565b610a52565b610a1e565b6109af565b61090b565b61089b565b61082d565b6107cb565b610771565b6106ca565b610651565b6105ce565b61054d565b6104de565b61043f565b610307565b6101c3565b60e01c90565b60405190565b5f80fd5b5f80fd5b60ff1690565b61014f81610140565b0361015657565b5f80fd5b9050359061016782610146565b565b151590565b61017781610169565b0361017e57565b5f80fd5b9050359061018f8261016e565b565b91906040838203126101b957806101ad6101b6925f860161015a565b93602001610182565b90565b61013c565b5f0190565b346101f2576101dc6101d6366004610191565b90610c16565b6101e4610132565b806101ee816101be565b0390f35b610138565b60018060a01b031690565b61020b906101f7565b90565b61021781610202565b0361021e57565b5f80fd5b9050359061022f8261020e565b565b9060208282031261024a57610247915f01610222565b90565b61013c565b90565b61026661026161026b926101f7565b61024f565b6101f7565b90565b61027790610252565b90565b6102839061026e565b90565b906102909061027a565b5f5260205260405f2090565b1c90565b90565b6102b39060086102b8930261029c565b6102a0565b90565b906102c691546102a3565b90565b6102df906102da6002915f92610286565b6102bb565b90565b90565b6102ee906102e2565b9052565b9190610305905f602085019401906102e5565b565b346103375761033361032261031d366004610231565b6102c9565b61032a610132565b918291826102f2565b0390f35b610138565b63ffffffff60e01b1690565b6103518161033c565b0361035857565b5f80fd5b9050359061036982610348565b565b91906040838203126103935780610387610390925f8601610222565b9360200161035c565b90565b61013c565b906103a29061027a565b5f5260205260405f2090565b6103b79061033c565b90565b906103c4906103ae565b5f5260205260405f2090565b60ff1690565b6103e69060086103eb930261029c565b6103d0565b90565b906103f991546103d6565b90565b61041561041a926104106003935f94610398565b6103ba565b6103ee565b90565b61042690610169565b9052565b919061043d905f6020850194019061041d565b565b346104705761046c61045b61045536600461036b565b906103fc565b610463610132565b9182918261042a565b0390f35b610138565b9060208282031261048e5761048b915f0161015a565b90565b61013c565b6104a76104a26104ac92610140565b61024f565b610140565b90565b906104b990610493565b5f5260205260405f2090565b6104db906104d66005915f926104af565b6103ee565b90565b3461050e5761050a6104f96104f4366004610475565b6104c5565b610501610132565b9182918261042a565b0390f35b610138565b90916060828403126105485761054561052e845f8501610222565b9361053c816020860161015a565b93604001610182565b90565b61013c565b3461057c57610566610560366004610513565b91610ddf565b61056e610132565b80610578816101be565b0390f35b610138565b9061058b9061027a565b5f5260205260405f2090565b906105a1906103ae565b5f5260205260405f2090565b6105c66105cb926105c16004935f94610581565b610597565b6102bb565b90565b346105ff576105fb6105ea6105e436600461036b565b906105ad565b6105f2610132565b918291826102f2565b0390f35b610138565b61060d90610202565b90565b61061981610604565b0361062057565b5f80fd5b9050359061063182610610565b565b9060208282031261064c57610649915f01610624565b90565b61013c565b3461067f57610669610664366004610633565b610f64565b610671610132565b8061067b816101be565b0390f35b610138565b6080818303126106c55761069a825f830161015a565b926106c26106ab8460208501610222565b936106b9816040860161035c565b93606001610182565b90565b61013c565b346106fc576106e66106dd366004610684565b929190916111ba565b6106ee610132565b806106f8816101be565b0390f35b610138565b5f91031261070b57565b61013c565b60018060a01b031690565b61072b906008610730930261029c565b610710565b90565b9061073e915461071b565b90565b61074c5f5f90610733565b90565b61075890610202565b9052565b919061076f905f6020850194019061074f565b565b346107a157610781366004610701565b61079d61078c610741565b610794610132565b9182918261075c565b0390f35b610138565b90565b6107b2906107a6565b9052565b91906107c9905f602085019401906107a9565b565b346107fb576107f76107e66107e1366004610231565b6111fc565b6107ee610132565b918291826107b6565b0390f35b610138565b9190604083820312610828578061081c610825925f8601610222565b9360200161015a565b90565b61013c565b3461085c57610846610840366004610800565b9061133f565b61084e610132565b80610858816101be565b0390f35b610138565b90916060828403126108965761089361087c845f850161015a565b9361088a8160208601610222565b9360400161035c565b90565b61013c565b346108cc576108c86108b76108b1366004610861565b91611395565b6108bf610132565b9182918261042a565b0390f35b610138565b9091606082840312610906576109036108ec845f8501610222565b936108fa8160208601610222565b9360400161035c565b90565b61013c565b3461093c576109386109276109213660046108d1565b91611409565b61092f610132565b9182918261042a565b0390f35b610138565b60018060a01b031690565b61095c906008610961930261029c565b610941565b90565b9061096f915461094c565b90565b61097e60015f90610964565b90565b61098a9061026e565b90565b61099690610981565b9052565b91906109ad905f6020850194019061098d565b565b346109df576109bf366004610701565b6109db6109ca610972565b6109d2610132565b9182918261099a565b0390f35b610138565b9091606082840312610a1957610a166109ff845f8501610222565b93610a0d816020860161035c565b93604001610182565b90565b61013c565b34610a4d57610a37610a313660046109e4565b91611533565b610a3f610132565b80610a49816101be565b0390f35b610138565b34610a8357610a7f610a6e610a68366004610800565b90611540565b610a76610132565b9182918261042a565b0390f35b610138565b34610ab657610aa0610a9b366004610231565b611631565b610aa8610132565b80610ab2816101be565b0390f35b610138565b5f80fd5b60209181520190565b5f7f554e415554484f52495a45440000000000000000000000000000000000000000910152565b610afc600c602092610abf565b610b0581610ac8565b0190565b610b1e9060208101905f818303910152610aef565b90565b15610b2857565b610b30610132565b62461bcd60e51b815280610b4660048201610b09565b0390fd5b90610b7191610b6c610b673363ffffffff60e01b5f351690611664565b610b21565b610bbd565b565b5f1b90565b90610b8460ff91610b73565b9181191691161790565b610b9790610169565b90565b90565b90610bb2610bad610bb992610b8e565b610b9a565b8254610b78565b9055565b610bd282610bcd600584906104af565b610b9d565b610c11610bff7ffe18b93b9d673d5fa9d47a90eecc041e521d2fc672cbc2c800ea5ebf269c06f092610493565b92610c08610132565b9182918261042a565b0390a2565b90610c2091610b4a565b565b90610c4a9291610c45610c403363ffffffff60e01b5f351690611664565b610b21565b610d26565b565b90565b610c63610c5e610c6892610c4c565b61024f565b6107a6565b90565b1b90565b610c8e90610c88610c82610c9394610140565b916107a6565b90610c6b565b6107a6565b90565b610caa610ca5610caf926107a6565b610b73565b6102e2565b90565b5f1c90565b610cc3610cc891610cb2565b6102a0565b90565b610cd59054610cb7565b90565b90610ce45f1991610b73565b9181191691161790565b610cf7906102e2565b90565b610d0390610cb2565b90565b90610d1b610d16610d2292610cee565b610cfa565b8254610cd8565b9055565b9091610d329015610169565b610dc357610d72610d55610d506001610d4b8691610c4f565b610c6f565b610c96565b610d6160028490610286565b90610d6b82610ccb565b1790610d06565b90600191610dbe610dac610da67f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf29361027a565b93610493565b93610db5610132565b9182918261042a565b0390a3565b5f632e6ec23560e21b815280610ddb600482016101be565b0390fd5b90610dea9291610c22565b565b610df8610dfd91610cb2565b610710565b90565b610e0a9054610dec565b90565b610e19610e1e91610cb2565b610941565b90565b610e2b9054610e0d565b90565b610e379061026e565b90565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90610e6290610e3a565b810190811067ffffffffffffffff821117610e7c57604052565b610e44565b60e01b90565b90505190610e948261016e565b565b90602082820312610eaf57610eac915f01610e87565b90565b61013c565b610ebd9061033c565b9052565b604090610eea610ef19496959396610ee060608401985f85019061074f565b602083019061074f565b0190610eb4565b565b610efb610132565b3d5f823e3d90fd5b15610f0a57565b5f80fd5b90610f1f60018060a01b0391610b73565b9181191691161790565b610f3290610252565b90565b610f3e90610f29565b90565b90565b90610f59610f54610f6092610f35565b610f41565b8254610f0e565b9055565b33610f7f610f79610f745f610e00565b610202565b91610202565b148015610fe8575b610f9090610f03565b610f9b816001610f44565b3390610fd0610fca7fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b763899801989361027a565b91610f35565b91610fd9610132565b80610fe3816101be565b0390a3565b50610ffb610ff66001610e21565b610981565b602063b700961391339061103461101130610e2e565b9461103f63ffffffff60e01b5f3516611028610132565b97889687958695610e81565b855260048501610ec1565b03915afa801561108a57610f90915f9161105c575b509050610f87565b61107d915060203d8111611083575b6110758183610e58565b810190610e96565b5f611054565b503d61106b565b610ef3565b906110b89392916110b36110ae3363ffffffff60e01b5f351690611664565b610b21565b6110ba565b565b92919092825f146111665761110b6110e46110df60016110da8591610c4f565b610c6f565b610c96565b6110fa6110f360048890610581565b8590610597565b9061110482610ccb565b1790610d06565b5b9290919261116161114f6111496111437fa52ea92e6e955aa8ac66420b86350f7139959adfcc7e6a14eee1bd116d09860e94610493565b9461027a565b946103ae565b94611158610132565b9182918261042a565b0390a4565b6111b561118e611188611183600161117e8691610c4f565b610c6f565b610c96565b196102e2565b6111a461119d60048890610581565b8590610597565b906111ae82610ccb565b1690610d06565b61110c565b906111c693929161108f565b565b5f90565b6111e06111db6111e5926107a6565b61024f565b6107a6565b90565b6111f46111f991610cb2565b6111cc565b90565b61121b6112166112209261120e6111c8565b506002610286565b610ccb565b6111e8565b90565b9061124a916112456112403363ffffffff60e01b5f351690611664565b610b21565b61126d565b565b61125861125d91610cb2565b6103d0565b90565b61126a905461124c565b90565b61128a61128461127f600585906104af565b611260565b15610169565b611323576112d36112b66112b06112ab60016112a68791610c4f565b610c6f565b610c96565b196102e2565b6112c260028490610286565b906112cc82610ccb565b1690610d06565b905f9161131e61130c6113067f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf29361027a565b93610493565b93611315610132565b9182918261042a565b0390a3565b5f632e6ec23560e21b81528061133b600482016101be565b0390fd5b9061134991611223565b565b5f90565b61136e9061136861136261137394610140565b916107a6565b9061029c565b6107a6565b90565b90565b61138d61138861139292611376565b61024f565b6107a6565b90565b906113c16113bc6113cb946113b76113c6946113af61134b565b506004610581565b610597565b610ccb565b6111e8565b61134f565b6113d56001610c4f565b166113e86113e25f611379565b916107a6565b141590565b6114016113fc61140692611376565b610b73565b6102e2565b90565b9061141261134b565b5061143161142c61142560038490610398565b85906103ba565b611260565b92831561143f575b50505090565b61148d9293509061148161147c6114879361147761146f61146a6114625f6113ed565b996002610286565b610ccb565b946004610581565b610597565b610ccb565b166102e2565b916102e2565b14155f8080611439565b906114bf92916114ba6114b53363ffffffff60e01b5f351690611664565b610b21565b6114c1565b565b9190916114e3826114de6114d760038590610398565b86906103ba565b610b9d565b91909161152e61151c6115167f950a343f5d10445e82a71036d3f4fb3016180a25805141932543b83e2078a93e9361027a565b936103ae565b93611525610132565b9182918261042a565b0390a3565b9061153e9291611497565b565b9061156861156361155e61156d9461155661134b565b506002610286565b610ccb565b6111e8565b61134f565b6115776001610c4f565b1661158a6115845f611379565b916107a6565b141590565b6115b5906115b06115ab3363ffffffff60e01b5f351690611664565b610b21565b6115da565b565b90565b906115cf6115ca6115d69261027a565b6115b7565b8254610f0e565b9055565b6115e4815f6115ba565b33906116196116137f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361027a565b9161027a565b91611622610132565b8061162c816101be565b0390a3565b61163a9061158f565b565b61165061164b61165592611376565b61024f565b6101f7565b90565b6116619061163c565b90565b9061166d61134b565b506116786001610e21565b9061168282610981565b61169c6116966116915f611658565b610202565b91610202565b141591826116d6575b50509081156116b3575b5090565b90506116cf6116c96116c45f610e00565b610202565b91610202565b145f6116af565b60209192506116e490610981565b63b700961390611710859261171b6116fb30610e2e565b96611704610132565b97889687958695610e81565b855260048501610ec1565b03915afa908115611763575f91611735575b505f806116a5565b611756915060203d811161175c575b61174e8183610e58565b810190610e96565b5f61172d565b503d611744565b610ef3560000000000000000000000008bbe46a0bb587d6363cf34e655108dcb4d671e9e0000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361015610013575b610abb565b61001d5f3561012c565b806301d7b0221461012757806306a36aee146101225780632f47571f1461011d5780633e762e001461011857806367aff484146101135780637917b7941461010e5780637a9e5e4b146101095780637d40583d146101045780638da5cb5b146100ff578063b27fb668146100fa578063b44f794f146100f5578063b4bad06a146100f0578063b7009613146100eb578063bf7e214f146100e6578063c6b0263e146100e1578063ea7ca276146100dc5763f2fde38b0361000e57610a88565b610a52565b610a1e565b6109af565b61090b565b61089b565b61082d565b6107cb565b610771565b6106ca565b610651565b6105ce565b61054d565b6104de565b61043f565b610307565b6101c3565b60e01c90565b60405190565b5f80fd5b5f80fd5b60ff1690565b61014f81610140565b0361015657565b5f80fd5b9050359061016782610146565b565b151590565b61017781610169565b0361017e57565b5f80fd5b9050359061018f8261016e565b565b91906040838203126101b957806101ad6101b6925f860161015a565b93602001610182565b90565b61013c565b5f0190565b346101f2576101dc6101d6366004610191565b90610c16565b6101e4610132565b806101ee816101be565b0390f35b610138565b60018060a01b031690565b61020b906101f7565b90565b61021781610202565b0361021e57565b5f80fd5b9050359061022f8261020e565b565b9060208282031261024a57610247915f01610222565b90565b61013c565b90565b61026661026161026b926101f7565b61024f565b6101f7565b90565b61027790610252565b90565b6102839061026e565b90565b906102909061027a565b5f5260205260405f2090565b1c90565b90565b6102b39060086102b8930261029c565b6102a0565b90565b906102c691546102a3565b90565b6102df906102da6002915f92610286565b6102bb565b90565b90565b6102ee906102e2565b9052565b9190610305905f602085019401906102e5565b565b346103375761033361032261031d366004610231565b6102c9565b61032a610132565b918291826102f2565b0390f35b610138565b63ffffffff60e01b1690565b6103518161033c565b0361035857565b5f80fd5b9050359061036982610348565b565b91906040838203126103935780610387610390925f8601610222565b9360200161035c565b90565b61013c565b906103a29061027a565b5f5260205260405f2090565b6103b79061033c565b90565b906103c4906103ae565b5f5260205260405f2090565b60ff1690565b6103e69060086103eb930261029c565b6103d0565b90565b906103f991546103d6565b90565b61041561041a926104106003935f94610398565b6103ba565b6103ee565b90565b61042690610169565b9052565b919061043d905f6020850194019061041d565b565b346104705761046c61045b61045536600461036b565b906103fc565b610463610132565b9182918261042a565b0390f35b610138565b9060208282031261048e5761048b915f0161015a565b90565b61013c565b6104a76104a26104ac92610140565b61024f565b610140565b90565b906104b990610493565b5f5260205260405f2090565b6104db906104d66005915f926104af565b6103ee565b90565b3461050e5761050a6104f96104f4366004610475565b6104c5565b610501610132565b9182918261042a565b0390f35b610138565b90916060828403126105485761054561052e845f8501610222565b9361053c816020860161015a565b93604001610182565b90565b61013c565b3461057c57610566610560366004610513565b91610ddf565b61056e610132565b80610578816101be565b0390f35b610138565b9061058b9061027a565b5f5260205260405f2090565b906105a1906103ae565b5f5260205260405f2090565b6105c66105cb926105c16004935f94610581565b610597565b6102bb565b90565b346105ff576105fb6105ea6105e436600461036b565b906105ad565b6105f2610132565b918291826102f2565b0390f35b610138565b61060d90610202565b90565b61061981610604565b0361062057565b5f80fd5b9050359061063182610610565b565b9060208282031261064c57610649915f01610624565b90565b61013c565b3461067f57610669610664366004610633565b610f64565b610671610132565b8061067b816101be565b0390f35b610138565b6080818303126106c55761069a825f830161015a565b926106c26106ab8460208501610222565b936106b9816040860161035c565b93606001610182565b90565b61013c565b346106fc576106e66106dd366004610684565b929190916111ba565b6106ee610132565b806106f8816101be565b0390f35b610138565b5f91031261070b57565b61013c565b60018060a01b031690565b61072b906008610730930261029c565b610710565b90565b9061073e915461071b565b90565b61074c5f5f90610733565b90565b61075890610202565b9052565b919061076f905f6020850194019061074f565b565b346107a157610781366004610701565b61079d61078c610741565b610794610132565b9182918261075c565b0390f35b610138565b90565b6107b2906107a6565b9052565b91906107c9905f602085019401906107a9565b565b346107fb576107f76107e66107e1366004610231565b6111fc565b6107ee610132565b918291826107b6565b0390f35b610138565b9190604083820312610828578061081c610825925f8601610222565b9360200161015a565b90565b61013c565b3461085c57610846610840366004610800565b9061133f565b61084e610132565b80610858816101be565b0390f35b610138565b90916060828403126108965761089361087c845f850161015a565b9361088a8160208601610222565b9360400161035c565b90565b61013c565b346108cc576108c86108b76108b1366004610861565b91611395565b6108bf610132565b9182918261042a565b0390f35b610138565b9091606082840312610906576109036108ec845f8501610222565b936108fa8160208601610222565b9360400161035c565b90565b61013c565b3461093c576109386109276109213660046108d1565b91611409565b61092f610132565b9182918261042a565b0390f35b610138565b60018060a01b031690565b61095c906008610961930261029c565b610941565b90565b9061096f915461094c565b90565b61097e60015f90610964565b90565b61098a9061026e565b90565b61099690610981565b9052565b91906109ad905f6020850194019061098d565b565b346109df576109bf366004610701565b6109db6109ca610972565b6109d2610132565b9182918261099a565b0390f35b610138565b9091606082840312610a1957610a166109ff845f8501610222565b93610a0d816020860161035c565b93604001610182565b90565b61013c565b34610a4d57610a37610a313660046109e4565b91611533565b610a3f610132565b80610a49816101be565b0390f35b610138565b34610a8357610a7f610a6e610a68366004610800565b90611540565b610a76610132565b9182918261042a565b0390f35b610138565b34610ab657610aa0610a9b366004610231565b611631565b610aa8610132565b80610ab2816101be565b0390f35b610138565b5f80fd5b60209181520190565b5f7f554e415554484f52495a45440000000000000000000000000000000000000000910152565b610afc600c602092610abf565b610b0581610ac8565b0190565b610b1e9060208101905f818303910152610aef565b90565b15610b2857565b610b30610132565b62461bcd60e51b815280610b4660048201610b09565b0390fd5b90610b7191610b6c610b673363ffffffff60e01b5f351690611664565b610b21565b610bbd565b565b5f1b90565b90610b8460ff91610b73565b9181191691161790565b610b9790610169565b90565b90565b90610bb2610bad610bb992610b8e565b610b9a565b8254610b78565b9055565b610bd282610bcd600584906104af565b610b9d565b610c11610bff7ffe18b93b9d673d5fa9d47a90eecc041e521d2fc672cbc2c800ea5ebf269c06f092610493565b92610c08610132565b9182918261042a565b0390a2565b90610c2091610b4a565b565b90610c4a9291610c45610c403363ffffffff60e01b5f351690611664565b610b21565b610d26565b565b90565b610c63610c5e610c6892610c4c565b61024f565b6107a6565b90565b1b90565b610c8e90610c88610c82610c9394610140565b916107a6565b90610c6b565b6107a6565b90565b610caa610ca5610caf926107a6565b610b73565b6102e2565b90565b5f1c90565b610cc3610cc891610cb2565b6102a0565b90565b610cd59054610cb7565b90565b90610ce45f1991610b73565b9181191691161790565b610cf7906102e2565b90565b610d0390610cb2565b90565b90610d1b610d16610d2292610cee565b610cfa565b8254610cd8565b9055565b9091610d329015610169565b610dc357610d72610d55610d506001610d4b8691610c4f565b610c6f565b610c96565b610d6160028490610286565b90610d6b82610ccb565b1790610d06565b90600191610dbe610dac610da67f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf29361027a565b93610493565b93610db5610132565b9182918261042a565b0390a3565b5f632e6ec23560e21b815280610ddb600482016101be565b0390fd5b90610dea9291610c22565b565b610df8610dfd91610cb2565b610710565b90565b610e0a9054610dec565b90565b610e19610e1e91610cb2565b610941565b90565b610e2b9054610e0d565b90565b610e379061026e565b90565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90610e6290610e3a565b810190811067ffffffffffffffff821117610e7c57604052565b610e44565b60e01b90565b90505190610e948261016e565b565b90602082820312610eaf57610eac915f01610e87565b90565b61013c565b610ebd9061033c565b9052565b604090610eea610ef19496959396610ee060608401985f85019061074f565b602083019061074f565b0190610eb4565b565b610efb610132565b3d5f823e3d90fd5b15610f0a57565b5f80fd5b90610f1f60018060a01b0391610b73565b9181191691161790565b610f3290610252565b90565b610f3e90610f29565b90565b90565b90610f59610f54610f6092610f35565b610f41565b8254610f0e565b9055565b33610f7f610f79610f745f610e00565b610202565b91610202565b148015610fe8575b610f9090610f03565b610f9b816001610f44565b3390610fd0610fca7fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b763899801989361027a565b91610f35565b91610fd9610132565b80610fe3816101be565b0390a3565b50610ffb610ff66001610e21565b610981565b602063b700961391339061103461101130610e2e565b9461103f63ffffffff60e01b5f3516611028610132565b97889687958695610e81565b855260048501610ec1565b03915afa801561108a57610f90915f9161105c575b509050610f87565b61107d915060203d8111611083575b6110758183610e58565b810190610e96565b5f611054565b503d61106b565b610ef3565b906110b89392916110b36110ae3363ffffffff60e01b5f351690611664565b610b21565b6110ba565b565b92919092825f146111665761110b6110e46110df60016110da8591610c4f565b610c6f565b610c96565b6110fa6110f360048890610581565b8590610597565b9061110482610ccb565b1790610d06565b5b9290919261116161114f6111496111437fa52ea92e6e955aa8ac66420b86350f7139959adfcc7e6a14eee1bd116d09860e94610493565b9461027a565b946103ae565b94611158610132565b9182918261042a565b0390a4565b6111b561118e611188611183600161117e8691610c4f565b610c6f565b610c96565b196102e2565b6111a461119d60048890610581565b8590610597565b906111ae82610ccb565b1690610d06565b61110c565b906111c693929161108f565b565b5f90565b6111e06111db6111e5926107a6565b61024f565b6107a6565b90565b6111f46111f991610cb2565b6111cc565b90565b61121b6112166112209261120e6111c8565b506002610286565b610ccb565b6111e8565b90565b9061124a916112456112403363ffffffff60e01b5f351690611664565b610b21565b61126d565b565b61125861125d91610cb2565b6103d0565b90565b61126a905461124c565b90565b61128a61128461127f600585906104af565b611260565b15610169565b611323576112d36112b66112b06112ab60016112a68791610c4f565b610c6f565b610c96565b196102e2565b6112c260028490610286565b906112cc82610ccb565b1690610d06565b905f9161131e61130c6113067f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf29361027a565b93610493565b93611315610132565b9182918261042a565b0390a3565b5f632e6ec23560e21b81528061133b600482016101be565b0390fd5b9061134991611223565b565b5f90565b61136e9061136861136261137394610140565b916107a6565b9061029c565b6107a6565b90565b90565b61138d61138861139292611376565b61024f565b6107a6565b90565b906113c16113bc6113cb946113b76113c6946113af61134b565b506004610581565b610597565b610ccb565b6111e8565b61134f565b6113d56001610c4f565b166113e86113e25f611379565b916107a6565b141590565b6114016113fc61140692611376565b610b73565b6102e2565b90565b9061141261134b565b5061143161142c61142560038490610398565b85906103ba565b611260565b92831561143f575b50505090565b61148d9293509061148161147c6114879361147761146f61146a6114625f6113ed565b996002610286565b610ccb565b946004610581565b610597565b610ccb565b166102e2565b916102e2565b14155f8080611439565b906114bf92916114ba6114b53363ffffffff60e01b5f351690611664565b610b21565b6114c1565b565b9190916114e3826114de6114d760038590610398565b86906103ba565b610b9d565b91909161152e61151c6115167f950a343f5d10445e82a71036d3f4fb3016180a25805141932543b83e2078a93e9361027a565b936103ae565b93611525610132565b9182918261042a565b0390a3565b9061153e9291611497565b565b9061156861156361155e61156d9461155661134b565b506002610286565b610ccb565b6111e8565b61134f565b6115776001610c4f565b1661158a6115845f611379565b916107a6565b141590565b6115b5906115b06115ab3363ffffffff60e01b5f351690611664565b610b21565b6115da565b565b90565b906115cf6115ca6115d69261027a565b6115b7565b8254610f0e565b9055565b6115e4815f6115ba565b33906116196116137f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361027a565b9161027a565b91611622610132565b8061162c816101be565b0390a3565b61163a9061158f565b565b61165061164b61165592611376565b61024f565b6101f7565b90565b6116619061163c565b90565b9061166d61134b565b506116786001610e21565b9061168282610981565b61169c6116966116915f611658565b610202565b91610202565b141591826116d6575b50509081156116b3575b5090565b90506116cf6116c96116c45f610e00565b610202565b91610202565b145f6116af565b60209192506116e490610981565b63b700961390611710859261171b6116fb30610e2e565b96611704610132565b97889687958695610e81565b855260048501610ec1565b03915afa908115611763575f91611735575b505f806116a5565b611756915060203d811161175c575b61174e8183610e58565b810190610e96565b5f61172d565b503d611744565b610ef356

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.