You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: main.go
    path of file: ./repos/kuma/app/cni/pkg/install
    
    the code of the file until where you have to start completion: package install

import (
	"bytes"
	"context"
	"os"
	"os/signal"
	"path"
	"path/filepath"
	"strings"
	"syscall"
	"time"

	"github.com/natefinch/atomic"
	"github.com/pkg/errors"
	"github.com/sethvargo/go-retry"
	"go.uber.org/multierr"

	kuma_log "github.com/kumahq/kuma/pkg/log"
	"github.com/kumahq/kuma/pkg/util/files"
)

const (
	kumaCniBinaryPath  = "/opt/cni/bin/kuma-cni"
	primaryBinDir      = "/host/opt/cni/bin"
	seconda
    
func revertConfig(mountedCniNetDir, cniConfName string, chainedCniPlugin bool) error {
	configPath := mountedCniNetDir + "/" + cniConfName

	if !files.FileExists(configPath) {
		log.Info("no need to revert config - file does not exist", "configPath", configPath)
		return nil
	}

	if chainedCniPlugin {
		contents, err := os.ReadFile(configPath)
		if err != nil {
			return errors.Wrap(err, "couldn't read cni conf file")
		}
		newContents, err := revertConfigContents(contents)
		if err != nil {
			return errors.Wrap(err, "could not revert config contents")
		}
		err = atomic.WriteFile(configPath, bytes.NewReader(newContents))
		if err != nil {
			return errors.Wrap(err, "could not write new conf")
		}
	} else {
		err := os.Remove(configPath)
		if err != nil {
			return errors.Wrap(err, "couldn't remove cni conf file")
		}
	}

	return nil
}