interface IAffiliateList {
    /**
     * @dev Sets the given address as an affiliate.
     *      If the address is not currently an affiliate, startTimestamp is required
     *      and endTimestamp is optional.
     *      If the address is already registered as an affiliate, both values are optional.
     * @param startTimestamp Timestamp when the address became/becomes an affiliate.
     * @param endTimestamp Timestamp when the address will no longer be an affiliate.
     */
    function set(address addr, uint startTimestamp, uint endTimestamp) external;

    /**
     * @dev Retrieves the start and end timestamps for the given address.
     *      It is sufficient to check the start value to determine if the address
     *      is an affiliate (start will be greater than zero).
     */
    function get(address addr) external view returns (uint start, uint end);

    /**
     * @dev Returns true if the address is, was, or will be an affiliate at the given time.
     */
    function inListAsOf(address addr, uint time) external view returns (bool);
}
function inListAsOf(address addr, uint time) external view returns (bool);

/**
 * @dev Returns true if the address is, was, or will be an affiliate at the given time.
 */