'Takes one step in the analysis. Typically, this moves all active paths forward.
:return: itself, for chaining'

def tick(self):

    new_active = []
    for state in self.active:
        try:
            all_successors = self._step_path(state)
        except (SimUnsatError, claripy.UnsatError, PathUnreachableError):
            if self._keep_pruned:
                self.pruned.append(state)
            self._hierarchy.unreachable_state(state)
            self._hierarchy.simplify()
            continue
        except (AngrError, SimError, claripy.ClaripyError) as e:
            self.errored.append(ErrorRecord(state, e, sys.exc_info()[2]))
            continue
        except (TypeError, ValueError, ArithmeticError, MemoryError) as e:
            self.errored.append(ErrorRecord(state, e, sys.exc_info()[2]))
            continue
        if ((not all_successors.flat_successors) and (not all_successors.unconstrained_successors)):
            l.debug('State    %s    has    deadended.', state)
            self.suspend_path(state)
            self.deadended.append(state)
        else:
            if self._enable_veritesting:
                if (hasattr(self, '_find') and hasattr(self, '_avoid')):
                    boundaries = []
                    if (self._find is not None):
                        boundaries.extend(list(self._find))
                    if (self._avoid is not None):
                        boundaries.extend(list(self._avoid))
                    veritesting = self._project.analyses.Veritesting(state, boundaries=boundaries, **self._veritesting_options)
                else:
                    veritesting = self._project.analyses.Veritesting(state, **self._veritesting_options)
                if (veritesting.result and veritesting.final_manager):
                    pg = veritesting.final_manager
                    self.deadended.extend(pg.deadended)
                    self.errored.extend(pg.errored)
                    succ_list = (pg.successful + pg.deviated)
                    for suc in succ_list:
                        l.info('Veritesting    yields    a    new    IP:    0x%x', suc.addr)
                    successors = self._tick_path(state, successors=succ_list)
                else:
                    successors = self.tick_path(state, successors=all_successors.flat_successors)
            else:
                successors = self.tick_path(state, successors=all_successors.flat_successors)
            new_active.extend(successors)
        if (len(all_successors.unconstrained_successors) > 0):
            self.unconstrained.append(state)
    self.active = new_active
    return self
