APE Price: $0.19 (-0.01%)

Contract

0xf1C5e83925615BE794A0A78c2e5694f6a326Bcb3

Overview

APE Balance

Apechain LogoApechain LogoApechain Logo0 APE

APE Value

$0.00

More Info

Private Name Tags

ContractCreator

Multichain Info

N/A
Transaction Hash
Block
From
To

There are no matching entries

Please try again later

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SportsOracle

Compiler Version
v0.8.33+commit.64118f21

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at apescan.io on 2026-01-19
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

/**
 * @dev Interface of the ERC-165 standard
 */
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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;
    }
}

interface IAccessControl {
    error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);
    error AccessControlBadConfirmation();

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address callerConfirmation) external;
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address account => bool) hasRole;
        bytes32 adminRole;
    }

    mapping(bytes32 role => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    function hasRole(bytes32 role, address account) public view virtual returns (bool) {
        return _roles[role].hasRole[account];
    }

    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert AccessControlUnauthorizedAccount(account, role);
        }
    }

    function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address callerConfirmation) public virtual {
        if (callerConfirmation != _msgSender()) {
            revert AccessControlBadConfirmation();
        }
        _revokeRole(role, callerConfirmation);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    function _grantRole(bytes32 role, address account) internal virtual returns (bool) {
        if (!hasRole(role, account)) {
            _roles[role].hasRole[account] = true;
            emit RoleGranted(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }

    function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {
        if (hasRole(role, account)) {
            _roles[role].hasRole[account] = false;
            emit RoleRevoked(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }
}

interface IERC1155 is IERC165 {
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);

    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external;
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata values, bytes calldata data) external;
}

interface IConditionalTokens is IERC1155 {
    function payoutNumerators(bytes32) external returns (uint256[] memory);
    function payoutDenominator(bytes32) external returns (uint256);
    function prepareCondition(address oracle, bytes32 questionId, uint256 outcomeSlotCount) external;
    function reportPayouts(bytes32 questionId, uint256[] calldata payouts) external;
    function getOutcomeSlotCount(bytes32 conditionId) external view returns (uint256);
    function getConditionId(address oracle, bytes32 questionId, uint256 outcomeSlotCount) external pure returns (bytes32);
    function getCollectionId(bytes32 parentCollectionId, bytes32 conditionId, uint256 indexSet) external view returns (bytes32);
}

contract Access is AccessControl {
    bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");

    constructor() {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(ADMIN_ROLE, msg.sender);
    }

    function transferOwnership(address newOwner) public onlyRole(DEFAULT_ADMIN_ROLE) {
        require(newOwner != address(0), "New owner cannot be zero address");
        _revokeRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(DEFAULT_ADMIN_ROLE, newOwner);
    }

    function addAdmin(address account) public onlyRole(DEFAULT_ADMIN_ROLE) {
        grantRole(ADMIN_ROLE, account);
    }

    function removeAdmin(address account) public onlyRole(DEFAULT_ADMIN_ROLE) {
        revokeRole(ADMIN_ROLE, account);
    }

    function isAdmin(address account) external view returns (bool) {
        return hasRole(ADMIN_ROLE, account);
    }

    function isOwner(address account) external view returns (bool) {
        return hasRole(DEFAULT_ADMIN_ROLE, account);
    }
}

/**
 * @title SportsEventData
 * @dev Data structure for storing sports event information
 */
struct SportsEventData {
    uint256 createdAt;
    uint256 deadline;
    uint8 numOutcomes;
    bool initialized;
    bool resolved;
    bool cancelled;
    address creator;
    uint8 winningOutcome;
    string description;
    string externalId;
}

/**
 * @title ISportsOracleEvents
 * @dev Events emitted by the SportsOracle contract
 */
interface ISportsOracleEvents {
    event EventCreated(
        bytes32 indexed eventId,
        address indexed creator,
        string description,
        string externalId,
        uint256 deadline,
        uint8 numOutcomes
    );
    
    event EventResolved(
        bytes32 indexed eventId,
        uint8 winningOutcome,
        address resolver
    );
    
    event EventCancelled(
        bytes32 indexed eventId,
        address canceller
    );
}

/**
 * @title ISportsOracleErrors
 * @dev Custom errors for the SportsOracle contract
 */
interface ISportsOracleErrors {
    error NotInitialized();
    error AlreadyInitialized();
    error AlreadyResolved();
    error AlreadyCancelled();
    error InvalidOutcome();
    error InvalidNumOutcomes();
    error InvalidDeadline();
    error DeadlineNotPassed();
    error NotOperator();
}

/**
 * @title SportsOracle
 * @dev A manual resolution oracle for sports events that integrates with the 
 * Conditional Tokens Framework. Unlike PriceOracle which uses Pyth for automated
 * resolution, this oracle allows operators to manually resolve events.
 *
 * Key Features:
 * - Manual event creation with custom descriptions
 * - Operator-controlled resolution (simple outcome input: 1, 2, etc.)
 * - Support for 2+ outcomes (home/away, or with draw)
 * - Event cancellation for voided games
 * - Compatible with existing CTF infrastructure
 * - Easy to call from ApeScan/block explorer
 *
 * Resolution Outcomes:
 * - 0 = Push/Void (refund scenario - both outcomes get equal payout)
 * - 1 = Outcome 1 wins (e.g., Home team)
 * - 2 = Outcome 2 wins (e.g., Away team)
 * - 3+ = Additional outcomes if numOutcomes > 2
 */
contract SportsOracle is ISportsOracleEvents, ISportsOracleErrors, Access {
    /// @notice Reference to the Conditional Tokens Framework contract
    IConditionalTokens public immutable ctf;

    /// @notice Role identifier for operators who can create and resolve events
    bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE");

    /// @notice Stores all event data indexed by eventId
    mapping(bytes32 => SportsEventData) public events;

    /// @notice Counter for generating unique event IDs
    uint256 public eventCount;

    /**
     * @dev Constructor initializes the contract with required dependencies
     * @param _ctf Address of the Conditional Tokens Framework contract
     */
    constructor(address _ctf) {
        ctf = IConditionalTokens(_ctf);
        _grantRole(OPERATOR_ROLE, msg.sender);
    }

    /*///////////////////////////////////////////////////////////////////
                            MODIFIERS
    //////////////////////////////////////////////////////////////////*/

    modifier onlyOperator() {
        if (!hasRole(OPERATOR_ROLE, msg.sender) && !hasRole(ADMIN_ROLE, msg.sender)) {
            revert NotOperator();
        }
        _;
    }

    /*///////////////////////////////////////////////////////////////////
                            OPERATOR FUNCTIONS
    //////////////////////////////////////////////////////////////////*/

    /**
     * @notice Creates a new sports event
     * @dev Callable by operators. Prepares condition in CTF automatically.
     * @param eventId Unique identifier for the event (can be derived from external source)
     * @param description Human-readable description (e.g., "Lakers vs Celtics - Jan 20")
     * @param externalId Optional external reference ID (e.g., Polymarket event ID)
     * @param deadline Unix timestamp when betting closes / event starts
     * @param numOutcomes Number of possible outcomes (typically 2 for home/away)
     */
    function createEvent(
        bytes32 eventId,
        string calldata description,
        string calldata externalId,
        uint256 deadline,
        uint8 numOutcomes
    ) external onlyOperator {
        if (events[eventId].initialized) revert AlreadyInitialized();
        if (numOutcomes < 2 || numOutcomes > 8) revert InvalidNumOutcomes();
        if (deadline <= block.timestamp) revert InvalidDeadline();

        events[eventId] = SportsEventData({
            createdAt: block.timestamp,
            deadline: deadline,
            numOutcomes: numOutcomes,
            initialized: true,
            resolved: false,
            cancelled: false,
            creator: msg.sender,
            winningOutcome: 0,
            description: description,
            externalId: externalId
        });

        eventCount++;

        ctf.prepareCondition(address(this), eventId, numOutcomes);

        emit EventCreated(eventId, msg.sender, description, externalId, deadline, numOutcomes);
    }

    /**
     * @notice Creates a new sports event with auto-generated eventId
     * @dev Convenience function that generates eventId from inputs
     * @param description Human-readable description
     * @param externalId Optional external reference ID
     * @param deadline Unix timestamp when betting closes
     * @param numOutcomes Number of possible outcomes
     * @return eventId The generated event ID
     */
    function createEventAuto(
        string calldata description,
        string calldata externalId,
        uint256 deadline,
        uint8 numOutcomes
    ) external onlyOperator returns (bytes32 eventId) {
        eventId = keccak256(abi.encodePacked(
            description,
            externalId,
            deadline,
            block.timestamp,
            eventCount
        ));

        if (events[eventId].initialized) revert AlreadyInitialized();
        if (numOutcomes < 2 || numOutcomes > 8) revert InvalidNumOutcomes();
        if (deadline <= block.timestamp) revert InvalidDeadline();

        events[eventId] = SportsEventData({
            createdAt: block.timestamp,
            deadline: deadline,
            numOutcomes: numOutcomes,
            initialized: true,
            resolved: false,
            cancelled: false,
            creator: msg.sender,
            winningOutcome: 0,
            description: description,
            externalId: externalId
        });

        eventCount++;

        ctf.prepareCondition(address(this), eventId, numOutcomes);

        emit EventCreated(eventId, msg.sender, description, externalId, deadline, numOutcomes);

        return eventId;
    }

    /**
     * @notice Resolves an event with the winning outcome
     * @dev This is the main function you'll call on ApeScan to settle events.
     *      Simply enter the eventId and the winning outcome number.
     * @param eventId The event to resolve
     * @param winningOutcome The winning outcome index:
     *        - 0 = Push/Void (equal payout to all outcomes)
     *        - 1 = Outcome 1 wins (e.g., Home team)
     *        - 2 = Outcome 2 wins (e.g., Away team)
     *        - 3+ = Additional outcomes if applicable
     */
    function resolve(bytes32 eventId, uint8 winningOutcome) external onlyOperator {
        SportsEventData storage eventData = events[eventId];
        
        if (!eventData.initialized) revert NotInitialized();
        if (eventData.resolved) revert AlreadyResolved();
        if (eventData.cancelled) revert AlreadyCancelled();
        if (winningOutcome > eventData.numOutcomes) revert InvalidOutcome();

        eventData.resolved = true;
        eventData.winningOutcome = winningOutcome;

        uint256[] memory payouts = new uint256[](eventData.numOutcomes);
        
        if (winningOutcome == 0) {
            for (uint8 i = 0; i < eventData.numOutcomes; i++) {
                payouts[i] = 1;
            }
        } else {
            payouts[winningOutcome - 1] = 1;
        }

        ctf.reportPayouts(eventId, payouts);

        emit EventResolved(eventId, winningOutcome, msg.sender);
    }

    /**
     * @notice Cancels an event (e.g., game postponed, voided)
     * @dev Reports equal payouts to all outcomes, effectively refunding bettors
     * @param eventId The event to cancel
     */
    function cancel(bytes32 eventId) external onlyOperator {
        SportsEventData storage eventData = events[eventId];
        
        if (!eventData.initialized) revert NotInitialized();
        if (eventData.resolved) revert AlreadyResolved();
        if (eventData.cancelled) revert AlreadyCancelled();

        eventData.cancelled = true;
        eventData.resolved = true;

        uint256[] memory payouts = new uint256[](eventData.numOutcomes);
        for (uint8 i = 0; i < eventData.numOutcomes; i++) {
            payouts[i] = 1;
        }

        ctf.reportPayouts(eventId, payouts);

        emit EventCancelled(eventId, msg.sender);
    }

    /*///////////////////////////////////////////////////////////////////
                            ADMIN FUNCTIONS
    //////////////////////////////////////////////////////////////////*/

    /**
     * @notice Adds an operator who can create and resolve events
     * @param operator Address to grant operator role
     */
    function addOperator(address operator) external onlyRole(ADMIN_ROLE) {
        _grantRole(OPERATOR_ROLE, operator);
    }

    /**
     * @notice Removes an operator
     * @param operator Address to revoke operator role from
     */
    function removeOperator(address operator) external onlyRole(ADMIN_ROLE) {
        _revokeRole(OPERATOR_ROLE, operator);
    }

    /**
     * @notice Checks if an address is an operator
     * @param account Address to check
     * @return bool True if the address has operator role
     */
    function isOperator(address account) external view returns (bool) {
        return hasRole(OPERATOR_ROLE, account) || hasRole(ADMIN_ROLE, account);
    }

    /*///////////////////////////////////////////////////////////////////
                            VIEW FUNCTIONS
    //////////////////////////////////////////////////////////////////*/

    /**
     * @notice Gets the full event data for a given eventId
     * @param eventId The event to query
     * @return eventData The complete event data struct
     */
    function getEvent(bytes32 eventId) external view returns (SportsEventData memory) {
        return events[eventId];
    }

    /**
     * @notice Gets the condition ID for an event (used by CTF)
     * @param eventId The event to get condition for
     * @return conditionId The CTF condition ID
     */
    function getConditionId(bytes32 eventId) external view returns (bytes32) {
        SportsEventData storage eventData = events[eventId];
        if (!eventData.initialized) revert NotInitialized();
        return ctf.getConditionId(address(this), eventId, eventData.numOutcomes);
    }

    /**
     * @notice Checks if an event is ready to be resolved
     * @param eventId The event to check
     * @return bool True if the event can be resolved
     */
    function canResolve(bytes32 eventId) external view returns (bool) {
        SportsEventData storage eventData = events[eventId];
        return eventData.initialized && 
               !eventData.resolved && 
               !eventData.cancelled;
    }

    /**
     * @notice Gets the status of an event
     * @param eventId The event to check
     * @return initialized Whether the event exists
     * @return resolved Whether the event has been resolved
     * @return cancelled Whether the event was cancelled
     * @return winningOutcome The winning outcome (0 if not resolved or push)
     */
    function getEventStatus(bytes32 eventId) external view returns (
        bool initialized,
        bool resolved,
        bool cancelled,
        uint8 winningOutcome
    ) {
        SportsEventData storage eventData = events[eventId];
        return (
            eventData.initialized,
            eventData.resolved,
            eventData.cancelled,
            eventData.winningOutcome
        );
    }

    /**
     * @notice Generates an eventId from parameters (for off-chain use)
     * @dev Useful for creating deterministic event IDs
     * @param description Event description
     * @param externalId External reference ID
     * @param deadline Event deadline
     * @return eventId The generated event ID
     */
    function generateEventId(
        string calldata description,
        string calldata externalId,
        uint256 deadline
    ) external view returns (bytes32) {
        return keccak256(abi.encodePacked(
            description,
            externalId,
            deadline,
            block.timestamp,
            eventCount
        ));
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_ctf","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"AlreadyCancelled","type":"error"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"AlreadyResolved","type":"error"},{"inputs":[],"name":"DeadlineNotPassed","type":"error"},{"inputs":[],"name":"InvalidDeadline","type":"error"},{"inputs":[],"name":"InvalidNumOutcomes","type":"error"},{"inputs":[],"name":"InvalidOutcome","type":"error"},{"inputs":[],"name":"NotInitialized","type":"error"},{"inputs":[],"name":"NotOperator","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"eventId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"canceller","type":"address"}],"name":"EventCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"eventId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"string","name":"description","type":"string"},{"indexed":false,"internalType":"string","name":"externalId","type":"string"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"numOutcomes","type":"uint8"}],"name":"EventCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"eventId","type":"bytes32"},{"indexed":false,"internalType":"uint8","name":"winningOutcome","type":"uint8"},{"indexed":false,"internalType":"address","name":"resolver","type":"address"}],"name":"EventResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"addOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventId","type":"bytes32"}],"name":"canResolve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventId","type":"bytes32"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventId","type":"bytes32"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"externalId","type":"string"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"numOutcomes","type":"uint8"}],"name":"createEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"externalId","type":"string"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"numOutcomes","type":"uint8"}],"name":"createEventAuto","outputs":[{"internalType":"bytes32","name":"eventId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ctf","outputs":[{"internalType":"contract IConditionalTokens","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eventCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"events","outputs":[{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"numOutcomes","type":"uint8"},{"internalType":"bool","name":"initialized","type":"bool"},{"internalType":"bool","name":"resolved","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint8","name":"winningOutcome","type":"uint8"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"externalId","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"externalId","type":"string"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"generateEventId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventId","type":"bytes32"}],"name":"getConditionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventId","type":"bytes32"}],"name":"getEvent","outputs":[{"components":[{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"numOutcomes","type":"uint8"},{"internalType":"bool","name":"initialized","type":"bool"},{"internalType":"bool","name":"resolved","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint8","name":"winningOutcome","type":"uint8"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"externalId","type":"string"}],"internalType":"struct SportsEventData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventId","type":"bytes32"}],"name":"getEventStatus","outputs":[{"internalType":"bool","name":"initialized","type":"bool"},{"internalType":"bool","name":"resolved","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"uint8","name":"winningOutcome","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventId","type":"bytes32"},{"internalType":"uint8","name":"winningOutcome","type":"uint8"}],"name":"resolve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561000f575f5ffd5b5060405161257c38038061257c83398101604081905261002e9161014b565b6100385f336100a2565b506100637fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336100a2565b506001600160a01b03811660805261009b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929336100a2565b5050610178565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16610142575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556100fa3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610145565b505f5b92915050565b5f6020828403121561015b575f5ffd5b81516001600160a01b0381168114610171575f5ffd5b9392505050565b6080516123c96101b35f395f818161022d0152818161061c0152818161098601528181610de6015281816112c501526119c601526123c95ff3fe608060405234801561000f575f5ffd5b50600436106101c6575f3560e01c806370480275116100fe578063a217fddf1161009e578063c4d252f51161006e578063c4d252f5146104a9578063d547741f146104bc578063f2fde38b146104cf578063f5b541a6146104e2575f5ffd5b8063a217fddf14610453578063a80f0a861461045a578063ac8a584a1461046d578063bfdc4a6114610480575f5ffd5b806375b238fc116100d957806375b238fc146103c35780638c172fa2146103ea57806391d148541461040a5780639870d7fe14610440575f5ffd5b80637048027514610394578063708faf69146103a757806371be2e4a146103ba575f5ffd5b80632f2ff15d116101695780634b0ecb30116101445780634b0ecb30146102e85780635e94dd961461035b5780636d70f7ae1461036e5780636ee50aa714610381575f5ffd5b80632f2ff15d146102af5780632f54bf6e146102c257806336568abe146102d5575f5ffd5b806322a9339f116101a457806322a9339f14610228578063248a9ca31461026757806324d7806c1461028957806328ee29361461029c575f5ffd5b806301ffc9a7146101ca57806304329c03146101f25780631785f53c14610213575b5f5ffd5b6101dd6101d8366004611cbc565b610509565b60405190151581526020015b60405180910390f35b610205610200366004611cfb565b6105a1565b6040519081526020016101e9565b610226610221366004611d2d565b610694565b005b61024f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e9565b610205610275366004611cfb565b5f9081526020819052604090206001015490565b6101dd610297366004611d2d565b6106cc565b6102266102aa366004611d56565b61070b565b6102266102bd366004611d80565b610a2d565b6101dd6102d0366004611d2d565b610a57565b6102266102e3366004611d80565b610a96565b6103306102f6366004611cfb565b5f9081526001602052604090206002015460ff610100820481169262010000830482169263010000008104831692600160c01b9091041690565b60408051941515855292151560208501529015159183019190915260ff1660608201526080016101e9565b610226610369366004611de6565b610ae7565b6101dd61037c366004611d2d565b610e9a565b61020561038f366004611e77565b610f19565b6102266103a2366004611d2d565b610f5a565b6102056103b5366004611eea565b610f8e565b61020560025481565b6102057fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6103fd6103f8366004611cfb565b61137a565b6040516101e99190611f9f565b6101dd610418366004611d80565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61022661044e366004611d2d565b611588565b6102055f81565b6101dd610468366004611cfb565b6115dc565b61022661047b366004611d2d565b611629565b61049361048e366004611cfb565b61167d565b6040516101e99a9998979695949392919061205e565b6102266104b7366004611cfb565b6117f5565b6102266104ca366004611d80565b611a64565b6102266104dd366004611d2d565b611a88565b6102057f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061059b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f8181526001602052604081206002810154610100900460ff166105d8576040516321c4e35760e21b815260040160405180910390fd5b60028101546040517f852c6ae20000000000000000000000000000000000000000000000000000000081523060048201526024810185905260ff90911660448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063852c6ae290606401602060405180830381865afa158015610669573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068d91906120dc565b9392505050565b5f61069e81611b1c565b6106c87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583611a64565b5050565b6001600160a01b0381165f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604081205460ff1661059b565b335f9081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604090205460ff161580156107775750335f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16155b1561079557604051631f0853c160e21b815260040160405180910390fd5b5f8281526001602052604090206002810154610100900460ff166107cc576040516321c4e35760e21b815260040160405180910390fd5b600281015462010000900460ff16156107f8576040516336ab81e160e11b815260040160405180910390fd5b60028101546301000000900460ff1615610825576040516354e3762560e01b815260040160405180910390fd5b600281015460ff908116908316111561086a576040517fc74a206d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028101805460ff848116600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff00ffff909216919091176201000017918290555f911667ffffffffffffffff8111156108c7576108c76120f3565b6040519080825280602002602001820160405280156108f0578160200160208202803683370190505b5090508260ff165f03610942575f5b600283015460ff908116908216101561093c576001828260ff168151811061092957610929612107565b60209081029190910101526001016108ff565b5061096f565b60018161094f828661212f565b60ff168151811061096257610962612107565b6020026020010181815250505b604051633124a62b60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c49298ac906109bd9087908590600401612148565b5f604051808303815f87803b1580156109d4575f5ffd5b505af11580156109e6573d5f5f3e3d5ffd5b50506040805160ff871681523360208201528793507ff294ef099f1e92c4c392d0e748047330ca09e5f7c752e2f305866a4ee101515e92500160405180910390a250505050565b5f82815260208190526040902060010154610a4781611b1c565b610a518383611b29565b50505050565b6001600160a01b0381165f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205460ff1661059b565b6001600160a01b0381163314610ad8576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae28282611bd0565b505050565b335f9081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604090205460ff16158015610b535750335f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16155b15610b7157604051631f0853c160e21b815260040160405180910390fd5b5f87815260016020526040902060020154610100900460ff1615610ba75760405162dc149f60e41b815260040160405180910390fd5b60028160ff161080610bbc575060088160ff16115b15610bda5760405163566f431760e11b815260040160405180910390fd5b428211610bfa57604051631da7447960e21b815260040160405180910390fd5b6040805161014081018252428152602080820185905260ff841682840152600160608301525f6080830181905260a083018190523360c084015260e08301528251601f8901829004820281018201909352878352909161010083019189908990819084018382808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f92018290525093909452505089815260016020818152604092839020855181559085015191810191909155908301516002820180546060860151608087015160a088015160c089015160e08a015160ff97881661ffff199096169590951761010094151585021763ffff00001916620100009315159390930263ff000000191692909217630100000091151591909102177fffffffffffffff000000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039092169190910260ff60c01b191617600160c01b94909216939093021790558301519091506003820190610d949082612223565b506101208201516004820190610daa9082612223565b50506002805491505f610dbc836122e2565b909155505060405163365bb9d560e21b81523060048201526024810188905260ff821660448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d96ee754906064015f604051808303815f87803b158015610e2f575f5ffd5b505af1158015610e41573d5f5f3e3d5ffd5b50505050336001600160a01b0316877fded2a7fa6450010db63d57ae15df2de88ec3c5b7b3b91a89a3d5e3dc0db38c3d888888888888604051610e8996959493929190612322565b60405180910390a350505050505050565b6001600160a01b0381165f9081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604081205460ff168061059b57506001600160a01b0382165f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff1661059b565b5f858585858542600254604051602001610f399796959493929190612365565b60405160208183030381529060405280519060200120905095945050505050565b5f610f6481611b1c565b6106c87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610a2d565b335f9081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604081205460ff16158015610ffa5750335f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16155b1561101857604051631f0853c160e21b815260040160405180910390fd5b8686868686426002546040516020016110379796959493929190612365565b60408051808303601f1901815291815281516020928301205f8181526001909352912060020154909150610100900460ff16156110865760405162dc149f60e41b815260040160405180910390fd5b60028260ff16108061109b575060088260ff16115b156110b95760405163566f431760e11b815260040160405180910390fd5b4283116110d957604051631da7447960e21b815260040160405180910390fd5b6040805161014081018252428152602080820186905260ff851682840152600160608301525f6080830181905260a083018190523360c084015260e08301528251601f8a0182900482028101820190935288835290916101008301918a908a90819084018382808284375f92019190915250505090825250604080516020601f8901819004810282018101909252878152918101919088908890819084018382808284375f92018290525093909452505083815260016020818152604092839020855181559085015191810191909155908301516002820180546060860151608087015160a088015160c089015160e08a015160ff97881661ffff199096169590951761010094151585021763ffff00001916620100009315159390930263ff000000191692909217630100000091151591909102177fffffffffffffff000000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039092169190910260ff60c01b191617600160c01b949092169390930217905583015190915060038201906112739082612223565b5061012082015160048201906112899082612223565b50506002805491505f61129b836122e2565b909155505060405163365bb9d560e21b81523060048201526024810182905260ff831660448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d96ee754906064015f604051808303815f87803b15801561130e575f5ffd5b505af1158015611320573d5f5f3e3d5ffd5b50505050336001600160a01b0316817fded2a7fa6450010db63d57ae15df2de88ec3c5b7b3b91a89a3d5e3dc0db38c3d89898989898960405161136896959493929190612322565b60405180910390a39695505050505050565b60408051610140810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e082019290925261010081018290526101208101919091525f82815260016020818152604092839020835161014081018552815481529281015491830191909152600281015460ff80821694840194909452610100808204851615156060850152620100008204851615156080850152630100000082048516151560a08501526001600160a01b0364010000000083041660c0850152600160c01b90910490931660e0830152600381018054929391929184019161147190612195565b80601f016020809104026020016040519081016040528092919081815260200182805461149d90612195565b80156114e85780601f106114bf576101008083540402835291602001916114e8565b820191905f5260205f20905b8154815290600101906020018083116114cb57829003601f168201915b5050505050815260200160048201805461150190612195565b80601f016020809104026020016040519081016040528092919081815260200182805461152d90612195565b80156115785780601f1061154f57610100808354040283529160200191611578565b820191905f5260205f20905b81548152906001019060200180831161155b57829003601f168201915b5050505050815250509050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756115b281611b1c565b610ae27f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92983611b29565b5f8181526001602052604081206002810154610100900460ff16801561160d5750600281015462010000900460ff16155b801561068d5750600201546301000000900460ff161592915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561165381611b1c565b610ae27f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92983611bd0565b600160208190525f91825260409091208054918101546002820154600383018054929360ff808416946101008504821694620100008104831694630100000082048416946001600160a01b0364010000000084041694600160c01b909304909216926116e890612195565b80601f016020809104026020016040519081016040528092919081815260200182805461171490612195565b801561175f5780601f106117365761010080835404028352916020019161175f565b820191905f5260205f20905b81548152906001019060200180831161174257829003601f168201915b50505050509080600401805461177490612195565b80601f01602080910402602001604051908101604052809291908181526020018280546117a090612195565b80156117eb5780601f106117c2576101008083540402835291602001916117eb565b820191905f5260205f20905b8154815290600101906020018083116117ce57829003601f168201915b505050505090508a565b335f9081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604090205460ff161580156118615750335f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16155b1561187f57604051631f0853c160e21b815260040160405180910390fd5b5f8181526001602052604090206002810154610100900460ff166118b6576040516321c4e35760e21b815260040160405180910390fd5b600281015462010000900460ff16156118e2576040516336ab81e160e11b815260040160405180910390fd5b60028101546301000000900460ff161561190f576040516354e3762560e01b815260040160405180910390fd5b600281018054630101000063ffff0000198216179091555f9060ff1667ffffffffffffffff811115611943576119436120f3565b60405190808252806020026020018201604052801561196c578160200160208202803683370190505b5090505f5b600283015460ff90811690821610156119ae576001828260ff168151811061199b5761199b612107565b6020908102919091010152600101611971565b50604051633124a62b60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c49298ac906119fd9086908590600401612148565b5f604051808303815f87803b158015611a14575f5ffd5b505af1158015611a26573d5f5f3e3d5ffd5b50506040513381528592507f144a6f592b28f8e6ddc409e1bfeae9138e3bcc5f4982ba712e59903615a15ba1915060200160405180910390a2505050565b5f82815260208190526040902060010154611a7e81611b1c565b610a518383611bd0565b5f611a9281611b1c565b6001600160a01b038216611b07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4e6577206f776e65722063616e6e6f74206265207a65726f206164647265737360448201526064015b60405180910390fd5b611b115f33611bd0565b50610ae25f83611b29565b611b268133611c51565b50565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16611bc9575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611b813390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161059b565b505f61059b565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1615611bc9575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161059b565b5f828152602081815260408083206001600160a01b038516845290915290205460ff166106c8576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611afe565b5f60208284031215611ccc575f5ffd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461068d575f5ffd5b5f60208284031215611d0b575f5ffd5b5035919050565b80356001600160a01b0381168114611d28575f5ffd5b919050565b5f60208284031215611d3d575f5ffd5b61068d82611d12565b803560ff81168114611d28575f5ffd5b5f5f60408385031215611d67575f5ffd5b82359150611d7760208401611d46565b90509250929050565b5f5f60408385031215611d91575f5ffd5b82359150611d7760208401611d12565b5f5f83601f840112611db1575f5ffd5b50813567ffffffffffffffff811115611dc8575f5ffd5b602083019150836020828501011115611ddf575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a031215611dfc575f5ffd5b87359650602088013567ffffffffffffffff811115611e19575f5ffd5b611e258a828b01611da1565b909750955050604088013567ffffffffffffffff811115611e44575f5ffd5b611e508a828b01611da1565b90955093505060608801359150611e6960808901611d46565b905092959891949750929550565b5f5f5f5f5f60608688031215611e8b575f5ffd5b853567ffffffffffffffff811115611ea1575f5ffd5b611ead88828901611da1565b909650945050602086013567ffffffffffffffff811115611ecc575f5ffd5b611ed888828901611da1565b96999598509660400135949350505050565b5f5f5f5f5f5f60808789031215611eff575f5ffd5b863567ffffffffffffffff811115611f15575f5ffd5b611f2189828a01611da1565b909750955050602087013567ffffffffffffffff811115611f40575f5ffd5b611f4c89828a01611da1565b90955093505060408701359150611f6560608801611d46565b90509295509295509295565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6020815281516020820152602082015160408201525f6040830151611fc9606084018260ff169052565b506060830151801515608084015250608083015180151560a08401525060a083015180151560c08401525060c08301516001600160a01b03811660e08401525060e083015160ff811661010084015250610100830151610140610120840152612036610160840182611f71565b9050610120840151601f19848303016101408501526120558282611f71565b95945050505050565b8a815289602082015260ff891660408201528715156060820152861515608082015285151560a08201526001600160a01b03851660c082015260ff841660e08201526101406101008201525f6120b8610140830185611f71565b8281036101208401526120cb8185611f71565b9d9c50505050505050505050505050565b5f602082840312156120ec575f5ffd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff828116828216039081111561059b5761059b61211b565b5f60408201848352604060208401528084518083526060850191506020860192505f5b8181101561218957835183526020938401939092019160010161216b565b50909695505050505050565b600181811c908216806121a957607f821691505b6020821081036121c757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610ae25782821115610ae257805f5260205f20601f840160051c60208510156121f857505f5b90810190601f840160051c035f5b8181101561221b575f83820155600101612206565b505050505050565b815167ffffffffffffffff81111561223d5761223d6120f3565b6122518161224b8454612195565b846121cd565b6020601f821160018114612283575f831561226c5750848201515b5f19600385901b1c1916600184901b1784556122db565b5f84815260208120601f198516915b828110156122b25787850151825560209485019460019092019101612292565b50848210156122cf57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b5f600182016122f3576122f361211b565b5060010190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b608081525f61233560808301888a6122fa565b82810360208401526123488187896122fa565b91505083604083015260ff83166060830152979650505050505050565b868882375f8782015f815286888237909501938452506020830191909152604082015260600194935050505056fea2646970667358221220a7d3ad74e15a6308bf26a548df1a95acb17c8357fc885e0ffa1f66d84f5923ad64736f6c634300082100330000000000000000000000005af41fe438be6c20896d4bd5dc5f9d05d55a298f

Deployed Bytecode

0x608060405234801561000f575f5ffd5b50600436106101c6575f3560e01c806370480275116100fe578063a217fddf1161009e578063c4d252f51161006e578063c4d252f5146104a9578063d547741f146104bc578063f2fde38b146104cf578063f5b541a6146104e2575f5ffd5b8063a217fddf14610453578063a80f0a861461045a578063ac8a584a1461046d578063bfdc4a6114610480575f5ffd5b806375b238fc116100d957806375b238fc146103c35780638c172fa2146103ea57806391d148541461040a5780639870d7fe14610440575f5ffd5b80637048027514610394578063708faf69146103a757806371be2e4a146103ba575f5ffd5b80632f2ff15d116101695780634b0ecb30116101445780634b0ecb30146102e85780635e94dd961461035b5780636d70f7ae1461036e5780636ee50aa714610381575f5ffd5b80632f2ff15d146102af5780632f54bf6e146102c257806336568abe146102d5575f5ffd5b806322a9339f116101a457806322a9339f14610228578063248a9ca31461026757806324d7806c1461028957806328ee29361461029c575f5ffd5b806301ffc9a7146101ca57806304329c03146101f25780631785f53c14610213575b5f5ffd5b6101dd6101d8366004611cbc565b610509565b60405190151581526020015b60405180910390f35b610205610200366004611cfb565b6105a1565b6040519081526020016101e9565b610226610221366004611d2d565b610694565b005b61024f7f0000000000000000000000005af41fe438be6c20896d4bd5dc5f9d05d55a298f81565b6040516001600160a01b0390911681526020016101e9565b610205610275366004611cfb565b5f9081526020819052604090206001015490565b6101dd610297366004611d2d565b6106cc565b6102266102aa366004611d56565b61070b565b6102266102bd366004611d80565b610a2d565b6101dd6102d0366004611d2d565b610a57565b6102266102e3366004611d80565b610a96565b6103306102f6366004611cfb565b5f9081526001602052604090206002015460ff610100820481169262010000830482169263010000008104831692600160c01b9091041690565b60408051941515855292151560208501529015159183019190915260ff1660608201526080016101e9565b610226610369366004611de6565b610ae7565b6101dd61037c366004611d2d565b610e9a565b61020561038f366004611e77565b610f19565b6102266103a2366004611d2d565b610f5a565b6102056103b5366004611eea565b610f8e565b61020560025481565b6102057fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6103fd6103f8366004611cfb565b61137a565b6040516101e99190611f9f565b6101dd610418366004611d80565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61022661044e366004611d2d565b611588565b6102055f81565b6101dd610468366004611cfb565b6115dc565b61022661047b366004611d2d565b611629565b61049361048e366004611cfb565b61167d565b6040516101e99a9998979695949392919061205e565b6102266104b7366004611cfb565b6117f5565b6102266104ca366004611d80565b611a64565b6102266104dd366004611d2d565b611a88565b6102057f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061059b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f8181526001602052604081206002810154610100900460ff166105d8576040516321c4e35760e21b815260040160405180910390fd5b60028101546040517f852c6ae20000000000000000000000000000000000000000000000000000000081523060048201526024810185905260ff90911660448201527f0000000000000000000000005af41fe438be6c20896d4bd5dc5f9d05d55a298f6001600160a01b03169063852c6ae290606401602060405180830381865afa158015610669573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068d91906120dc565b9392505050565b5f61069e81611b1c565b6106c87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583611a64565b5050565b6001600160a01b0381165f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604081205460ff1661059b565b335f9081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604090205460ff161580156107775750335f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16155b1561079557604051631f0853c160e21b815260040160405180910390fd5b5f8281526001602052604090206002810154610100900460ff166107cc576040516321c4e35760e21b815260040160405180910390fd5b600281015462010000900460ff16156107f8576040516336ab81e160e11b815260040160405180910390fd5b60028101546301000000900460ff1615610825576040516354e3762560e01b815260040160405180910390fd5b600281015460ff908116908316111561086a576040517fc74a206d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028101805460ff848116600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff00ffff909216919091176201000017918290555f911667ffffffffffffffff8111156108c7576108c76120f3565b6040519080825280602002602001820160405280156108f0578160200160208202803683370190505b5090508260ff165f03610942575f5b600283015460ff908116908216101561093c576001828260ff168151811061092957610929612107565b60209081029190910101526001016108ff565b5061096f565b60018161094f828661212f565b60ff168151811061096257610962612107565b6020026020010181815250505b604051633124a62b60e21b81526001600160a01b037f0000000000000000000000005af41fe438be6c20896d4bd5dc5f9d05d55a298f169063c49298ac906109bd9087908590600401612148565b5f604051808303815f87803b1580156109d4575f5ffd5b505af11580156109e6573d5f5f3e3d5ffd5b50506040805160ff871681523360208201528793507ff294ef099f1e92c4c392d0e748047330ca09e5f7c752e2f305866a4ee101515e92500160405180910390a250505050565b5f82815260208190526040902060010154610a4781611b1c565b610a518383611b29565b50505050565b6001600160a01b0381165f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205460ff1661059b565b6001600160a01b0381163314610ad8576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae28282611bd0565b505050565b335f9081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604090205460ff16158015610b535750335f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16155b15610b7157604051631f0853c160e21b815260040160405180910390fd5b5f87815260016020526040902060020154610100900460ff1615610ba75760405162dc149f60e41b815260040160405180910390fd5b60028160ff161080610bbc575060088160ff16115b15610bda5760405163566f431760e11b815260040160405180910390fd5b428211610bfa57604051631da7447960e21b815260040160405180910390fd5b6040805161014081018252428152602080820185905260ff841682840152600160608301525f6080830181905260a083018190523360c084015260e08301528251601f8901829004820281018201909352878352909161010083019189908990819084018382808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f92018290525093909452505089815260016020818152604092839020855181559085015191810191909155908301516002820180546060860151608087015160a088015160c089015160e08a015160ff97881661ffff199096169590951761010094151585021763ffff00001916620100009315159390930263ff000000191692909217630100000091151591909102177fffffffffffffff000000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039092169190910260ff60c01b191617600160c01b94909216939093021790558301519091506003820190610d949082612223565b506101208201516004820190610daa9082612223565b50506002805491505f610dbc836122e2565b909155505060405163365bb9d560e21b81523060048201526024810188905260ff821660448201527f0000000000000000000000005af41fe438be6c20896d4bd5dc5f9d05d55a298f6001600160a01b03169063d96ee754906064015f604051808303815f87803b158015610e2f575f5ffd5b505af1158015610e41573d5f5f3e3d5ffd5b50505050336001600160a01b0316877fded2a7fa6450010db63d57ae15df2de88ec3c5b7b3b91a89a3d5e3dc0db38c3d888888888888604051610e8996959493929190612322565b60405180910390a350505050505050565b6001600160a01b0381165f9081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604081205460ff168061059b57506001600160a01b0382165f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff1661059b565b5f858585858542600254604051602001610f399796959493929190612365565b60405160208183030381529060405280519060200120905095945050505050565b5f610f6481611b1c565b6106c87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610a2d565b335f9081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604081205460ff16158015610ffa5750335f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16155b1561101857604051631f0853c160e21b815260040160405180910390fd5b8686868686426002546040516020016110379796959493929190612365565b60408051808303601f1901815291815281516020928301205f8181526001909352912060020154909150610100900460ff16156110865760405162dc149f60e41b815260040160405180910390fd5b60028260ff16108061109b575060088260ff16115b156110b95760405163566f431760e11b815260040160405180910390fd5b4283116110d957604051631da7447960e21b815260040160405180910390fd5b6040805161014081018252428152602080820186905260ff851682840152600160608301525f6080830181905260a083018190523360c084015260e08301528251601f8a0182900482028101820190935288835290916101008301918a908a90819084018382808284375f92019190915250505090825250604080516020601f8901819004810282018101909252878152918101919088908890819084018382808284375f92018290525093909452505083815260016020818152604092839020855181559085015191810191909155908301516002820180546060860151608087015160a088015160c089015160e08a015160ff97881661ffff199096169590951761010094151585021763ffff00001916620100009315159390930263ff000000191692909217630100000091151591909102177fffffffffffffff000000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039092169190910260ff60c01b191617600160c01b949092169390930217905583015190915060038201906112739082612223565b5061012082015160048201906112899082612223565b50506002805491505f61129b836122e2565b909155505060405163365bb9d560e21b81523060048201526024810182905260ff831660448201527f0000000000000000000000005af41fe438be6c20896d4bd5dc5f9d05d55a298f6001600160a01b03169063d96ee754906064015f604051808303815f87803b15801561130e575f5ffd5b505af1158015611320573d5f5f3e3d5ffd5b50505050336001600160a01b0316817fded2a7fa6450010db63d57ae15df2de88ec3c5b7b3b91a89a3d5e3dc0db38c3d89898989898960405161136896959493929190612322565b60405180910390a39695505050505050565b60408051610140810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e082019290925261010081018290526101208101919091525f82815260016020818152604092839020835161014081018552815481529281015491830191909152600281015460ff80821694840194909452610100808204851615156060850152620100008204851615156080850152630100000082048516151560a08501526001600160a01b0364010000000083041660c0850152600160c01b90910490931660e0830152600381018054929391929184019161147190612195565b80601f016020809104026020016040519081016040528092919081815260200182805461149d90612195565b80156114e85780601f106114bf576101008083540402835291602001916114e8565b820191905f5260205f20905b8154815290600101906020018083116114cb57829003601f168201915b5050505050815260200160048201805461150190612195565b80601f016020809104026020016040519081016040528092919081815260200182805461152d90612195565b80156115785780601f1061154f57610100808354040283529160200191611578565b820191905f5260205f20905b81548152906001019060200180831161155b57829003601f168201915b5050505050815250509050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756115b281611b1c565b610ae27f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92983611b29565b5f8181526001602052604081206002810154610100900460ff16801561160d5750600281015462010000900460ff16155b801561068d5750600201546301000000900460ff161592915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561165381611b1c565b610ae27f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92983611bd0565b600160208190525f91825260409091208054918101546002820154600383018054929360ff808416946101008504821694620100008104831694630100000082048416946001600160a01b0364010000000084041694600160c01b909304909216926116e890612195565b80601f016020809104026020016040519081016040528092919081815260200182805461171490612195565b801561175f5780601f106117365761010080835404028352916020019161175f565b820191905f5260205f20905b81548152906001019060200180831161174257829003601f168201915b50505050509080600401805461177490612195565b80601f01602080910402602001604051908101604052809291908181526020018280546117a090612195565b80156117eb5780601f106117c2576101008083540402835291602001916117eb565b820191905f5260205f20905b8154815290600101906020018083116117ce57829003601f168201915b505050505090508a565b335f9081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604090205460ff161580156118615750335f9081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff16155b1561187f57604051631f0853c160e21b815260040160405180910390fd5b5f8181526001602052604090206002810154610100900460ff166118b6576040516321c4e35760e21b815260040160405180910390fd5b600281015462010000900460ff16156118e2576040516336ab81e160e11b815260040160405180910390fd5b60028101546301000000900460ff161561190f576040516354e3762560e01b815260040160405180910390fd5b600281018054630101000063ffff0000198216179091555f9060ff1667ffffffffffffffff811115611943576119436120f3565b60405190808252806020026020018201604052801561196c578160200160208202803683370190505b5090505f5b600283015460ff90811690821610156119ae576001828260ff168151811061199b5761199b612107565b6020908102919091010152600101611971565b50604051633124a62b60e21b81526001600160a01b037f0000000000000000000000005af41fe438be6c20896d4bd5dc5f9d05d55a298f169063c49298ac906119fd9086908590600401612148565b5f604051808303815f87803b158015611a14575f5ffd5b505af1158015611a26573d5f5f3e3d5ffd5b50506040513381528592507f144a6f592b28f8e6ddc409e1bfeae9138e3bcc5f4982ba712e59903615a15ba1915060200160405180910390a2505050565b5f82815260208190526040902060010154611a7e81611b1c565b610a518383611bd0565b5f611a9281611b1c565b6001600160a01b038216611b07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4e6577206f776e65722063616e6e6f74206265207a65726f206164647265737360448201526064015b60405180910390fd5b611b115f33611bd0565b50610ae25f83611b29565b611b268133611c51565b50565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16611bc9575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611b813390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161059b565b505f61059b565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1615611bc9575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161059b565b5f828152602081815260408083206001600160a01b038516845290915290205460ff166106c8576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611afe565b5f60208284031215611ccc575f5ffd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461068d575f5ffd5b5f60208284031215611d0b575f5ffd5b5035919050565b80356001600160a01b0381168114611d28575f5ffd5b919050565b5f60208284031215611d3d575f5ffd5b61068d82611d12565b803560ff81168114611d28575f5ffd5b5f5f60408385031215611d67575f5ffd5b82359150611d7760208401611d46565b90509250929050565b5f5f60408385031215611d91575f5ffd5b82359150611d7760208401611d12565b5f5f83601f840112611db1575f5ffd5b50813567ffffffffffffffff811115611dc8575f5ffd5b602083019150836020828501011115611ddf575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a031215611dfc575f5ffd5b87359650602088013567ffffffffffffffff811115611e19575f5ffd5b611e258a828b01611da1565b909750955050604088013567ffffffffffffffff811115611e44575f5ffd5b611e508a828b01611da1565b90955093505060608801359150611e6960808901611d46565b905092959891949750929550565b5f5f5f5f5f60608688031215611e8b575f5ffd5b853567ffffffffffffffff811115611ea1575f5ffd5b611ead88828901611da1565b909650945050602086013567ffffffffffffffff811115611ecc575f5ffd5b611ed888828901611da1565b96999598509660400135949350505050565b5f5f5f5f5f5f60808789031215611eff575f5ffd5b863567ffffffffffffffff811115611f15575f5ffd5b611f2189828a01611da1565b909750955050602087013567ffffffffffffffff811115611f40575f5ffd5b611f4c89828a01611da1565b90955093505060408701359150611f6560608801611d46565b90509295509295509295565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6020815281516020820152602082015160408201525f6040830151611fc9606084018260ff169052565b506060830151801515608084015250608083015180151560a08401525060a083015180151560c08401525060c08301516001600160a01b03811660e08401525060e083015160ff811661010084015250610100830151610140610120840152612036610160840182611f71565b9050610120840151601f19848303016101408501526120558282611f71565b95945050505050565b8a815289602082015260ff891660408201528715156060820152861515608082015285151560a08201526001600160a01b03851660c082015260ff841660e08201526101406101008201525f6120b8610140830185611f71565b8281036101208401526120cb8185611f71565b9d9c50505050505050505050505050565b5f602082840312156120ec575f5ffd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff828116828216039081111561059b5761059b61211b565b5f60408201848352604060208401528084518083526060850191506020860192505f5b8181101561218957835183526020938401939092019160010161216b565b50909695505050505050565b600181811c908216806121a957607f821691505b6020821081036121c757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610ae25782821115610ae257805f5260205f20601f840160051c60208510156121f857505f5b90810190601f840160051c035f5b8181101561221b575f83820155600101612206565b505050505050565b815167ffffffffffffffff81111561223d5761223d6120f3565b6122518161224b8454612195565b846121cd565b6020601f821160018114612283575f831561226c5750848201515b5f19600385901b1c1916600184901b1784556122db565b5f84815260208120601f198516915b828110156122b25787850151825560209485019460019092019101612292565b50848210156122cf57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b5f600182016122f3576122f361211b565b5060010190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b608081525f61233560808301888a6122fa565b82810360208401526123488187896122fa565b91505083604083015260ff83166060830152979650505050505050565b868882375f8782015f815286888237909501938452506020830191909152604082015260600194935050505056fea2646970667358221220a7d3ad74e15a6308bf26a548df1a95acb17c8357fc885e0ffa1f66d84f5923ad64736f6c63430008210033

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

0000000000000000000000005af41fe438be6c20896d4bd5dc5f9d05d55a298f

-----Decoded View---------------
Arg [0] : _ctf (address): 0x5AF41FE438BE6C20896d4bD5Dc5F9D05D55a298f

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005af41fe438be6c20896d4bd5dc5f9d05d55a298f


Deployed Bytecode Sourcemap

9304:11058:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1996:204;;;;;;:::i;:::-;;:::i;:::-;;;612:14:1;;605:22;587:41;;575:2;560:18;1996:204:0;;;;;;;;18157:288;;;;;;:::i;:::-;;:::i;:::-;;;1016:25:1;;;1004:2;989:18;18157:288:0;870:177:1;6723:124:0;;;;;;:::i;:::-;;:::i;:::-;;9457:39;;;;;;;;-1:-1:-1;;;;;1634:55:1;;;1616:74;;1604:2;1589:18;9457:39:0;1444:252:1;2676:122:0;;;;;;:::i;:::-;2741:7;2768:12;;;;;;;;;;:22;;;;2676:122;6855:117;;;;;;:::i;:::-;;:::i;14591:934::-;;;;;;:::i;:::-;;:::i;2806:138::-;;;;;;:::i;:::-;;:::i;6980:125::-;;;;;;:::i;:::-;;:::i;3100:249::-;;;;;;:::i;:::-;;:::i;19246:419::-;;;;;;:::i;:::-;19320:16;19471:15;;;:6;:15;;;;;19519:21;;;;;;;;;;19555:18;;;;;;19588:19;;;;;;-1:-1:-1;;;19622:24:0;;;;;19246:419;;;;;2782:14:1;;2775:22;2757:41;;2841:14;;2834:22;2829:2;2814:18;;2807:50;2900:14;;2893:22;2873:18;;;2866:50;;;;2964:4;2952:17;2947:2;2932:18;;2925:45;2744:3;2729:19;19246:419:0;2548:428:1;11306:1032:0;;;;;;:::i;:::-;;:::i;17304:155::-;;;;;;:::i;:::-;;:::i;20000:359::-;;;;;;:::i;:::-;;:::i;6595:120::-;;;;;;:::i;:::-;;:::i;12776:1253::-;;;;;;:::i;:::-;;:::i;9834:25::-;;;;;;6118:60;;6155:23;6118:60;;17840:123;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2208:138::-;;;;;;:::i;:::-;2285:4;2309:12;;;;;;;;;;;-1:-1:-1;;;;;2309:29:0;;;;;;;;;;;;;;;2208:138;16754:123;;;;;;:::i;:::-;;:::i;1851:49::-;;1896:4;1851:49;;18627:256;;;;;;:::i;:::-;;:::i;17000:127::-;;;;;;:::i;:::-;;:::i;9719:49::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;15740:670::-;;;;;;:::i;:::-;;:::i;2952:140::-;;;;;;:::i;:::-;;:::i;6315:272::-;;;;;;:::i;:::-;;:::i;9586:66::-;;9626:26;9586:66;;1996:204;2081:4;2105:47;;;2120:32;2105:47;;:87;;-1:-1:-1;380:25:0;365:40;;;;2156:36;2098:94;1996:204;-1:-1:-1;;1996:204:0:o;18157:288::-;18221:7;18277:15;;;:6;:15;;;;;18308:21;;;;;;;;;18303:51;;18338:16;;-1:-1:-1;;;18338:16:0;;;;;;;;;;;18303:51;18415:21;;;;18372:65;;;;;18399:4;18372:65;;;9335:74:1;9425:18;;;9418:34;;;18415:21:0;;;;9468:18:1;;;9461:45;18372:3:0;-1:-1:-1;;;;;18372:18:0;;;;9308::1;;18372:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18365:72;18157:288;-1:-1:-1;;;18157:288:0:o;6723:124::-;1896:4;1952:16;1896:4;1952:10;:16::i;:::-;6808:31:::1;6155:23;6831:7;6808:10;:31::i;:::-;6723:124:::0;;:::o;6855:117::-;-1:-1:-1;;;;;2309:29:0;;6912:4;2309:29;;;:12;;:29;:12;:29;;;;;6936:28;2208:138;14591:934;10420:10;2285:4;2309:29;;;:12;;:29;:12;:29;;;;;10396:35;:71;;;;-1:-1:-1;10456:10:0;2285:4;2309:29;;;:12;;:29;:12;:29;;;;;10435:32;10396:71;10392:124;;;10491:13;;-1:-1:-1;;;10491:13:0;;;;;;;;;;;10392:124;14680:33:::1;14716:15:::0;;;:6:::1;:15;::::0;;;;14757:21:::1;::::0;::::1;::::0;::::1;::::0;::::1;;;14752:51;;14787:16;;-1:-1:-1::0;;;14787:16:0::1;;;;;;;;;;;14752:51;14818:18;::::0;::::1;::::0;;;::::1;;;14814:48;;;14845:17;;-1:-1:-1::0;;;14845:17:0::1;;;;;;;;;;;14814:48;14877:19;::::0;::::1;::::0;;;::::1;;;14873:50;;;14905:18;;-1:-1:-1::0;;;14905:18:0::1;;;;;;;;;;;14873:50;14955:21;::::0;::::1;::::0;::::1;::::0;;::::1;14938:38:::0;;::::1;;14934:67;;;14985:16;;;;;;;;;;;;;;14934:67;15014:18;::::0;::::1;:25:::0;;::::1;15050:41:::0;;::::1;-1:-1:-1::0;;;15050:41:0::1;::::0;;;;;;;;15014:25;15050:41;;;;;15014:25;;15145:21:::1;15131:36;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;15131:36:0::1;;15104:63;;15192:14;:19;;15210:1;15192:19:::0;15188:214:::1;;15233:7;15228:99;15250:21;::::0;::::1;::::0;::::1;::::0;;::::1;15246:25:::0;;::::1;;15228:99;;;15310:1;15297:7;15305:1;15297:10;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:14;15273:3:::1;;15228:99;;;;15188:214;;;15389:1;15359:7:::0;15367:18:::1;15389:1:::0;15367:14;:18:::1;:::i;:::-;15359:27;;;;;;;;;;:::i;:::-;;;;;;:31;;;::::0;::::1;15188:214;15414:35;::::0;-1:-1:-1;;;15414:35:0;;-1:-1:-1;;;;;15414:3:0::1;:17;::::0;::::1;::::0;:35:::1;::::0;15432:7;;15441;;15414:35:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;15467:50:0::1;::::0;;11316:4:1;11304:17;;11286:36;;15506:10:0::1;11353:2:1::0;11338:18;;11331:83;15481:7:0;;-1:-1:-1;15467:50:0::1;::::0;-1:-1:-1;11259:18:1;15467:50:0::1;;;;;;;14669:856;;14591:934:::0;;:::o;2806:138::-;2741:7;2768:12;;;;;;;;;;:22;;;1952:16;1963:4;1952:10;:16::i;:::-;2911:25:::1;2922:4;2928:7;2911:10;:25::i;:::-;;2806:138:::0;;;:::o;6980:125::-;-1:-1:-1;;;;;2309:29:0;;7037:4;2309:29;;;:12;;:29;:12;:29;;;;;7061:36;2208:138;3100:249;-1:-1:-1;;;;;3194:34:0;;533:10;3194:34;3190:104;;3252:30;;;;;;;;;;;;;;3190:104;3304:37;3316:4;3322:18;3304:11;:37::i;:::-;;3100:249;;:::o;11306:1032::-;10420:10;2285:4;2309:29;;;:12;;:29;:12;:29;;;;;10396:35;:71;;;;-1:-1:-1;10456:10:0;2285:4;2309:29;;;:12;;:29;:12;:29;;;;;10435:32;10396:71;10392:124;;;10491:13;;-1:-1:-1;;;10491:13:0;;;;;;;;;;;10392:124;11527:15:::1;::::0;;;:6:::1;:15;::::0;;;;:27:::1;;::::0;::::1;::::0;::::1;;;11523:60;;;11563:20;;-1:-1:-1::0;;;11563:20:0::1;;;;;;;;;;;11523:60;11612:1;11598:11;:15;;;:34;;;;11631:1;11617:11;:15;;;11598:34;11594:67;;;11641:20;;-1:-1:-1::0;;;11641:20:0::1;;;;;;;;;;;11594:67;11688:15;11676:8;:27;11672:57;;11712:17;;-1:-1:-1::0;;;11712:17:0::1;;;;;;;;;;;11672:57;11760:376;::::0;;::::1;::::0;::::1;::::0;;11802:15:::1;11760:376:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;11917:4:::1;11760:376:::0;;;;-1:-1:-1;11760:376:0;;;;;;;;;;;;12006:10:::1;11760:376:::0;;;;;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;12076:11;;;;;;11760:376;::::1;12076:11:::0;;;;11760:376;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;11760:376:0;;;-1:-1:-1;11760:376:0::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;12114:10;;;;;;11760:376;::::1;12114:10:::0;;;;11760:376;::::1;;::::0;::::1;::::0;;;-1:-1:-1;11760:376:0;;;;-1:-1:-1;;11742:15:0;;;:6:::1;:15;::::0;;;;;;;;:394;;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;11742:394:0;;;;;;;::::1;::::0;::::1;;::::0;::::1;;-1:-1:-1::0;;11742:394:0;;;::::1;;::::0;;;::::1;-1:-1:-1::0;;11742:394:0;;;;;;;::::1;;::::0;;;::::1;;::::0;;;-1:-1:-1;;;;;11742:394:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;11742:394:0;;-1:-1:-1;;;11742:394:0;;;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;:15;;-1:-1:-1;11742:394:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;11742:394:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;12149:10:0::1;:12:::0;;;-1:-1:-1;12149:10:0::1;:12;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;12174:57:0::1;::::0;-1:-1:-1;;;12174:57:0;;12203:4:::1;12174:57;::::0;::::1;9335:74:1::0;9425:18;;;9418:34;;;9500:4;9488:17;;9468:18;;;9461:45;12174:3:0::1;-1:-1:-1::0;;;;;12174:20:0::1;::::0;::::1;::::0;9308:18:1;;12174:57:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12271:10;-1:-1:-1::0;;;;;12249:81:0::1;12262:7;12249:81;12283:11;;12296:10;;12308:8;12318:11;12249:81;;;;;;;;;;;:::i;:::-;;;;;;;;11306:1032:::0;;;;;;;:::o;17304:155::-;-1:-1:-1;;;;;2309:29:0;;17364:4;2309:29;;;:12;;:29;:12;:29;;;;;17388:63;;;-1:-1:-1;;;;;;2309:29:0;;2285:4;2309:29;;;:12;;:29;:12;:29;;;;;17423:28;2208:138;20000:359;20157:7;20225:11;;20251:10;;20276:8;20299:15;20329:10;;20194:156;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20184:167;;;;;;20177:174;;20000:359;;;;;;;:::o;6595:120::-;1896:4;1952:16;1896:4;1952:10;:16::i;:::-;6677:30:::1;6155:23;6699:7;6677:9;:30::i;12776:1253::-:0;10420:10;12969:15;2309:29;;;:12;;:29;:12;:29;;;;;10396:35;:71;;;;-1:-1:-1;10456:10:0;2285:4;2309:29;;;:12;;:29;:12;:29;;;;;10435:32;10396:71;10392:124;;;10491:13;;-1:-1:-1;;;10491:13:0;;;;;;;;;;;10392:124;13048:11:::1;;13074:10;;13099:8;13122:15;13152:10;;13017:156;;;;;;;;;;;;;;:::i;:::-;;::::0;;;;::::1;-1:-1:-1::0;;13017:156:0;;;;;;13007:167;;13017:156:::1;13007:167:::0;;::::1;::::0;13191:15:::1;::::0;;;:6:::1;:15:::0;;;;;:27:::1;;::::0;13007:167;;-1:-1:-1;13191:27:0::1;::::0;::::1;;;13187:60;;;13227:20;;-1:-1:-1::0;;;13227:20:0::1;;;;;;;;;;;13187:60;13276:1;13262:11;:15;;;:34;;;;13295:1;13281:11;:15;;;13262:34;13258:67;;;13305:20;;-1:-1:-1::0;;;13305:20:0::1;;;;;;;;;;;13258:67;13352:15;13340:8;:27;13336:57;;13376:17;;-1:-1:-1::0;;;13376:17:0::1;;;;;;;;;;;13336:57;13424:376;::::0;;::::1;::::0;::::1;::::0;;13466:15:::1;13424:376:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;13581:4:::1;13424:376:::0;;;;-1:-1:-1;13424:376:0;;;;;;;;;;;;13670:10:::1;13424:376:::0;;;;;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;13740:11;;;;;;13424:376;::::1;13740:11:::0;;;;13424:376;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;13424:376:0;;;-1:-1:-1;13424:376:0::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;13778:10;;;;;;13424:376;::::1;13778:10:::0;;;;13424:376;::::1;;::::0;::::1;::::0;;;-1:-1:-1;13424:376:0;;;;-1:-1:-1;;13406:15:0;;;:6:::1;:15;::::0;;;;;;;;:394;;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;13406:394:0;;;;;;;::::1;::::0;::::1;;::::0;::::1;;-1:-1:-1::0;;13406:394:0;;;::::1;;::::0;;;::::1;-1:-1:-1::0;;13406:394:0;;;;;;;::::1;;::::0;;;::::1;;::::0;;;-1:-1:-1;;;;;13406:394:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;13406:394:0;;-1:-1:-1;;;13406:394:0;;;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;:15;;-1:-1:-1;13406:394:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;13406:394:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;13813:10:0::1;:12:::0;;;-1:-1:-1;13813:10:0::1;:12;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;13838:57:0::1;::::0;-1:-1:-1;;;13838:57:0;;13867:4:::1;13838:57;::::0;::::1;9335:74:1::0;9425:18;;;9418:34;;;9500:4;9488:17;;9468:18;;;9461:45;13838:3:0::1;-1:-1:-1::0;;;;;13838:20:0::1;::::0;::::1;::::0;9308:18:1;;13838:57:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13935:10;-1:-1:-1::0;;;;;13913:81:0::1;13926:7;13913:81;13947:11;;13960:10;;13972:8;13982:11;13913:81;;;;;;;;;;;:::i;:::-;;;;;;;;12776:1253:::0;;;;;;;;:::o;17840:123::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17940:15:0;;;;:6;:15;;;;;;;;;17933:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17933:22:0;;;;;;;;-1:-1:-1;;;17933:22:0;;;;;;;;;;;;;;;;;17940:15;;17933:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17840:123;;;:::o;16754:::-;6155:23;1952:16;1963:4;1952:10;:16::i;:::-;16834:35:::1;9626:26;16860:8;16834:10;:35::i;18627:256::-:0;18687:4;18740:15;;;:6;:15;;;;;18773:21;;;;;;;;;:61;;;;-1:-1:-1;18816:18:0;;;;;;;;;18815:19;18773:61;:102;;;;-1:-1:-1;18856:19:0;;;;;;;;18855:20;;18766:109;-1:-1:-1;;18627:256:0:o;17000:127::-;6155:23;1952:16;1963:4;1952:10;:16::i;:::-;17083:36:::1;9626:26;17110:8;17083:11;:36::i;9719:49::-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9719:49:0;;;;;-1:-1:-1;;;9719:49:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15740:670::-;10420:10;2285:4;2309:29;;;:12;;:29;:12;:29;;;;;10396:35;:71;;;;-1:-1:-1;10456:10:0;2285:4;2309:29;;;:12;;:29;:12;:29;;;;;10435:32;10396:71;10392:124;;;10491:13;;-1:-1:-1;;;10491:13:0;;;;;;;;;;;10392:124;15806:33:::1;15842:15:::0;;;:6:::1;:15;::::0;;;;15883:21:::1;::::0;::::1;::::0;::::1;::::0;::::1;;;15878:51;;15913:16;;-1:-1:-1::0;;;15913:16:0::1;;;;;;;;;;;15878:51;15944:18;::::0;::::1;::::0;;;::::1;;;15940:48;;;15971:17;;-1:-1:-1::0;;;15971:17:0::1;;;;;;;;;;;15940:48;16003:19;::::0;::::1;::::0;;;::::1;;;15999:50;;;16031:18;;-1:-1:-1::0;;;16031:18:0::1;;;;;;;;;;;15999:50;16062:19;::::0;::::1;:26:::0;;16099:25;-1:-1:-1;;16099:25:0;;;;;;16062:26;;::::1;16178:21:::0;16164:36:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;16164:36:0::1;-1:-1:-1::0;16137:63:0;-1:-1:-1;16216:7:0::1;16211:91;16233:21;::::0;::::1;::::0;::::1;::::0;;::::1;16229:25:::0;;::::1;;16211:91;;;16289:1;16276:7;16284:1;16276:10;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:14;16256:3:::1;;16211:91;;;-1:-1:-1::0;16314:35:0::1;::::0;-1:-1:-1;;;16314:35:0;;-1:-1:-1;;;;;16314:3:0::1;:17;::::0;::::1;::::0;:35:::1;::::0;16332:7;;16341;;16314:35:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;16367:35:0::1;::::0;16391:10:::1;1616:74:1::0;;16382:7:0;;-1:-1:-1;16367:35:0::1;::::0;-1:-1:-1;1604:2:1;1589:18;16367:35:0::1;;;;;;;15795:615;;15740:670:::0;:::o;2952:140::-;2741:7;2768:12;;;;;;;;;;:22;;;1952:16;1963:4;1952:10;:16::i;:::-;3058:26:::1;3070:4;3076:7;3058:11;:26::i;6315:272::-:0;1896:4;1952:16;1896:4;1952:10;:16::i;:::-;-1:-1:-1;;;;;6415:22:0;::::1;6407:67;;;::::0;::::1;::::0;;16206:2:1;6407:67:0::1;::::0;::::1;16188:21:1::0;;;16225:18;;;16218:30;16284:34;16264:18;;;16257:62;16336:18;;6407:67:0::1;;;;;;;;;6485:43;1896:4;6517:10;6485:11;:43::i;:::-;-1:-1:-1::0;6539:40:0::1;1896:4;6570:8:::0;6539:10:::1;:40::i;2354:105::-:0;2421:30;2432:4;533:10;2421;:30::i;:::-;2354:105;:::o;3616:324::-;3693:4;2309:12;;;;;;;;;;;-1:-1:-1;;;;;2309:29:0;;;;;;;;;;;;3710:223;;3754:6;:12;;;;;;;;;;;-1:-1:-1;;;;;3754:29:0;;;;;;;;;:36;;-1:-1:-1;;3754:36:0;3786:4;3754:36;;;3837:12;533:10;;453:98;3837:12;-1:-1:-1;;;;;3810:40:0;3828:7;-1:-1:-1;;;;;3810:40:0;3822:4;3810:40;;;;;;;;;;-1:-1:-1;3872:4:0;3865:11;;3710:223;-1:-1:-1;3916:5:0;3909:12;;3948:325;4026:4;2309:12;;;;;;;;;;;-1:-1:-1;;;;;2309:29:0;;;;;;;;;;;;4043:223;;;4118:5;4086:12;;;;;;;;;;;-1:-1:-1;;;;;4086:29:0;;;;;;;;;;:37;;-1:-1:-1;;4086:37:0;;;4143:40;533:10;;4086:12;;4143:40;;4118:5;4143:40;-1:-1:-1;4205:4:0;4198:11;;2467:201;2285:4;2309:12;;;;;;;;;;;-1:-1:-1;;;;;2309:29:0;;;;;;;;;;;;2551:110;;2602:47;;;;;-1:-1:-1;;;;;16557:55:1;;2602:47:0;;;16539:74:1;16629:18;;;16622:34;;;16512:18;;2602:47:0;16365:297:1;14:332;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;639:226;698:6;751:2;739:9;730:7;726:23;722:32;719:52;;;767:1;764;757:12;719:52;-1:-1:-1;812:23:1;;639:226;-1:-1:-1;639:226:1:o;1052:196::-;1120:20;;-1:-1:-1;;;;;1169:54:1;;1159:65;;1149:93;;1238:1;1235;1228:12;1149:93;1052:196;;;:::o;1253:186::-;1312:6;1365:2;1353:9;1344:7;1340:23;1336:32;1333:52;;;1381:1;1378;1371:12;1333:52;1404:29;1423:9;1404:29;:::i;1701:156::-;1767:20;;1827:4;1816:16;;1806:27;;1796:55;;1847:1;1844;1837:12;1862:296;1928:6;1936;1989:2;1977:9;1968:7;1964:23;1960:32;1957:52;;;2005:1;2002;1995:12;1957:52;2050:23;;;-1:-1:-1;2116:36:1;2148:2;2133:18;;2116:36;:::i;:::-;2106:46;;1862:296;;;;;:::o;2163:300::-;2231:6;2239;2292:2;2280:9;2271:7;2267:23;2263:32;2260:52;;;2308:1;2305;2298:12;2260:52;2353:23;;;-1:-1:-1;2419:38:1;2453:2;2438:18;;2419:38;:::i;2981:348::-;3033:8;3043:6;3097:3;3090:4;3082:6;3078:17;3074:27;3064:55;;3115:1;3112;3105:12;3064:55;-1:-1:-1;3138:20:1;;3181:18;3170:30;;3167:50;;;3213:1;3210;3203:12;3167:50;3250:4;3242:6;3238:17;3226:29;;3302:3;3295:4;3286:6;3278;3274:19;3270:30;3267:39;3264:59;;;3319:1;3316;3309:12;3264:59;2981:348;;;;;:::o;3334:1022::-;3451:6;3459;3467;3475;3483;3491;3499;3552:3;3540:9;3531:7;3527:23;3523:33;3520:53;;;3569:1;3566;3559:12;3520:53;3614:23;;;-1:-1:-1;3712:2:1;3697:18;;3684:32;3739:18;3728:30;;3725:50;;;3771:1;3768;3761:12;3725:50;3810:59;3861:7;3852:6;3841:9;3837:22;3810:59;:::i;:::-;3888:8;;-1:-1:-1;3784:85:1;-1:-1:-1;;3976:2:1;3961:18;;3948:32;4005:18;3992:32;;3989:52;;;4037:1;4034;4027:12;3989:52;4076:61;4129:7;4118:8;4107:9;4103:24;4076:61;:::i;:::-;4156:8;;-1:-1:-1;4050:87:1;-1:-1:-1;;4264:2:1;4249:18;;4236:32;;-1:-1:-1;4313:37:1;4345:3;4330:19;;4313:37;:::i;:::-;4303:47;;3334:1022;;;;;;;;;;:::o;4361:830::-;4462:6;4470;4478;4486;4494;4547:2;4535:9;4526:7;4522:23;4518:32;4515:52;;;4563:1;4560;4553:12;4515:52;4603:9;4590:23;4636:18;4628:6;4625:30;4622:50;;;4668:1;4665;4658:12;4622:50;4707:59;4758:7;4749:6;4738:9;4734:22;4707:59;:::i;:::-;4785:8;;-1:-1:-1;4681:85:1;-1:-1:-1;;4873:2:1;4858:18;;4845:32;4902:18;4889:32;;4886:52;;;4934:1;4931;4924:12;4886:52;4973:61;5026:7;5015:8;5004:9;5000:24;4973:61;:::i;:::-;4361:830;;;;-1:-1:-1;5053:8:1;5157:2;5142:18;5129:32;;4361:830;-1:-1:-1;;;;4361:830:1:o;5196:901::-;5304:6;5312;5320;5328;5336;5344;5397:3;5385:9;5376:7;5372:23;5368:33;5365:53;;;5414:1;5411;5404:12;5365:53;5454:9;5441:23;5487:18;5479:6;5476:30;5473:50;;;5519:1;5516;5509:12;5473:50;5558:59;5609:7;5600:6;5589:9;5585:22;5558:59;:::i;:::-;5636:8;;-1:-1:-1;5532:85:1;-1:-1:-1;;5724:2:1;5709:18;;5696:32;5753:18;5740:32;;5737:52;;;5785:1;5782;5775:12;5737:52;5824:61;5877:7;5866:8;5855:9;5851:24;5824:61;:::i;:::-;5904:8;;-1:-1:-1;5798:87:1;-1:-1:-1;;6008:2:1;5993:18;;5980:32;;-1:-1:-1;6055:36:1;6087:2;6072:18;;6055:36;:::i;:::-;6045:46;;5196:901;;;;;;;;:::o;6416:289::-;6458:3;6496:5;6490:12;6523:6;6518:3;6511:19;6579:6;6572:4;6565:5;6561:16;6554:4;6549:3;6545:14;6539:47;6631:1;6624:4;6615:6;6610:3;6606:16;6602:27;6595:38;6694:4;6687:2;6683:7;6678:2;6670:6;6666:15;6662:29;6657:3;6653:39;6649:50;6642:57;;;6416:289;;;;:::o;6710:1363::-;6903:2;6892:9;6885:21;6948:6;6942:13;6937:2;6926:9;6922:18;6915:41;7010:2;7002:6;6998:15;6992:22;6987:2;6976:9;6972:18;6965:50;6866:4;7062:2;7054:6;7050:15;7044:22;7075:50;7121:2;7110:9;7106:18;7092:12;2535:4;2524:16;2512:29;;2468:75;7075:50;-1:-1:-1;7174:2:1;7162:15;;7156:22;421:13;;414:21;7234:3;7219:19;;402:34;-1:-1:-1;7288:3:1;7276:16;;7270:23;421:13;;414:21;7349:3;7334:19;;402:34;-1:-1:-1;7403:3:1;7391:16;;7385:23;421:13;;414:21;7464:3;7449:19;;402:34;-1:-1:-1;7518:3:1;7506:16;;7500:23;-1:-1:-1;;;;;6350:54:1;;7582:3;7567:19;;6338:67;-1:-1:-1;7636:3:1;7624:16;;7618:23;2535:4;2524:16;;7698:3;7683:19;;2512:29;7650:53;7752:3;7744:6;7740:16;7734:23;7794:6;7788:3;7777:9;7773:19;7766:35;7824:54;7873:3;7862:9;7858:19;7842:14;7824:54;:::i;:::-;7810:68;;7927:3;7919:6;7915:16;7909:23;8004:2;8000:7;7988:9;7980:6;7976:22;7972:36;7963:6;7952:9;7948:22;7941:68;8026:41;8060:6;8044:14;8026:41;:::i;:::-;8018:49;6710:1363;-1:-1:-1;;;;;6710:1363:1:o;8078:1052::-;8473:6;8462:9;8455:25;8516:6;8511:2;8500:9;8496:18;8489:34;8571:4;8563:6;8559:17;8554:2;8543:9;8539:18;8532:45;8627:6;8620:14;8613:22;8608:2;8597:9;8593:18;8586:50;8687:6;8680:14;8673:22;8667:3;8656:9;8652:19;8645:51;8747:6;8740:14;8733:22;8727:3;8716:9;8712:19;8705:51;-1:-1:-1;;;;;8797:6:1;8793:55;8787:3;8776:9;8772:19;8765:84;8898:4;8890:6;8886:17;8880:3;8869:9;8865:19;8858:46;8941:3;8935;8924:9;8920:19;8913:32;8436:4;8968:46;9009:3;8998:9;8994:19;8986:6;8968:46;:::i;:::-;9063:9;9055:6;9051:22;9045:3;9034:9;9030:19;9023:51;9091:33;9117:6;9109;9091:33;:::i;:::-;9083:41;8078:1052;-1:-1:-1;;;;;;;;;;;;;8078:1052:1:o;9517:184::-;9587:6;9640:2;9628:9;9619:7;9615:23;9611:32;9608:52;;;9656:1;9653;9646:12;9608:52;-1:-1:-1;9679:16:1;;9517:184;-1:-1:-1;9517:184:1:o;9706:::-;-1:-1:-1;;;9755:1:1;9748:88;9855:4;9852:1;9845:15;9879:4;9876:1;9869:15;9895:184;-1:-1:-1;;;9944:1:1;9937:88;10044:4;10041:1;10034:15;10068:4;10065:1;10058:15;10084:184;-1:-1:-1;;;10133:1:1;10126:88;10233:4;10230:1;10223:15;10257:4;10254:1;10247:15;10273:151;10363:4;10356:12;;;10342;;;10338:31;;10381:14;;10378:40;;;10398:18;;:::i;10429:682::-;10599:4;10647:2;10636:9;10632:18;10677:6;10666:9;10659:25;10720:2;10715;10704:9;10700:18;10693:30;10743:6;10778;10772:13;10809:6;10801;10794:22;10847:2;10836:9;10832:18;10825:25;;10885:2;10877:6;10873:15;10859:29;;10906:1;10916:169;10930:6;10927:1;10924:13;10916:169;;;10991:13;;10979:26;;11034:2;11060:15;;;;11025:12;;;;10952:1;10945:9;10916:169;;;-1:-1:-1;11102:3:1;;10429:682;-1:-1:-1;;;;;;10429:682:1:o;11425:437::-;11504:1;11500:12;;;;11547;;;11568:61;;11622:4;11614:6;11610:17;11600:27;;11568:61;11675:2;11667:6;11664:14;11644:18;11641:38;11638:218;;-1:-1:-1;;;11709:1:1;11702:88;11813:4;11810:1;11803:15;11841:4;11838:1;11831:15;11638:218;;11425:437;;;:::o;11993:692::-;12095:2;12090:3;12087:11;12084:595;;;12132:10;12127:3;12124:19;12121:548;;;12184:5;12181:1;12174:16;12232:4;12229:1;12219:18;12297:2;12285:10;12281:19;12278:1;12274:27;12336:4;12324:10;12321:20;12318:45;;;-1:-1:-1;12360:1:1;12318:45;12399:23;;;;12469:2;12460:12;;12457:1;12453:20;12449:39;12514:1;12532:123;12546:2;12543:1;12540:9;12532:123;;;12635:1;12614:19;;;12607:30;12564:1;12557:9;12532:123;;;12536:3;;;11993:692;;;:::o;12861:1299::-;12987:3;12981:10;13014:18;13006:6;13003:30;13000:56;;;13036:18;;:::i;:::-;13065:97;13155:6;13115:38;13147:4;13141:11;13115:38;:::i;:::-;13109:4;13065:97;:::i;:::-;13211:4;13242:2;13231:14;;13259:1;13254:649;;;;13947:1;13964:6;13961:89;;;-1:-1:-1;14016:19:1;;;14010:26;13961:89;-1:-1:-1;;12818:1:1;12814:11;;;12810:24;12806:29;12796:40;12842:1;12838:11;;;12793:57;14063:81;;13224:930;;13254:649;11940:1;11933:14;;;11977:4;11964:18;;-1:-1:-1;;13290:20:1;;;13408:222;13422:7;13419:1;13416:14;13408:222;;;13504:19;;;13498:26;13483:42;;13611:4;13596:20;;;;13564:1;13552:14;;;;13438:12;13408:222;;;13412:3;13658:6;13649:7;13646:19;13643:201;;;13719:19;;;13713:26;-1:-1:-1;;13802:1:1;13798:14;;;13814:3;13794:24;13790:37;13786:42;13771:58;13756:74;;13643:201;;;13890:1;13881:6;13878:1;13874:14;13870:22;13864:4;13857:36;13224:930;;;;12861:1299;;:::o;14165:135::-;14204:3;14225:17;;;14222:43;;14245:18;;:::i;:::-;-1:-1:-1;14292:1:1;14281:13;;14165:135::o;14305:267::-;14394:6;14389:3;14382:19;14446:6;14439:5;14432:4;14427:3;14423:14;14410:43;-1:-1:-1;14498:1:1;14473:16;;;14491:4;14469:27;;;14462:38;;;;14554:2;14533:15;;;-1:-1:-1;;14529:29:1;14520:39;;;14516:50;;14305:267::o;14577:588::-;14846:3;14835:9;14828:22;14809:4;14873:63;14931:3;14920:9;14916:19;14908:6;14900;14873:63;:::i;:::-;14984:9;14976:6;14972:22;14967:2;14956:9;14952:18;14945:50;15012;15055:6;15047;15039;15012:50;:::i;:::-;15004:58;;;15098:6;15093:2;15082:9;15078:18;15071:34;15153:4;15145:6;15141:17;15136:2;15125:9;15121:18;15114:45;14577:588;;;;;;;;;:::o;15170:598::-;15497:6;15489;15484:3;15471:33;15453:3;15532:6;15527:3;15523:16;15559:1;15555:2;15548:13;15595:6;15587;15583:2;15570:32;15621:15;;;15645:18;;;-1:-1:-1;15687:2:1;15679:11;;15672:27;;;;15723:2;15715:11;;15708:27;15759:2;15751:11;;15170:598;-1:-1:-1;;;;15170:598:1:o

Swarm Source

ipfs://a7d3ad74e15a6308bf26a548df1a95acb17c8357fc885e0ffa1f66d84f5923ad

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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.