def _override_act_descriptions(self, new_des, original_des):
        '''Merge and override properties of two dicts.

        Args:
            new_des: A dict presenting new properties for overriding
            origianl_des: A dict which will be intergrated and overridden

        Returns:
            A dict of combining properties from two dict.
        '''
        original_des = deep_copy(original_des)
        if new_des is None:
            return original_des
        for key in new_des.keys():
            original_des[key] = new_des[key]
        return original_des
    def da_out(self):
        '''Answer unprocessed system dialogue act so far.

        Returns:
            A list of DialogueAct presents answers of user
        '''
        das = []
        turn = {'sys_da': deep_copy(self.unprocessed_da_queue)}
        while(len(self.unprocessed_da_queue)>0):
            da = self.unprocessed_da_queue.pop(0)
            #das.append(self._get_answer_da(da))
            da_ret = self._get_answer_da(da)
            if len(da_ret)>0:
                das.append(da_ret)

        if len(das)==0:
            print '!!!!!!!!!!!!!!!!Empty acts return?????? change to default fixed slots value act!!!!'
            das = self._zero_act_return()
        #if len(das)==1:
        #    das = das[0]
        #print das[0]
        
        #post process user acts
        goal_des = self.metadata['goals'][self.goal_id]
        if 'act_post_process_fun' in goal_des and goal_des['act_post_process_fun'] is not None:
            das = goal_des['act_post_process_fun'](das)

        turn['user_da']= das
        self.turns.append(turn)

        self.last_user_da = das[0].dais
      
        das_str = ''
        #for da in das:
            #das_str += str(da)
        #self.system_logger.info('SimpleUserSimulator:da_out: %s'%das_str)
        return das