code: def WorkersDensity(dataTasks):
      
  
      start_time, end_time = getTimes(dataTasks)
      graphdata = []
  
      for name in getWorkersName(dataTasks):
          vals = dataTasks[name]
          if hasattr(vals, 'values'):
              # Data from worker
              workerdata = []
              print("Plotting density map for {}".format(name))
              # We only have 800 pixels
              try:
                  for graphtime in timeRange(start_time, end_time, DENSITY_MAP_TIME_AXIS_LENGTH):
                      for a in vals.values():
                          if not all((a['start_time'], a['end_time'])):
                              print("Invalid data:", a['start_time'], a['end_time'])
                          #print(a['start_time'], a['end_time'])
                      workerdata.append(sum([a['start_time'][0] <= float(graphtime) /
                          1000. <= a['end_time'][0] for a in vals.values()
                              if a['start_time'] and a['end_time']])
                      )
              except OverflowError:
                  print("Error processing {0} or {1}".format(start_time, end_time))
              graphdata.append(workerdata)
  
              if args.binarydensity:
                  # Normalize [...]
                  maxval = max(graphdata[-1])
                  if maxval > 1:
                      maxval = maxval - 1
                      graphdata[-1] = [x - maxval for x in graphdata[-1]]
      return graphdata
docs: Return the worker density data for the graph.