docs: def parseJSON(js):
          """
          {
              kv_type : "",
              type    : "",
              actors  : <Actors list>
                  [
                      {
                       actorName : <String>,
                       formula: <String>,
                       events: ["->b", "b->"],
                       trace: [],
                       speed: 1,2,3...
                      }
                  ]
          }
          :param json:
          :return:
          """
          decoded = json.JSONDecoder().decode(js)
          actors = decoded.get("actors")
          if actors is None:
              raise Exception("No actors found in the system !")
          s = System()
          for a in actors:
              # Getting actor info
              a_name = a.get("name")
              a_formula = a.get("formula")
              a_trace = a.get("trace")
              sa_events = a.get("events")
              a_events = []
              a_speed = 1 if a.get("speed") is None else int(a["speed"])
  
              # Parsing actor info
              for e in sa_events:
                  tmp = e.split("|")
                  tmp2 = []
                  for x in tmp:
                      tmp2.append(Actor.Event.parse(x))
                  a_events.append(tmp2)
              a_formula = eval(a_formula)
              a_trace = Trace.parse(a_trace)
  
              # Creating the actor
              actor = Actor(name=a_name, formula=a_formula, trace=a_trace, events=a_events, speed=a_speed)
  
              # Add actor to the system
              s.add_actors(actor)
          s.generate_monitors()
          return s