def_merge_values(self,values:Iterable[Tuple[Any,Any]],merged_size:int,**kwargs):values_set={vforv,_invalues}ifself._phi_makerisnotNone:phi_var=self._phi_maker(values_set)ifphi_varisnotNone:return{phi_var}# try to merge it in the traditional wayhas_top=any(self._is_top_func(v)forvinvalues_set)ifhas_toporlen(values_set)>self._element_limit:ifhas_top:ret_val=self._top_func(merged_size*self.state.arch.byte_width)else:# strip annotations from each value and see how many raw values there are in total# We have to use cache_key to determine uniqueness here, because if __hash__ collides,# python implicitly calls __eq__ to determine if the two objects are actually the same# and that just results in a new AST for a BV. Python then tries to convert that AST to a bool# which fails with the safeguard in claripy.ast.bool.Bool.__bool__.stripped_values_set={v._apply_to_annotations(lambdaalist:None).cache_keyforvinvalues_set}iflen(stripped_values_set)>1:ret_val=self._top_func(merged_size*self.state.arch.byte_width)else:# Get the AST back from the cache_keyret_val=next(iter(stripped_values_set)).ast# migrate annotationsannotations=[]annotations_set=set()forvinvalues_set:forannoinv.annotations:ifannonotinannotations_set:annotations.append(anno)annotations_set.add(anno)ifannotations:annotations=sorted(annotations,key=str)ret_val=ret_val.annotate(*annotations[:self._annotation_limit])merged_val={ret_val}else:merged_val=values_setreturnmerged_val