protected function getResolvedPaths()
    {
        if (null === $this->resolvedPaths) {
            $this->resolveDirectories();
            // Collect all path properties and put them into $paths associatively using propertyName => propertyValue
            $paths = [];
            collect(array_keys(get_class_vars(get_class($this))))->filter(function ($propertyName) {
                return ends_with($propertyName, 'Path');
            })->each(function ($propertyName) use (&$paths) {
                $paths[ $propertyName ] = $this->{$propertyName};
            });

            // Use the paths to generate parsed paths, resolving all the {vars}
            $this->resolvedPaths = collect($paths)->transform(function ($path) use ($paths) {
                return Util::template($path, $paths);
            })->transform(function ($path, $propertyName) {
                return ends_with($propertyName, 'DestinationPath') ? base_path($path) : path_join($this->rootDir, $path);
            })->toArray();
        }

        return $this->resolvedPaths;
    }