contract IAllocationToken {
    /**
    @dev fired on exchange contract's updation
    @param exchangeContract the address of exchange contract
     */
    event ExchangeContractUpdated(address exchangeContract);

    /**
    @dev fired on investment contract's updation
    @param investmentContract the address of investment contract
     */
    event InvestmentContractUpdated(address investmentContract);

    /**
    @dev updates exchange contract's address
    @param _exchangeContract the address of updated exchange contract
     */
    function updateExchangeContract(address _exchangeContract) external;

    /**
    @dev updates the investment contract's address
    @param _investmentContract the address of updated innvestment contract
     */
    function updateInvestmentContract(address _investmentContract) external;

    /**
    @notice Allows to mint new AT tokens
    @dev Only owner or exchange contract can call this function
    @param _holder The address to mint the tokens to
    @param _tokens The amount of tokens to mint
     */
    function mint(address _holder, uint256 _tokens) public;

    /**
    @notice Allows to burn AT tokens
    @dev Only Investment contract contract can call this function
    @param _address The address to burn the tokens from
    @param _value The amount of tokens to burn
    */
    function burn(address _address, uint256 _value) public;
}
/**
 @title IAllocationToken
 @notice This contract provides an interface for AllocationToken
 */
function updateExchangeContract(address _exchangeContract) external;

/**
 @dev updates exchange contract's address
 @param _exchangeContract the address of updated exchange contract
 */