deep_copy.go
func DeepCopy(o interface{}) (r interface{}) {
	if o == nil {
		return nil
	}
	src := reflect.ValueOf(o)
	dst := reflect.New(src.Type()).Elem()
	deepCopy(src, dst)
	return dst.Interface()
}
func DeepCopy(o interface{}) (r interface{}) {
	if o == nil {
		return nil
	}
	src := reflect.ValueOf(o)
	dst := reflect.New(src.Type()).Elem()
	deepCopy(src, dst)
	return dst.Interface()
}
//----------------------------------------
// DeepCopy
// Deeply copies an object.
// If anything implements `.DeepCopy() <any>` along the way,
// the result of that function will be used.
// Otherwise, if it implements `.MarshalAmino() (<any>, error)` and
// `.UnmarshalAmino(<any>) error`, the pair will be used to copy.
// If .MarshalAmino() or .UnmarshalAmino() returns an error, this
// function will panic.