Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Amount
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Register Agent | 37284923 | 70 days ago | IN | 0 ETH | 0.00000033 |
Loading...
Loading
Contract Name:
ERC8004
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/access/Ownable.sol";
/**
* @title ERC-8004: Agent Identity Registry
* @author OpenConductor
* @notice On-chain identity layer for AI agents. Foundation of the Trust Stack.
* @dev Provides verifiable identity, verification tiers, and trust attestations for AI agents.
*/
contract ERC8004 is Ownable {
// ============ Types ============
enum VerificationTier {
Unregistered, // 0 - Not in registry
Basic, // 1 - Self-reported, minimal verification
Verified, // 2 - Code reviewed, maintainer confirmed
Certified // 3 - ISO 42001 aligned, audit complete
}
struct Agent {
uint256 id; // Unique agent ID
address registrant; // Who registered the agent
string metadataURI; // IPFS/HTTP URI to agent metadata JSON
VerificationTier tier; // Current verification level
uint8 trustScore; // 1-10 trust score
uint256 registeredAt; // Block timestamp of registration
uint256 lastUpdated; // Block timestamp of last update
bool active; // Whether agent is active
}
struct Attestation {
address verifier; // Who made the attestation
uint256 timestamp; // When attestation was made
string attestationType; // Type: "security_audit", "code_review", "compliance"
string evidence; // IPFS URI to evidence
}
// ============ State ============
uint256 private _agentIdCounter;
// agentId => Agent
mapping(uint256 => Agent) public agents;
// metadataURI hash => agentId (prevent duplicates)
mapping(bytes32 => uint256) public uriToAgentId;
// agentId => attestations
mapping(uint256 => Attestation[]) public attestations;
// Authorized verifiers who can upgrade tiers and add attestations
mapping(address => bool) public authorizedVerifiers;
// ============ Events ============
event AgentRegistered(
uint256 indexed agentId,
address indexed registrant,
string metadataURI,
uint256 timestamp
);
event AgentUpdated(
uint256 indexed agentId,
string metadataURI,
uint256 timestamp
);
event TierUpgraded(
uint256 indexed agentId,
VerificationTier oldTier,
VerificationTier newTier,
address indexed verifier
);
event TrustScoreUpdated(
uint256 indexed agentId,
uint8 oldScore,
uint8 newScore,
address indexed updater
);
event AttestationAdded(
uint256 indexed agentId,
address indexed verifier,
string attestationType,
string evidence
);
event AgentDeactivated(uint256 indexed agentId);
event AgentReactivated(uint256 indexed agentId);
event VerifierAdded(address indexed verifier);
event VerifierRemoved(address indexed verifier);
// ============ Modifiers ============
modifier onlyVerifier() {
require(authorizedVerifiers[msg.sender] || msg.sender == owner(), "Not authorized verifier");
_;
}
modifier agentExists(uint256 agentId) {
require(agents[agentId].id != 0, "Agent does not exist");
_;
}
modifier onlyRegistrant(uint256 agentId) {
require(agents[agentId].registrant == msg.sender, "Not agent registrant");
_;
}
// ============ Constructor ============
constructor() Ownable(msg.sender) {
authorizedVerifiers[msg.sender] = true;
}
// ============ Registration ============
function registerAgent(string calldata metadataURI) external returns (uint256) {
bytes32 uriHash = keccak256(bytes(metadataURI));
require(uriToAgentId[uriHash] == 0, "Agent already registered");
_agentIdCounter++;
uint256 newAgentId = _agentIdCounter;
agents[newAgentId] = Agent({
id: newAgentId,
registrant: msg.sender,
metadataURI: metadataURI,
tier: VerificationTier.Basic,
trustScore: 1,
registeredAt: block.timestamp,
lastUpdated: block.timestamp,
active: true
});
uriToAgentId[uriHash] = newAgentId;
emit AgentRegistered(newAgentId, msg.sender, metadataURI, block.timestamp);
return newAgentId;
}
function updateMetadata(uint256 agentId, string calldata newMetadataURI)
external
agentExists(agentId)
onlyRegistrant(agentId)
{
bytes32 oldUriHash = keccak256(bytes(agents[agentId].metadataURI));
delete uriToAgentId[oldUriHash];
bytes32 newUriHash = keccak256(bytes(newMetadataURI));
require(uriToAgentId[newUriHash] == 0, "URI already registered");
uriToAgentId[newUriHash] = agentId;
agents[agentId].metadataURI = newMetadataURI;
agents[agentId].lastUpdated = block.timestamp;
emit AgentUpdated(agentId, newMetadataURI, block.timestamp);
}
// ============ Verification ============
function upgradeTier(uint256 agentId, VerificationTier newTier)
external
onlyVerifier
agentExists(agentId)
{
Agent storage agent = agents[agentId];
require(newTier > agent.tier, "Can only upgrade tier");
VerificationTier oldTier = agent.tier;
agent.tier = newTier;
agent.lastUpdated = block.timestamp;
emit TierUpgraded(agentId, oldTier, newTier, msg.sender);
}
function updateTrustScore(uint256 agentId, uint8 newScore)
external
onlyVerifier
agentExists(agentId)
{
require(newScore >= 1 && newScore <= 10, "Score must be 1-10");
Agent storage agent = agents[agentId];
uint8 oldScore = agent.trustScore;
agent.trustScore = newScore;
agent.lastUpdated = block.timestamp;
emit TrustScoreUpdated(agentId, oldScore, newScore, msg.sender);
}
function addAttestation(
uint256 agentId,
string calldata attestationType,
string calldata evidence
)
external
onlyVerifier
agentExists(agentId)
{
attestations[agentId].push(Attestation({
verifier: msg.sender,
timestamp: block.timestamp,
attestationType: attestationType,
evidence: evidence
}));
emit AttestationAdded(agentId, msg.sender, attestationType, evidence);
}
// ============ Status Management ============
function deactivateAgent(uint256 agentId)
external
agentExists(agentId)
{
require(
agents[agentId].registrant == msg.sender ||
authorizedVerifiers[msg.sender] ||
msg.sender == owner(),
"Not authorized"
);
agents[agentId].active = false;
agents[agentId].lastUpdated = block.timestamp;
emit AgentDeactivated(agentId);
}
function reactivateAgent(uint256 agentId)
external
agentExists(agentId)
onlyRegistrant(agentId)
{
agents[agentId].active = true;
agents[agentId].lastUpdated = block.timestamp;
emit AgentReactivated(agentId);
}
// ============ Admin Functions ============
function addVerifier(address verifier) external onlyOwner {
authorizedVerifiers[verifier] = true;
emit VerifierAdded(verifier);
}
function removeVerifier(address verifier) external onlyOwner {
authorizedVerifiers[verifier] = false;
emit VerifierRemoved(verifier);
}
// ============ View Functions ============
function totalAgents() external view returns (uint256) {
return _agentIdCounter;
}
function getAgent(uint256 agentId) external view returns (Agent memory) {
return agents[agentId];
}
function getAttestations(uint256 agentId) external view returns (Attestation[] memory) {
return attestations[agentId];
}
function isVerifier(address addr) external view returns (bool) {
return authorizedVerifiers[addr] || addr == owner();
}
function getAgentIdByURI(string calldata metadataURI) external view returns (uint256) {
return uriToAgentId[keccak256(bytes(metadataURI))];
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "shanghai",
"viaIR": false
}Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"AgentDeactivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"AgentReactivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"},{"indexed":true,"internalType":"address","name":"registrant","type":"address"},{"indexed":false,"internalType":"string","name":"metadataURI","type":"string"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AgentRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"},{"indexed":false,"internalType":"string","name":"metadataURI","type":"string"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AgentUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"},{"indexed":false,"internalType":"string","name":"attestationType","type":"string"},{"indexed":false,"internalType":"string","name":"evidence","type":"string"}],"name":"AttestationAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"},{"indexed":false,"internalType":"enum ERC8004.VerificationTier","name":"oldTier","type":"uint8"},{"indexed":false,"internalType":"enum ERC8004.VerificationTier","name":"newTier","type":"uint8"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"}],"name":"TierUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"oldScore","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newScore","type":"uint8"},{"indexed":true,"internalType":"address","name":"updater","type":"address"}],"name":"TrustScoreUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"verifier","type":"address"}],"name":"VerifierAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"verifier","type":"address"}],"name":"VerifierRemoved","type":"event"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"string","name":"attestationType","type":"string"},{"internalType":"string","name":"evidence","type":"string"}],"name":"addAttestation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"verifier","type":"address"}],"name":"addVerifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"agents","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"registrant","type":"address"},{"internalType":"string","name":"metadataURI","type":"string"},{"internalType":"enum ERC8004.VerificationTier","name":"tier","type":"uint8"},{"internalType":"uint8","name":"trustScore","type":"uint8"},{"internalType":"uint256","name":"registeredAt","type":"uint256"},{"internalType":"uint256","name":"lastUpdated","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"attestations","outputs":[{"internalType":"address","name":"verifier","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"attestationType","type":"string"},{"internalType":"string","name":"evidence","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedVerifiers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"deactivateAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"getAgent","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"registrant","type":"address"},{"internalType":"string","name":"metadataURI","type":"string"},{"internalType":"enum ERC8004.VerificationTier","name":"tier","type":"uint8"},{"internalType":"uint8","name":"trustScore","type":"uint8"},{"internalType":"uint256","name":"registeredAt","type":"uint256"},{"internalType":"uint256","name":"lastUpdated","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"internalType":"struct ERC8004.Agent","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"metadataURI","type":"string"}],"name":"getAgentIdByURI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"getAttestations","outputs":[{"components":[{"internalType":"address","name":"verifier","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"attestationType","type":"string"},{"internalType":"string","name":"evidence","type":"string"}],"internalType":"struct ERC8004.Attestation[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isVerifier","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":"uint256","name":"agentId","type":"uint256"}],"name":"reactivateAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"metadataURI","type":"string"}],"name":"registerAgent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"verifier","type":"address"}],"name":"removeVerifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAgents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"string","name":"newMetadataURI","type":"string"}],"name":"updateMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"uint8","name":"newScore","type":"uint8"}],"name":"updateTrustScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"enum ERC8004.VerificationTier","name":"newTier","type":"uint8"}],"name":"upgradeTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"uriToAgentId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561000f575f80fd5b50338061003557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61003e8161005d565b50335f908152600560205260409020805460ff191660011790556100ac565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611d01806100b95f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80638edb1f9a116100b4578063c505371211610079578063c5053712146102bd578063ca2dfd0a146102c5578063d79ed7dc146102d8578063dd03888e146102eb578063f2fde38b1461030e578063fd61031714610321575f80fd5b80638edb1f9a146102435780639000b3d6146102625780639a89171614610275578063ab4576bb14610297578063b98e47fb146102aa575f80fd5b80633ee4d3d2116100fa5780633ee4d3d2146101c7578063513856c8146101e757806353c8388e1461020e578063715018a6146102215780638da5cb5b14610229575f80fd5b806311ba6b4a146101365780632d2a95851461014b5780632de5aaf714610171578063331052181461019157806336f005aa146101b4575b5f80fd5b6101496101443660046114d7565b610334565b005b61015e610159366004611533565b61043b565b6040519081526020015b60405180910390f35b61018461017f3660046114d7565b610671565b60405161016891906115e9565b6101a461019f366004611675565b6107af565b6040519015158152602001610168565b6101496101c23660046116a2565b6107e7565b6101da6101d53660046114d7565b61094b565b60405161016891906116d3565b6101fa6101f53660046114d7565b610af9565b604051610168989796959493929190611778565b61014961021c3660046117dc565b610bd4565b610149610d9a565b5f546040516001600160a01b039091168152602001610168565b61015e6102513660046114d7565b60036020525f908152604090205481565b610149610270366004611675565b610dad565b6101a4610283366004611675565b60056020525f908152604090205460ff1681565b6101496102a5366004611824565b610e00565b61015e6102b8366004611533565b610fd3565b60015461015e565b6101496102d3366004611675565b611005565b6101496102e6366004611898565b611055565b6102fe6102f93660046118c0565b61118b565b60405161016894939291906118e0565b61014961031c366004611675565b6112e7565b61014961032f3660046114d7565b611324565b5f8181526002602052604081205482910361036a5760405162461bcd60e51b815260040161036190611923565b60405180910390fd5b5f828152600260205260409020600101546001600160a01b031633148061039f5750335f9081526005602052604090205460ff165b806103b357505f546001600160a01b031633145b6103f05760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610361565b5f8281526002602052604080822060068101805460ff19169055426005909101555183917fc2fb7f8575ac3990e70361684edfc4d283931ea9a03dfa28766bf376a3934aa291a25050565b5f80838360405161044d929190611951565b6040518091039020905060035f8281526020019081526020015f20545f146104b75760405162461bcd60e51b815260206004820152601860248201527f4167656e7420616c7265616479207265676973746572656400000000000000006044820152606401610361565b60018054905f6104c683611960565b91905055505f6001549050604051806101000160405280828152602001336001600160a01b0316815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250506001602080850182905260408086018390524260608701819052608087015260a0909501829052868452600280825293859020865181559086015191810180546001600160a01b0319166001600160a01b03909316929092179091559284015191830191610597915082611a1e565b506060820151816003015f6101000a81548160ff021916908360038111156105c1576105c16115b5565b021790555060808201516003828101805461ff00191661010060ff909416939093029290921790915560a0830151600483015560c0830151600583015560e0909201516006909101805460ff19169115159190911790555f83815260209190915260409081902082905551339082907fc29f819ac362ff9c94de06666235808451aafd8894a2dffb86a080a965efeae39061066190899089904290611b02565b60405180910390a3949350505050565b61067961147c565b5f828152600260208181526040928390208351610100810185528154815260018201546001600160a01b031692810192909252918201805491938401916106bf90611998565b80601f01602080910402602001604051908101604052809291908181526020018280546106eb90611998565b80156107365780601f1061070d57610100808354040283529160200191610736565b820191905f5260205f20905b81548152906001019060200180831161071957829003601f168201915b505050918352505060038281015460209092019160ff169081111561075d5761075d6115b5565b600381111561076e5761076e6115b5565b8152600382015460ff610100909104811660208301526004830154604083015260058301546060830152600690920154909116151560809091015292915050565b6001600160a01b0381165f9081526005602052604081205460ff16806107e157505f546001600160a01b038381169116145b92915050565b335f9081526005602052604090205460ff168061080d57505f546001600160a01b031633145b6108295760405162461bcd60e51b815260040161036190611b25565b5f828152600260205260408120548391036108565760405162461bcd60e51b815260040161036190611923565b5f83815260026020526040902060038082015460ff169081111561087c5761087c6115b5565b83600381111561088e5761088e6115b5565b116108d35760405162461bcd60e51b815260206004820152601560248201527421b0b71037b7363c903ab833b930b232903a34b2b960591b6044820152606401610361565b6003808201805460ff81169286929160ff19169060019084908111156108fb576108fb6115b5565b0217905550426005830155604051339086907f25e31530d004e39052a50d432095f5251816c8e74f45648520459d5e123449c39061093c9085908990611b5c565b60405180910390a35050505050565b606060045f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610aee575f848152602090819020604080516080810182526004860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916109cf90611998565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb90611998565b8015610a465780601f10610a1d57610100808354040283529160200191610a46565b820191905f5260205f20905b815481529060010190602001808311610a2957829003601f168201915b50505050508152602001600382018054610a5f90611998565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8b90611998565b8015610ad65780601f10610aad57610100808354040283529160200191610ad6565b820191905f5260205f20905b815481529060010190602001808311610ab957829003601f168201915b5050505050815250508152602001906001019061097d565b505050509050919050565b600260208190525f918252604090912080546001820154928201805491936001600160a01b03169291610b2b90611998565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5790611998565b8015610ba25780601f10610b7957610100808354040283529160200191610ba2565b820191905f5260205f20905b815481529060010190602001808311610b8557829003601f168201915b505050600384015460048501546005860154600690960154949560ff8084169661010090940481169550919350911688565b5f83815260026020526040812054849103610c015760405162461bcd60e51b815260040161036190611923565b5f8481526002602052604090206001015484906001600160a01b03163314610c625760405162461bcd60e51b8152602060048201526014602482015273139bdd081859d95b9d081c9959da5cdd1c985b9d60621b6044820152606401610361565b5f60025f8781526020019081526020015f20600201604051610c849190611b77565b604080519182900382205f8181526003602052918220829055925090610cad9087908790611951565b6040518091039020905060035f8281526020019081526020015f20545f14610d105760405162461bcd60e51b815260206004820152601660248201527515549248185b1c9958591e481c9959da5cdd195c995960521b6044820152606401610361565b5f8181526003602090815260408083208a905589835260029182905290912001610d3b868883611be9565b504260025f8981526020019081526020015f2060050181905550867f150cd089408b0f5f4a0002310b75a112412f1bc8d9d4463e97da392283893a16878742604051610d8993929190611b02565b60405180910390a250505050505050565b610da2611401565b610dab5f61142d565b565b610db5611401565b6001600160a01b0381165f81815260056020526040808220805460ff19166001179055517f6d05492139c5ea989514a5d2150c028041e5c087e2a39967f67dc7d2655adb819190a250565b335f9081526005602052604090205460ff1680610e2657505f546001600160a01b031633145b610e425760405162461bcd60e51b815260040161036190611b25565b5f85815260026020526040812054869103610e6f5760405162461bcd60e51b815260040161036190611923565b60045f8781526020019081526020015f206040518060800160405280336001600160a01b0316815260200142815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f920182905250939094525050835460018082018655948252602091829020845160049092020180546001600160a01b0319166001600160a01b0390921691909117815590830151938101939093555060408101519091906002820190610f6b9082611a1e565b5060608201516003820190610f809082611a1e565b505050336001600160a01b0316867f5644dd22408e7321b8d1ca8c32dfcfffcff22890a1c99e1d56751d2d806d80d787878787604051610fc39493929190611ca5565b60405180910390a3505050505050565b5f60035f8484604051610fe7929190611951565b604051809103902081526020019081526020015f2054905092915050565b61100d611401565b6001600160a01b0381165f81815260056020526040808220805460ff19169055517f44a3cd4eb5cc5748f6169df057b1cb2ae4c383e87cd94663c430e095d4cba4249190a250565b335f9081526005602052604090205460ff168061107b57505f546001600160a01b031633145b6110975760405162461bcd60e51b815260040161036190611b25565b5f828152600260205260408120548391036110c45760405162461bcd60e51b815260040161036190611923565b60018260ff16101580156110dc5750600a8260ff1611155b61111d5760405162461bcd60e51b8152602060048201526012602482015271053636f7265206d75737420626520312d31360741b6044820152606401610361565b5f8381526002602090815260409182902060038101805460ff87811661010081810261ff001985161790945542600586015586519390920416808352938201529092339187917fa568c8acd50ed78bc742261ef27b81da9f99eaa85caaa6c5f8f03388d5ec250b910161093c565b6004602052815f5260405f2081815481106111a4575f80fd5b5f9182526020909120600490910201805460018201546002830180546001600160a01b039093169550909350906111da90611998565b80601f016020809104026020016040519081016040528092919081815260200182805461120690611998565b80156112515780601f1061122857610100808354040283529160200191611251565b820191905f5260205f20905b81548152906001019060200180831161123457829003601f168201915b50505050509080600301805461126690611998565b80601f016020809104026020016040519081016040528092919081815260200182805461129290611998565b80156112dd5780601f106112b4576101008083540402835291602001916112dd565b820191905f5260205f20905b8154815290600101906020018083116112c057829003601f168201915b5050505050905084565b6112ef611401565b6001600160a01b03811661131857604051631e4fbdf760e01b81525f6004820152602401610361565b6113218161142d565b50565b5f818152600260205260408120548291036113515760405162461bcd60e51b815260040161036190611923565b5f8281526002602052604090206001015482906001600160a01b031633146113b25760405162461bcd60e51b8152602060048201526014602482015273139bdd081859d95b9d081c9959da5cdd1c985b9d60621b6044820152606401610361565b5f8381526002602052604080822060068101805460ff19166001179055426005909101555184917f7cce21c1f4552995dccace889e9ad45febf59c654d3fd1d7ab0457fa1439aa2c91a2505050565b5f546001600160a01b03163314610dab5760405163118cdaa760e01b8152336004820152602401610361565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518061010001604052805f81526020015f6001600160a01b03168152602001606081526020015f60038111156114b6576114b66115b5565b81525f60208201819052604082018190526060820181905260809091015290565b5f602082840312156114e7575f80fd5b5035919050565b5f8083601f8401126114fe575f80fd5b50813567ffffffffffffffff811115611515575f80fd5b60208301915083602082850101111561152c575f80fd5b9250929050565b5f8060208385031215611544575f80fd5b823567ffffffffffffffff81111561155a575f80fd5b611566858286016114ee565b90969095509350505050565b5f81518084525f5b818110156115965760208185018101518683018201520161157a565b505f602082860101526020601f19601f83011685010191505092915050565b634e487b7160e01b5f52602160045260245ffd5b600481106115e557634e487b7160e01b5f52602160045260245ffd5b9052565b602081528151602082015260018060a01b0360208301511660408201525f6040830151610100806060850152611623610120850183611572565b9150606085015161163760808601826115c9565b5060ff60808601511660a085015260a085015160c085015260c085015160e085015260e085015161166b8286018215159052565b5090949350505050565b5f60208284031215611685575f80fd5b81356001600160a01b038116811461169b575f80fd5b9392505050565b5f80604083850312156116b3575f80fd5b823591506020830135600481106116c8575f80fd5b809150509250929050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561176a57888303603f19018552815180516001600160a01b0316845287810151888501528681015160808886018190529061173982870182611572565b915050606080830151925085820381870152506117568183611572565b9689019694505050908601906001016116f8565b509098975050505050505050565b8881526001600160a01b0388166020820152610100604082018190525f906117a28382018a611572565b9150506117b260608301886115c9565b60ff861660808301528460a08301528360c083015282151560e08301529998505050505050505050565b5f805f604084860312156117ee575f80fd5b83359250602084013567ffffffffffffffff81111561180b575f80fd5b611817868287016114ee565b9497909650939450505050565b5f805f805f60608688031215611838575f80fd5b85359450602086013567ffffffffffffffff80821115611856575f80fd5b61186289838a016114ee565b9096509450604088013591508082111561187a575f80fd5b50611887888289016114ee565b969995985093965092949392505050565b5f80604083850312156118a9575f80fd5b82359150602083013560ff811681146116c8575f80fd5b5f80604083850312156118d1575f80fd5b50508035926020909101359150565b60018060a01b0385168152836020820152608060408201525f6119066080830185611572565b82810360608401526119188185611572565b979650505050505050565b6020808252601490820152731059d95b9d08191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b818382375f9101908152919050565b5f6001820161197d57634e487b7160e01b5f52601160045260245ffd5b5060010190565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806119ac57607f821691505b6020821081036119ca57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115611a19575f81815260208120601f850160051c810160208610156119f65750805b601f850160051c820191505b81811015611a1557828155600101611a02565b5050505b505050565b815167ffffffffffffffff811115611a3857611a38611984565b611a4c81611a468454611998565b846119d0565b602080601f831160018114611a7f575f8415611a685750858301515b5f19600386901b1c1916600185901b178555611a15565b5f85815260208120601f198616915b82811015611aad57888601518255948401946001909101908401611a8e565b5085821015611aca57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f611b15604083018587611ada565b9050826020830152949350505050565b60208082526017908201527f4e6f7420617574686f72697a6564207665726966696572000000000000000000604082015260600190565b60408101611b6a82856115c9565b61169b60208301846115c9565b5f808354611b8481611998565b60018281168015611b9c5760018114611bb157611bdd565b60ff1984168752821515830287019450611bdd565b875f526020805f205f5b85811015611bd45781548a820152908401908201611bbb565b50505082870194505b50929695505050505050565b67ffffffffffffffff831115611c0157611c01611984565b611c1583611c0f8354611998565b836119d0565b5f601f841160018114611c46575f8515611c2f5750838201355b5f19600387901b1c1916600186901b178355611c9e565b5f83815260209020601f19861690835b82811015611c765786850135825560209485019460019092019101611c56565b5086821015611c92575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f611cb8604083018688611ada565b8281036020840152611918818587611ada56fea2646970667358221220362c035e81e417fa5574dd6c4b3604405d15d141d807ca24141dcaafad792b2364736f6c63430008140033
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c80638edb1f9a116100b4578063c505371211610079578063c5053712146102bd578063ca2dfd0a146102c5578063d79ed7dc146102d8578063dd03888e146102eb578063f2fde38b1461030e578063fd61031714610321575f80fd5b80638edb1f9a146102435780639000b3d6146102625780639a89171614610275578063ab4576bb14610297578063b98e47fb146102aa575f80fd5b80633ee4d3d2116100fa5780633ee4d3d2146101c7578063513856c8146101e757806353c8388e1461020e578063715018a6146102215780638da5cb5b14610229575f80fd5b806311ba6b4a146101365780632d2a95851461014b5780632de5aaf714610171578063331052181461019157806336f005aa146101b4575b5f80fd5b6101496101443660046114d7565b610334565b005b61015e610159366004611533565b61043b565b6040519081526020015b60405180910390f35b61018461017f3660046114d7565b610671565b60405161016891906115e9565b6101a461019f366004611675565b6107af565b6040519015158152602001610168565b6101496101c23660046116a2565b6107e7565b6101da6101d53660046114d7565b61094b565b60405161016891906116d3565b6101fa6101f53660046114d7565b610af9565b604051610168989796959493929190611778565b61014961021c3660046117dc565b610bd4565b610149610d9a565b5f546040516001600160a01b039091168152602001610168565b61015e6102513660046114d7565b60036020525f908152604090205481565b610149610270366004611675565b610dad565b6101a4610283366004611675565b60056020525f908152604090205460ff1681565b6101496102a5366004611824565b610e00565b61015e6102b8366004611533565b610fd3565b60015461015e565b6101496102d3366004611675565b611005565b6101496102e6366004611898565b611055565b6102fe6102f93660046118c0565b61118b565b60405161016894939291906118e0565b61014961031c366004611675565b6112e7565b61014961032f3660046114d7565b611324565b5f8181526002602052604081205482910361036a5760405162461bcd60e51b815260040161036190611923565b60405180910390fd5b5f828152600260205260409020600101546001600160a01b031633148061039f5750335f9081526005602052604090205460ff165b806103b357505f546001600160a01b031633145b6103f05760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610361565b5f8281526002602052604080822060068101805460ff19169055426005909101555183917fc2fb7f8575ac3990e70361684edfc4d283931ea9a03dfa28766bf376a3934aa291a25050565b5f80838360405161044d929190611951565b6040518091039020905060035f8281526020019081526020015f20545f146104b75760405162461bcd60e51b815260206004820152601860248201527f4167656e7420616c7265616479207265676973746572656400000000000000006044820152606401610361565b60018054905f6104c683611960565b91905055505f6001549050604051806101000160405280828152602001336001600160a01b0316815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250506001602080850182905260408086018390524260608701819052608087015260a0909501829052868452600280825293859020865181559086015191810180546001600160a01b0319166001600160a01b03909316929092179091559284015191830191610597915082611a1e565b506060820151816003015f6101000a81548160ff021916908360038111156105c1576105c16115b5565b021790555060808201516003828101805461ff00191661010060ff909416939093029290921790915560a0830151600483015560c0830151600583015560e0909201516006909101805460ff19169115159190911790555f83815260209190915260409081902082905551339082907fc29f819ac362ff9c94de06666235808451aafd8894a2dffb86a080a965efeae39061066190899089904290611b02565b60405180910390a3949350505050565b61067961147c565b5f828152600260208181526040928390208351610100810185528154815260018201546001600160a01b031692810192909252918201805491938401916106bf90611998565b80601f01602080910402602001604051908101604052809291908181526020018280546106eb90611998565b80156107365780601f1061070d57610100808354040283529160200191610736565b820191905f5260205f20905b81548152906001019060200180831161071957829003601f168201915b505050918352505060038281015460209092019160ff169081111561075d5761075d6115b5565b600381111561076e5761076e6115b5565b8152600382015460ff610100909104811660208301526004830154604083015260058301546060830152600690920154909116151560809091015292915050565b6001600160a01b0381165f9081526005602052604081205460ff16806107e157505f546001600160a01b038381169116145b92915050565b335f9081526005602052604090205460ff168061080d57505f546001600160a01b031633145b6108295760405162461bcd60e51b815260040161036190611b25565b5f828152600260205260408120548391036108565760405162461bcd60e51b815260040161036190611923565b5f83815260026020526040902060038082015460ff169081111561087c5761087c6115b5565b83600381111561088e5761088e6115b5565b116108d35760405162461bcd60e51b815260206004820152601560248201527421b0b71037b7363c903ab833b930b232903a34b2b960591b6044820152606401610361565b6003808201805460ff81169286929160ff19169060019084908111156108fb576108fb6115b5565b0217905550426005830155604051339086907f25e31530d004e39052a50d432095f5251816c8e74f45648520459d5e123449c39061093c9085908990611b5c565b60405180910390a35050505050565b606060045f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610aee575f848152602090819020604080516080810182526004860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916109cf90611998565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb90611998565b8015610a465780601f10610a1d57610100808354040283529160200191610a46565b820191905f5260205f20905b815481529060010190602001808311610a2957829003601f168201915b50505050508152602001600382018054610a5f90611998565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8b90611998565b8015610ad65780601f10610aad57610100808354040283529160200191610ad6565b820191905f5260205f20905b815481529060010190602001808311610ab957829003601f168201915b5050505050815250508152602001906001019061097d565b505050509050919050565b600260208190525f918252604090912080546001820154928201805491936001600160a01b03169291610b2b90611998565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5790611998565b8015610ba25780601f10610b7957610100808354040283529160200191610ba2565b820191905f5260205f20905b815481529060010190602001808311610b8557829003601f168201915b505050600384015460048501546005860154600690960154949560ff8084169661010090940481169550919350911688565b5f83815260026020526040812054849103610c015760405162461bcd60e51b815260040161036190611923565b5f8481526002602052604090206001015484906001600160a01b03163314610c625760405162461bcd60e51b8152602060048201526014602482015273139bdd081859d95b9d081c9959da5cdd1c985b9d60621b6044820152606401610361565b5f60025f8781526020019081526020015f20600201604051610c849190611b77565b604080519182900382205f8181526003602052918220829055925090610cad9087908790611951565b6040518091039020905060035f8281526020019081526020015f20545f14610d105760405162461bcd60e51b815260206004820152601660248201527515549248185b1c9958591e481c9959da5cdd195c995960521b6044820152606401610361565b5f8181526003602090815260408083208a905589835260029182905290912001610d3b868883611be9565b504260025f8981526020019081526020015f2060050181905550867f150cd089408b0f5f4a0002310b75a112412f1bc8d9d4463e97da392283893a16878742604051610d8993929190611b02565b60405180910390a250505050505050565b610da2611401565b610dab5f61142d565b565b610db5611401565b6001600160a01b0381165f81815260056020526040808220805460ff19166001179055517f6d05492139c5ea989514a5d2150c028041e5c087e2a39967f67dc7d2655adb819190a250565b335f9081526005602052604090205460ff1680610e2657505f546001600160a01b031633145b610e425760405162461bcd60e51b815260040161036190611b25565b5f85815260026020526040812054869103610e6f5760405162461bcd60e51b815260040161036190611923565b60045f8781526020019081526020015f206040518060800160405280336001600160a01b0316815260200142815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f920182905250939094525050835460018082018655948252602091829020845160049092020180546001600160a01b0319166001600160a01b0390921691909117815590830151938101939093555060408101519091906002820190610f6b9082611a1e565b5060608201516003820190610f809082611a1e565b505050336001600160a01b0316867f5644dd22408e7321b8d1ca8c32dfcfffcff22890a1c99e1d56751d2d806d80d787878787604051610fc39493929190611ca5565b60405180910390a3505050505050565b5f60035f8484604051610fe7929190611951565b604051809103902081526020019081526020015f2054905092915050565b61100d611401565b6001600160a01b0381165f81815260056020526040808220805460ff19169055517f44a3cd4eb5cc5748f6169df057b1cb2ae4c383e87cd94663c430e095d4cba4249190a250565b335f9081526005602052604090205460ff168061107b57505f546001600160a01b031633145b6110975760405162461bcd60e51b815260040161036190611b25565b5f828152600260205260408120548391036110c45760405162461bcd60e51b815260040161036190611923565b60018260ff16101580156110dc5750600a8260ff1611155b61111d5760405162461bcd60e51b8152602060048201526012602482015271053636f7265206d75737420626520312d31360741b6044820152606401610361565b5f8381526002602090815260409182902060038101805460ff87811661010081810261ff001985161790945542600586015586519390920416808352938201529092339187917fa568c8acd50ed78bc742261ef27b81da9f99eaa85caaa6c5f8f03388d5ec250b910161093c565b6004602052815f5260405f2081815481106111a4575f80fd5b5f9182526020909120600490910201805460018201546002830180546001600160a01b039093169550909350906111da90611998565b80601f016020809104026020016040519081016040528092919081815260200182805461120690611998565b80156112515780601f1061122857610100808354040283529160200191611251565b820191905f5260205f20905b81548152906001019060200180831161123457829003601f168201915b50505050509080600301805461126690611998565b80601f016020809104026020016040519081016040528092919081815260200182805461129290611998565b80156112dd5780601f106112b4576101008083540402835291602001916112dd565b820191905f5260205f20905b8154815290600101906020018083116112c057829003601f168201915b5050505050905084565b6112ef611401565b6001600160a01b03811661131857604051631e4fbdf760e01b81525f6004820152602401610361565b6113218161142d565b50565b5f818152600260205260408120548291036113515760405162461bcd60e51b815260040161036190611923565b5f8281526002602052604090206001015482906001600160a01b031633146113b25760405162461bcd60e51b8152602060048201526014602482015273139bdd081859d95b9d081c9959da5cdd1c985b9d60621b6044820152606401610361565b5f8381526002602052604080822060068101805460ff19166001179055426005909101555184917f7cce21c1f4552995dccace889e9ad45febf59c654d3fd1d7ab0457fa1439aa2c91a2505050565b5f546001600160a01b03163314610dab5760405163118cdaa760e01b8152336004820152602401610361565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518061010001604052805f81526020015f6001600160a01b03168152602001606081526020015f60038111156114b6576114b66115b5565b81525f60208201819052604082018190526060820181905260809091015290565b5f602082840312156114e7575f80fd5b5035919050565b5f8083601f8401126114fe575f80fd5b50813567ffffffffffffffff811115611515575f80fd5b60208301915083602082850101111561152c575f80fd5b9250929050565b5f8060208385031215611544575f80fd5b823567ffffffffffffffff81111561155a575f80fd5b611566858286016114ee565b90969095509350505050565b5f81518084525f5b818110156115965760208185018101518683018201520161157a565b505f602082860101526020601f19601f83011685010191505092915050565b634e487b7160e01b5f52602160045260245ffd5b600481106115e557634e487b7160e01b5f52602160045260245ffd5b9052565b602081528151602082015260018060a01b0360208301511660408201525f6040830151610100806060850152611623610120850183611572565b9150606085015161163760808601826115c9565b5060ff60808601511660a085015260a085015160c085015260c085015160e085015260e085015161166b8286018215159052565b5090949350505050565b5f60208284031215611685575f80fd5b81356001600160a01b038116811461169b575f80fd5b9392505050565b5f80604083850312156116b3575f80fd5b823591506020830135600481106116c8575f80fd5b809150509250929050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561176a57888303603f19018552815180516001600160a01b0316845287810151888501528681015160808886018190529061173982870182611572565b915050606080830151925085820381870152506117568183611572565b9689019694505050908601906001016116f8565b509098975050505050505050565b8881526001600160a01b0388166020820152610100604082018190525f906117a28382018a611572565b9150506117b260608301886115c9565b60ff861660808301528460a08301528360c083015282151560e08301529998505050505050505050565b5f805f604084860312156117ee575f80fd5b83359250602084013567ffffffffffffffff81111561180b575f80fd5b611817868287016114ee565b9497909650939450505050565b5f805f805f60608688031215611838575f80fd5b85359450602086013567ffffffffffffffff80821115611856575f80fd5b61186289838a016114ee565b9096509450604088013591508082111561187a575f80fd5b50611887888289016114ee565b969995985093965092949392505050565b5f80604083850312156118a9575f80fd5b82359150602083013560ff811681146116c8575f80fd5b5f80604083850312156118d1575f80fd5b50508035926020909101359150565b60018060a01b0385168152836020820152608060408201525f6119066080830185611572565b82810360608401526119188185611572565b979650505050505050565b6020808252601490820152731059d95b9d08191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b818382375f9101908152919050565b5f6001820161197d57634e487b7160e01b5f52601160045260245ffd5b5060010190565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806119ac57607f821691505b6020821081036119ca57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115611a19575f81815260208120601f850160051c810160208610156119f65750805b601f850160051c820191505b81811015611a1557828155600101611a02565b5050505b505050565b815167ffffffffffffffff811115611a3857611a38611984565b611a4c81611a468454611998565b846119d0565b602080601f831160018114611a7f575f8415611a685750858301515b5f19600386901b1c1916600185901b178555611a15565b5f85815260208120601f198616915b82811015611aad57888601518255948401946001909101908401611a8e565b5085821015611aca57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f611b15604083018587611ada565b9050826020830152949350505050565b60208082526017908201527f4e6f7420617574686f72697a6564207665726966696572000000000000000000604082015260600190565b60408101611b6a82856115c9565b61169b60208301846115c9565b5f808354611b8481611998565b60018281168015611b9c5760018114611bb157611bdd565b60ff1984168752821515830287019450611bdd565b875f526020805f205f5b85811015611bd45781548a820152908401908201611bbb565b50505082870194505b50929695505050505050565b67ffffffffffffffff831115611c0157611c01611984565b611c1583611c0f8354611998565b836119d0565b5f601f841160018114611c46575f8515611c2f5750838201355b5f19600387901b1c1916600186901b178355611c9e565b5f83815260209020601f19861690835b82811015611c765786850135825560209485019460019092019101611c56565b5086821015611c92575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f611cb8604083018688611ada565b8281036020840152611918818587611ada56fea2646970667358221220362c035e81e417fa5574dd6c4b3604405d15d141d807ca24141dcaafad792b2364736f6c63430008140033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.