Deep merges dictionary object b into a.
        :param final:
        :param update:
        :param path: 
        :return:

def merge(final, update, path=None):
        """
        Deep merges dictionary object b into a.
        :param final:
        :param update:
        :param path: 
        :return:
        """
        if final is None:
            return None
        if update is None:
            return final
        if path is None:
            path = []

        for key in update:
            if key in final:
                if isinstance(final[key], dict) and isinstance(update[key], dict):
                    EBUtils.merge(final[key], update[key], path + [str(key)])
                elif final[key] == update[key]:
                    pass  # same leaf value
                else:
                    raise ValueError('Conflict at %s' % '.'.join(path + [str(key)]))
            else:
                final[key] = update[key]
        return final