protected function extractCallbacks(&$args, &$list, &$path)
    {
        foreach ($args as $k => &$v) {
            if (is_array($v)) {
                if (sizeof($v) === 2) {
                    if (isset($v[0]) && is_object($v[0])) {
                        if (isset($v[1]) && is_string($v[1])) {
                            $id = ++$this->counter;
                            if ($this->persistentMode) {
                                $this->persistentCallbacks[$id] = $v;
                            } else {
                                $this->callbacks[$id] = $v;
                            }
                            $v = '';
                            $list[$id] = $path;
                            $list[$id][] = $k;
                            continue;
                        }
                    }
                }
                $path[] = $k;
                $this->extractCallbacks($v, $list, $path);
                array_pop($path);
            } elseif ($v instanceof \Closure) {
                $id = ++$this->counter;
                if ($this->persistentMode) {
                    $this->persistentCallbacks[$id] = $v;
                } else {
                    $this->callbacks[$id] = $v;
                }
                $v = '';
                $list[$id] = $path;
                $list[$id][] = $k;
            }
        }
    }