// Code generated by gocode.Generate; DO NOT EDIT.

package filetypes

import (
	"fmt"

	"cuelang.org/go/cue"
	"cuelang.org/go/encoding/gocode/gocodec"
)

var cuegenCodec, cuegenInstance = func() (*gocodec.Codec, *cue.Instance) {
	var r *cue.Runtime
	r = &cue.Runtime{}
	instances, err := r.Unmarshal(cuegenInstanceData)
	if err != nil {
		panic(err)
	}
	if len(instances) != 1 {
		panic("expected encoding of exactly one instance")
	}
	return gocodec.New(r, nil), instances[0]
}()

// cuegenMake is called in the init phase to initialize CUE values for
// validation functions.
func cuegenMake(name string, x interface{}) cue.Value {
	f, err := cuegenInstance.LookupField(name)
	if err != nil {
		panic(fmt.Errorf("could not find type %q in instance", name))
	}
	v := f.Value
	if x != nil {
		w, err := cuegenCodec.ExtractType(x)
		if err != nil {
			panic(err)
		}
		v = v.Unify(w)
	}
	return v
}

// Data size: 1131 bytes.
var cuegenInstanceData = []byte("\x01\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xd4W_\x8b\xe4D\x10O\u03eeb7\xa7\xe8\a\x10b\x16\x8es\xc0y\x15\x06\x8e}9\x0f\xeeE\xc4\xd7\xe5Xz\x93N6^&\x1d\x92\x8e\xec\xe2\u0383z\x9e~Y\xbf\u008dTW\xffIw2w\xee\u0081\xce\xcbn~\xd5\xf5\xbf\xaa\xbb\xea\xd3\u00df+\xb2:\xfc\x95\x90\xc3oI\xf2\xed\xe1\xd7\x13B\x1e\xd5\xed\xa0x\x9b\x8bg\\q\xc0\xc9\t9\xfdQJEV\t9\xfd\x81\xabk\xf2(!\x1f=\xaf\x1b1\x90\u00db$I\xbe<\xfc\xb1\"\u4ccb\x97\xf9(6e\xdd\x18\xce7\t9\xbcN\x92'\x87\xdfO\b\xf9\xc4\xe3\xaf\x13\xb2\"\xa7\xdf\xf3\x9d\x00A\xa7\x1adI\x92\xbc\xfd\xe2c\xb0\x84\x90\x15!T\xddvb\xd8\xe4\xa3 o?\xff\xbb\xe3\xf9+^\x89\xf4j\xac\x9b\x82\xb13\u043dM\u007fa\x14\x84\xb6|'\xb6\xa9\xf9\r\xaa\xaf\u06caQ\xd1\u6ca8\xdb\xca\x11\u03be3\b\xa3u\xabD\xdf\xf5BqU\xcb\xf6|\x9b\x9e\xbd\b\x10FK\xd9\xef\xce\x1d+p?\x97\xfd\x8eQ\u016b\xe1\\+\xa6\x17\xa8\xe9\xe5\u05a9\u0733=sZ,\xf3WO\xb3\x8cE\xf2\x1d\x8b\x96:UcpP\xa3\xb5(q\xa3P\x9d\xf7'\x030cT\x1b\x89\xccY\xc1\x15\xcf\xc0\x02\n\xff!\a\x92'\xa4|\x143Y\xf9(\x908\xe4\xd7b\x17r\"\x84\xe4\x9f\x060;b\x06\u0413\x9bEz\x83\an\xf9nN\a\x10\u0255\x8c\x89\xf8\xcbrY\x80\x81Q\u02b6i\x06\xa0\v\x13\xa5\r\xd7\x12+\t\xf8^\xcb\xecz\xa9fb3\x8d\x1a\xa5=\xef\xae\x03\x8f5b\xe3XEa\xacL\x14e1\v\u30cc\xb5ec\xcc\xe5\xe3\xdcZ\xfc\xad1\xd0\xe9]z\xb9$\x1c\x18}\x16\xa6y\xbc\xa7 \u03ce\xe2d'Z\xde\xd5\x0f\x92ex3\xd3\x15\xcfD\xc9\xc7FmS\u0779\xe9\xe3\xb0u\xd7\xd97 \xc8\x04d\x8f\xed\xfd\xa2-1\x1eX\xd1\xf6\xb7V\xfd(\u04bb\xb4\xe4\xcd \x18\xedE)z\xd1\xe6b\xd8\u0389\xf9m\xde a\x81\xb3\x10e\xdd\xd6`.\x9c\xb8\x92\xb2\x01\x8f\xe1\x9b7\u0202X.\xdbA\xf5\xbcn\x95?\xf7J\x88\u03b84l\rV\xb7\xb9\xdcu\x8dP\xfa.2\u062e\x93\xbd\xb2\x16 6\xa8^p\xd7\xf4\x88\x152\x1f\xbc\x8b\x88q\xa5\xfa\xfajT\xe8\x00b:0l\xcfv\xb2\x10XLu\u06cd\xe6\x86\xf0A\xd6E\xe6\x13\xb6\xd6]n2E7\x9b\r\xd6\x1c\r\xc3L\x03+\xa2`\xd1\xc0\x9c\x19\xd1\u02f4Zm\xa9\xbb;\x87\xd25t\u04b0\xc1\n\xb3\xd6\xec-\u07cd\x12\xed\x80\xc9\xd0\u01f3\x8d\xae/\xcb\x1c\x17\xd8\x1a\xcb>\x10\x83e\x05\xac\xfaby \xeb=9u\x81#\xbb\xb8\x81l\xbf7\x19\u04fe\xf9\x97\xd90\xf1^/fcF\xbcO6\xa0\xb9\x8e\xf9#\xc7N\xb9\xe2\xfa\xcfY'~\xe6\xcd\a(\xfc\x0f\xe7LY\xb7\xbc9\xe6M!\xca\xff\u007f\x17\xc3U\x1f\xb2:F{\xeb\x19e\xceo?WL\xefE\fpz\xa7\x03\xceB\x9f\xac\xb9SW,\xe6\xabf\xa2\u008f\x1e\x81\x11\x90G#\x1e\xd9\xf4\xe3\x1f\x99\x161\x06\xe7#5~T\x8b|=r\\.Zu\xec\xf8\xbb\x87\x19:M\u0284\xcb\xcf*\xcbJ&\fL#\xfa\xf0\x05L\xe6O\xddx\xeb\n\xccJ\u0372mzi?\xe6s\xa3{\xa9\xed\x00\x99\u07a5\x99.~\xfd\x9f\x9d\xb1\xa2\a8\xae\xc6\xf0)~\x12\x90\xbfN\x1f\xc7\b\xa3\xd1C\x1d\xcb\v\x9f\xec\x98\x1a>\xde3j\xf0\x8c\xc7\xd4\xf0A\x8f\xae\b\x97\n\x1d\x80\xa50\x99\xd0\xcc\\^6\xfch\xfeP\xcbl\xa4\xf5\xc9\xc0\xb8C\x06`\x94\u017fz3\x88\x06,\xdbrAv\x96\xb3b\xd10\xf2\xef6<\x8c\xf4r\x84\xe3\xd8E\xb3\xb8^\xaa\\\x19\xd9!/\x8cL\xdc\xcc\xf1Z\xe4\xb73\x1c\xec\xc3A\xd296\x1d \x17c\xb0\x18\x82E\xaf\xe2\xf66\vc4\xf8@o\x99\xdf%\xf3CP\x9a\xc2\xfa\xa0\xbf\x98\x9fo\f\n_\u030d.1\n\xaf\x86GsH.\x8a\u0547\x9dX}\xb6)\x8c\xbe\x10n\x97au\xa3&\x92\xe1\xfe\x03\xb4\x92\xc6\x05\x8dV\x120\xbc\xa7\xac:\xfd\x057\x8e^\xe2\xdd\xf5\x12o\x05Y)\xe5\u01ac\x98\x93U\xd7n({\x16\x8eg\x0f\xb8\xbb\xfc\xcau\xa4\x9d\x8e/T\xe1\x18w\x84\xfd\xc8\x02\xf5\x1e^\x96$\xff\x04\x00\x00\xff\xff^\x83Y\u0756\x11\x00\x00")
