// 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: 1573 bytes.
var cuegenInstanceData = []byte("\x01\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xd4\x17[o\xdcD\xd7N\xf3I\x9fG\xfd\xbe\x17xE:u%T\xa2\xe2<\"\xad\x14U\x88\xb4(/\x14\xa1\xf2TU\u046c}\xbc;\u051e13\xe36Q\xb3\x0f@)\xfcU\xfeD\x17\x9d\x99\xf1u\xb7%\x91\x8a\x04y\xc9\xfa\xdc\xe6\xdc/\xff\xdb\xfev\x10\x1fl\u007f\x8f\xe2\xed\xcfQ\xf4\xc5\xf6\xa7[q|[Hc\xb9\xcc\xf1\x94[N\xf0\xf8V|\xf8\x9dR6>\x88\xe2\xc3o\xb9]\u01f7\xa3\xf8?\x8fD\x85&\u07be\x89\xa2\xe8\x93\xed\xaf\aq\xfc\xff\xa7\xcf\xf2\x16\xb3RT\x81\xf3M\x14o_G\u047d\xed/\xb7\xe2\xf8\xbf\x03\xfcu\x14\x1f\u0107\xdf\xf0\x1aI\u0421\x03\xb2(\x8a\xde~\xec4\x89\xe3\x838N\xece\x83&\xcb[\x8c\xdf~\xf4G\xc3\xf3\xe7|\x85\xb0lEU0v|\f_\x02\xbd\x0f\xb9\xd2\x1aM\xa3da\xc0*\xe0\xf0\xb5\xf2D\x19\xa13v\x97\xfe-\xe0\x15K\xe8y\xc9k\\@\xf83V\v\xb9b\t\xca\\\x15B\xaez\xc4\u0747\x01\xc2\x12!-\xeaF\xa3\xe5V(\xf9`\x01w\xcf&\x10\x96\x94J\xd7\x0fzV\xe2~\xa4t\xcd\x12\xcbW\xe6\x81{8y\xea_z\xb6\xe8\x9f\u0730\x8d3\xe2\x14K\xdeV\x16\x84\x01\xbbF \x15\xa15X@\xa94\x18[\b\t\\\x16\xf4K\xb56\x83'k\x04\x83\xd6\n\xb92P`\x83\xb2 )J\x0e\u0735*\xc8\xea \u063d\xef\\0\xb6\xff(\xfd<\x85\xabN\x99\xcd\u021dg\xb2TP`)$\x1aX\xab\x97\xc0\xbdTa\xc0y\t\v\xa7O\xef\x15,\x82\x87\x89q\xfcX\xc1-\x1f\x9crdu\x8bp\x05%\xaf\f\xb2Dc\x89\x1ae\x8ef\xb1\x8b\xcc/\xf3\xca#\xf6p:\xd5\x049\x9e(\x96JU,Q\r}\xf3\u02b3xX\xae\xa4\xb1\x9a\vi\a\xba\xe7\x88Mp\x8bY\x04\x98\x90\xb9\xaa\x9b\n\xad\u02ca\x00\xab\x1b\xa5m\xa7\x81\x87\x19\xab\x91\u05ddR\x1eV\xa8\xdc\f&z\x18\xb7V\x8bek\xbd\x01\x0e\xe6\xddKa1\x14;\x8a\x9b\xd7\xc1\u0178\x10\xa5\xf3\x85\x05\u0560\xe6\xde\x12O\x9d\xb1\xe3cb}\xb2F\x83`\xb1n*n\xd1\x00\xd7\xe8\x02 )\x1aV\xc1\x12\xa1\x95\xa2\x14Hq\x01n].h\xa5,\xa8\x12\xecZ\x18\x12\x92+Y\x8aU\xeb_\u0218{\xc0\xc5K\u0226\xf5i\x92L\x92&\x19\x95\xc5Q\x9a\xb7H\x19sN\xf0,\xcbX\x92lX\x92Th\xe1\x02N<\xf9\xd8\x1d\xb3\xa8%\x13\xbf\u0311$i\x94C\x17lx\xda\x04U\U00096c96*\xcdd&_c\u03432\u010b\x17\x16\xa5\xf1)\xe1\xa8\xd3\xec\a\xa3d\x1a\xbef%L\xd6\xf0\u05aa\u079c\x8dg\xb9\xe4uuS\x96\x9bql\xa8\xec\x13\xbc\xa0\xec\xfaK\x87;\vn\xe0\xf1\xe0\u04e3\xbd\x1e\x9f#o\xe8q\xaa\xe5\xc1\xdf\x1b\x96\xa8\xb6\xb1]\xd2\xfc34\xc2\x17T\xff\x1f6\x89\xffN\x03JAe>\xb6\xa0\xc0\xf2\xdf\\\x85\xdd@{\xd8\x15#\u053c1~x\f\x05J\xed*\xb4?\x8fj4\xb5=+\xa8\xdb\xcd\xea\xf8|\xe8\xad\xe7,Ii\x11H\x1d\x88\x06+}\xb1\xa1\xd0\x03\x90\xbe:(\x95\xe6\x00\xad\b\\\x15\x81|\n\x96\xfb\xc1\xa1!\x04!\xf4\xc5\xfa\x9a\x9fC\xed\x85\x1dA-^X\x82\xae\x94\az\xe8J\x11\xac\xd1\u02aa^5\xf7\xc5\x12j\xf2\x8fO\x1f/\x80\x1e7\xf8\xe3}\aJ\x9d\xa0\x8e\xa1\x97\xdc,\x03\xb6Y\xa6\xbd\x8b\x1cv)d\xb3\xec\xc7y\xb7\u00c0\x90\x85\xc8\xfd\xe4\xf0N\xa7\br\xeb\u018f\xc6F\xa3AI\x1b\x05p\n\xc7J\xf3:c\xfd\x06\xb4\x80;'i\xeaEJ\x98\xee>P\xa0E]\x8fv\x85\x1c\xb5\xe5Bvr\xc0\xacU[\x154\xa1&\x1b\xc3\xf11<R\x1a\xba-\xf3>\xb8z\xae\xf9\xe5\x8c\x128MK\x93k\xb1\xf4\xfa\xf9\xac\xbb\x0f/\xd7\"_\x83\xb0\x06\xab\xd2M7.\x895W\xf2\x05j\xeb\xc7\"\x87\xaf\xbe\u007f\x18826[\xdb\xfaM\xcc-k\xe3\xed-\xc0\xcbnk\xeckb\xbc@\xa5\xa5R>\xf7\xfc\xfe\xe7\x05\xa4\xfe\xb14\x84\x80b\xe2\xab WuMkS%$z\xb0U\xbb\xf9O\b\xf7\xa4\x17\xe3\x8b\xceK\xef%S\xa9\xad4o\xd6\x13\xac\x83xd\xc1W\x13T\xc1W\x1d\xc2\xf2\x19\xc6\x06\x81\xae\xae_\xb1q\xafq\xad\xc6!\xc9\xca\x1dl0=\xa0\xab\xbd\xf8\xca\x13P\x89\xec\xe0]m9\xb4K\xef\x1d\xbcOzG@\xa9\xee\xd3>]@\u07d1\x86\xd2\xf0\x14.\xf5\xa9\x1c\x06\n\x02y\x02\xa2\xddy\x82\x80i\xef\r\x17\xbe\xc1#\xab\x1d\x95\xfc_J+0q\xcd\xc7}J\xc0>\x80IRq\xf7\u020a\x8c\b\r\x9eX?\x88\xd4\xee\x86\bri\xcf\xf0\xf8\x1dv\xb7\x82\xecyp\xb2^\x84 \x8e\x93nG\xd0@p\x1dq\xaaA\xc9\x1b\xf1\x0eY\x01{\rA\xbe\x8c\u073c\xe9o\x920w\xa8w\xf1\xaa\xf2\xc8\f\xce,\x14\n\rHeA\u023cj\v\xf4\x17\x91\xd25\x9c\x9df\xcc\xd19\x85\xdc=F\x97\xe7I\u007f\x94\x8dJ|\xe3\xe6\xce\xf9\xbe\x1a\xeco\x99\xae\x18\xe1\nR7\xc7\u076f\xae\x06g\xa7\xc2|O\x98\x1e\x1c\xf3!<=o\xe6\xd8\xe9\xa1so\x82\xfe\f>\x9dCX2;\x83\xe6\xf2\xa6\a\xd1\x1c;=\x83f\xd8\ruC\xd9\xed\\\xe3\x95`\xc7_\xc1G;\xef\xed\xb7j\x90\xbf\xd3\xe6\x86\x00x_\x93\u05e9\xbd\xf9\xff\xaetgg'\xe9\xbc\xe3\xf3\xfd\xbe~\xaf63?\xee\xf7\xdf~\xbf\r\xf6L:\xb3\u025c\r#\xdb\xee\x9c\f)\u051d\xc0c\xe6q\xf7\xa6\x05x5\xf7\u02dd\x93\xd0\xec\xa7\xdavjMn\xee\u07ae\xf1\xad\xbd\u05c0\xbd~\xe9\xf5\u06b0\xe9\x8e\xd8O\x92\xae\b\x06\v\x8692\xac\xf0\xb3j\xf1E\x02W]\xdc\u01bbl\xa7\xc7x\x85\x1d\x84\x0fCf\xea\u0709\x1aT\x86^\xf2tn\xed\u0567'\x1c\x86\xc7^\xbaA\a\xab\xea\xf7\t\x1c\bG#oV8\xfb'\xe008f\xe4;\xa27l\xdam\xaf\xdf\xf1\xfc\x92\xedG\xc9\xf4\x95\xf9lx\xa7\xca\xef\x9d\x02\xd7\xe5\u06b0(\xfa3\x00\x00\xff\xff\xf3\xef>\x1d\x92\x14\x00\x00")
