func MakeErr(err error, prev error) Error {
	return Error{
		Err:  err,
		Prev: prev,
		flag: getFlag(err) | getFlag(prev),
	}
}
MakeErr creates an Error with internal manipulations.
It's safe to construct Error without calling this function but not encouraged
package e4
import (
	"errors"
	"strings"
)
type Error struct {
	Err  error
	Prev error
	flag uint64
}
func (c Error) Is(target error) bool {
	return errors.Is(c.Err, target)
}
func (c Error) As(target interface{}) bool {
	return errors.As(c.Err, target)
}
func (c Error) Unwrap() error {
	return c.Prev
}
func (c Error) Error() string {
	var b strings.Builder
	if leveled, ok := c.Err.(ErrorLeveler); ok {
		if leveled.ErrorLevel() <= ErrorLevel {
			b.WriteString(c.Err.Error())
		}
	} else {
		b.WriteString(c.Err.Error())
	}
	if c.Prev != nil {
		prev := c.Prev.Error()
		if prev != "" {
			if b.Len() > 0 {
				b.WriteString("\n")
			}
			b.WriteString(prev)
		}
	}
	return b.String()
}