sig   module type Mark =     sig       type t       type call_info       val is_bottom : PdgMarks.Mark.t -> bool       val merge : PdgMarks.Mark.t -> PdgMarks.Mark.t -> PdgMarks.Mark.t       val combine :         PdgMarks.Mark.t ->         PdgMarks.Mark.t -> PdgMarks.Mark.t * PdgMarks.Mark.t       val pretty : Format.formatter -> PdgMarks.Mark.t -> unit     end   type select_elem = private       SelNode of PdgTypes.Node.t * Locations.Zone.t option     | SelIn of Locations.Zone.t   val mk_select_node :     ?z_opt:Locations.Zone.t option -> PdgTypes.Node.t -> PdgMarks.select_elem   val mk_select_undef_zone : Locations.Zone.t -> PdgMarks.select_elem   type 'tm select = (PdgMarks.select_elem * 'tm) list   val add_to_select :     'tm PdgMarks.select -> PdgMarks.select_elem -> 'tm -> 'tm PdgMarks.select   val add_node_to_select :     'tm PdgMarks.select ->     PdgTypes.Node.t * Locations.Zone.t option -> 'tm -> 'tm PdgMarks.select   val add_undef_in_to_select :     'tm PdgMarks.select ->     Locations.Zone.t option -> 'tm -> 'tm PdgMarks.select   type 'tm pdg_select_info =       SelList of 'tm PdgMarks.select     | SelTopMarks of 'tm list   type 'tm pdg_select = (PdgTypes.Pdg.t * 'tm PdgMarks.pdg_select_info) list   type 'tm info_caller_inputs = (PdgIndex.Signature.in_key * 'tm) list   type 'tm info_called_outputs =       (Cil_types.stmt * (PdgIndex.Signature.out_key * 'tm) list) list   type 'tm info_inter =       'tm PdgMarks.info_caller_inputs * 'tm PdgMarks.info_called_outputs   module type Fct =     sig       type mark       type call_info       type fi =           (PdgMarks.Fct.mark, PdgMarks.Fct.call_info) PdgIndex.FctIndex.t       type t = PdgTypes.Pdg.t * PdgMarks.Fct.fi       val create : PdgTypes.Pdg.t -> PdgMarks.Fct.t       val get_idx : PdgMarks.Fct.t -> PdgMarks.Fct.fi       type mark_info_inter = PdgMarks.Fct.mark PdgMarks.info_inter       val empty_to_prop : PdgMarks.Fct.mark_info_inter       val mark_and_propagate :         PdgMarks.Fct.t ->         ?to_prop:PdgMarks.Fct.mark_info_inter ->         PdgMarks.Fct.mark PdgMarks.select -> PdgMarks.Fct.mark_info_inter     end   module F_Fct :     functor (M : Mark->       sig         type mark = M.t         type call_info = M.call_info         type fi = (mark, call_info) PdgIndex.FctIndex.t         type t = PdgTypes.Pdg.t * fi         val create : PdgTypes.Pdg.t -> t         val get_idx : t -> fi         type mark_info_inter = mark info_inter         val empty_to_prop : mark_info_inter         val mark_and_propagate :           t -> ?to_prop:mark_info_inter -> mark select -> mark_info_inter       end   type 't_mark m2m = PdgMarks.select_elem -> 't_mark -> 't_mark option   type 't_mark call_m2m =       Cil_types.stmt option -> PdgTypes.Pdg.t -> 't_mark PdgMarks.m2m   module type Proj =     sig       type t       type mark       type call_info       type fct =           (PdgMarks.Proj.mark, PdgMarks.Proj.call_info) PdgIndex.FctIndex.t       val empty : unit -> PdgMarks.Proj.t       val find_marks :         PdgMarks.Proj.t -> Cil_types.varinfo -> PdgMarks.Proj.fct option       val mark_and_propagate :         PdgMarks.Proj.t ->         PdgTypes.Pdg.t -> PdgMarks.Proj.mark PdgMarks.select -> unit     end   module type Config =     sig       module M : Mark       val mark_to_prop_to_caller_input : M.t PdgMarks.call_m2m       val mark_to_prop_to_called_output : M.t PdgMarks.call_m2m     end end