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

package filetypes

import (
	"fmt"

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

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: 1613 bytes.
var cuegenInstanceData = []byte("\x01\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xacW\xcbo\xd5F\x17\xb7\x93|\xd2g\x8bv\u0172\x95\x0eF\xaahD\x1d\xb1@\xa0+E\b\bT\u0654\xaa\xa2+\x84\xa2\xb9\xf6\xb1\xef\x14{\xc6\xf5\x8c!\x11\xb9\x8b\xb6\x94\xf6\xaf\xe6Vgf\xfc\xbc\x06\x926\xd9\xe4\xfa\xbc\xe6\x9c\u07dc\xd7|\xb1\xf9k\xc7\xdf\xd9\xfc\xed\xf9\x9b\xdf=\xef\xde\xe6\xb7]\u07ff\u0185\xd2L$x\xc44#\xba\xbf\xeb\xef\xfd$\xa5\xf6w<\u007f\xefG\xa6W\xfe5\xcf\xff\xdfS^\xa0\xf27\xef=\xcf\xfbz\xf3\xe7\x8e\xef\u007f\xf9\xe2e\xd2`\x9c\xf1\xc2i\xbe\xf7\xfc\xcd;\u03fb\xb5\xf9c\xd7\xf7\xff\xdf\xd3\xdfy\xfe\x8e\xbf\xf7\x03+\x91\f\xed\x19b\xe8y\u0787\xeb_\x91'\xbe\xbf\xe3\xfb\x81>\xabP\xc5I\x83\xfe\x87\xeb\xbb\x15K^\xb1\x1ca\xd9\xf0\"\r\u00c3\x03x\bt>$\xb2\xaeQUR\xa4\n\xb4\x04\x06\xdfK+\x14\x13;\x0eo\u04bf\x05\xbc\r\x03:^\xb0\x12\x17\xe0\xfe\x94\xae\xb9\xc8\xc3\x00E\"S.\xf2\x8eq\U000c98c4\x01\x17\x1a\xeb\xaaF\xcd4\x97\xe2\xc1\x02n\x1e\x8f(a\x90\u027a|\u0429\x92\xf6SY\x97a\xa0Y\xae\x1e\x98\x83\x83\x17\xf6\xa4\x97\x8b\xee\xc8u\xb86A\x1ca\u019aB\x03W\xa0W\b\xe4\"4\nS\xc8d\rJ\xa7\\\x00\x13)\xfd\x92\x8d\x8e\xe1\xf9\nA\xa1\xd6\\\xe4\nR\xacP\xa4dE\x8a^\xbb\x94)E\xed\f\x9b\xf3\r\x04\xc3\xf8\xf7\xa3\xef\"8o\x9dY\x0f\xe0<\x16\x99\x84\x143.P\xc1J\xbe\x01f\xadr\x05\x06%L\x8d?\x1d*\x98:\x84IqxX\xca4\xebA\xd9\xd7u\x83p\x0e\x19+\x14\x86A\x8d\x19\xd6(\x12T\x8bmfr\x96\x14\x961\xa3i\\\xe3\x04<I,\xa5,\xc2@V\xf4\xcd\n\xabbi\x89\x14J\u05cc\v\xdd\u02fdB\xac\x1c,j\xe1h\\$\xb2\xac\n\xd4&+\x1c\xad\xacd\xad[\x0f,M\xe9\x1aY\xd9:ei\xa9LT\x1f\xa2\xa51\xadk\xbel\xb4\r\xc0\xd0,\xbct-\x8a\xee\x8e\xee\xcd\xfa`\xee8\xe5\x99\xc1B\x83\xac\xb0f6\x12+\x1d\x87\a\a\xa4\xfa|\x85\nAcY\x15L\xa3\x02V\xa3\xb9\x00A\xb7\xa1%,\x11\x1a\xc13\x8et/\xc0\xb4\u0245ZJ\r2\x03\xbd\u228c$Rd<o\xec\tqh\x0e0\xf7\xc5E\xd5\xd84\tFI\x13\f\xcab?J\x1a\xa4\x8c9!z\x1c\xc7a\x10\xac\xc3 (P\xc3)\x1cZ\xf1!\x1c\x93[\vF\xb8L\x99di\x90C\xa7a\u007f\xb4r\xae$\re-U\x9a\x8aU\xb2\u00929gH\x17O5\neS\xc2HG\xf1/J\x8a\xc8}MJ\x98\xa2a\x8d\x96]8k\xabr\xc6\xca\xe2\xb2*\x97\xd3XS\xd9\axJ\xd9\xf5Y\xc0M\x04\x1fA\xfc\xe4\xce\x1c\xe6\x0e\xd5\xfdY\u0327\xcc)\xe6'w>\x83:\xd5s\x8f\xf9:\fdS\xe96q\xacW\xf7\xef^\xbd[\xf7\xef^\xd6/|M\x9d\xe0\u07e7\xf3\u0263\x87W\x1f\u01a3\x87\x9f\t#\xe3T\xf6\xc38R\xcc\xfeS\x18w\xef=\xbe\u007f\xe5\xa5i\xac^\xb2>\xdbQ\xf7\xa4-S(Y\xa5\xecX\xe9K\x97\x1a\x99k\x8c\x96U\xd5\xd4\x105\xa7>8\xa9\xf0\x93\xbe\ub784AD+BdH4r\xe9+\xec[\x80#\xd2WK\xa5\xa2\xed\xa9\x05\x91\x8b\u0509\x8f\xc9b\x9e\xecZ\x853B_a\xd7\r\xa6T}\xaa\aT\x8d\xa7\x9a\xa8\xb9\xb4DK\xcd%\u046aZj\u0679f\xbe\u0080\xda\xff\xb3\xa3g\v\xa0\xc3\x15\xfez\u06d0\"c\xa8U\xe8,WK\u01ed\x96Q\a\x91\xe1.\xb9\xa8\x96\u0760o\xb7\x1b\xe0\"\u525d)\x16t\xbaA\xa6\xcd`\xaa\xb1\xaaQ\xa1\xa0]\x03\x18]G^\xb32\x0e\xbb\xddh\x017\x0e\xa3\u021a\x140\u078a E\x8du9\xd8\"\x12\xac5\u38b5\x03j%\x9b\"\xa5\xd95\xda%\x0e\x0e\u0a6c\xa1\xdd?o\x83\xa9\uf49dM$\x81\xd1\x1cUI\u0357\xd6?\x9bu\xb7\xe1\u034a'+\xe0Za\x91\x99\xb9\xc7\x04\xa9&R\xbc\xc6Z\u06c1\xc9\xe0\xf1\xcfO\x9cF\x1cN\x16\xbanG3k\xdcp\xafs\xf4\xac\xdd'\xbb\xc2\x18\xaeVQ&\xa5\xcd=\xbb\x19Z\x03\x91=,rW@wb\xab \x91eI\vU\xc1\x05Z\xb2\x96\xdb\xf9O\fs\xa45c\x8b\xceZ\xef,S\xa9\xe55\xabV#\xae\xa1Xf\xca\xf2\x11+ey\xcb\xd0l\xc2\xd1\u03a0\xa9\xeb\xb7\xe1\xb0\ub626c\x98\x14\xe5\x16\u05c5\xee\xd8\xc5,\xbf\xb0\x02T\"[|S[\x86m\xd2{\x8bo\x93\xde\bP\xaa\u06f4\x8f\x16\xd0u\xa4\xbe4\xac\x84I}*\x87^\x82HV\x80d\xb7\x8e b\u0521a\xae\xafG$\xdfr\xc9\xfeE\xb4\x1c\x93\xd6t\x11\x88\x88\xd8]`\x10\x14\xcc\x1c\x92S\x10\xae\u0553\xea\x95Xm_\x17\xce.m \x96\xbf\xa5n\x96\x93\x99\x03G\x8b\x87\xbb\xc4a\xd2m\x19\xea\x05.bNV(X\xc5?b\xcbq/`\u0216\x91\x997\xddk\xc5\xcd\x1d\xea]\xac(,3\x86c\r\xa9D\x05Bj\xe0\")\x9a\x14\xed[I\xd6%\x1c\x1f\u0161\x913\x0e\x99\x97\x1a\xbdI\x0f\xbb\xe7\u06a0\xc4\xd7f\xee\x9c\xcc\xd5`\xf7\xcai\x8b\x11\xce!2\x13\xdd\xfcjkp\xf2\x88\x98.\r\xe3\xa7\xc8t\x12\x8f\x1f>S\xee\xf8\ttk\xc4\xfe\x16\xbe\x99R\xc2`\xf2@\x9a\xda\x1b?\x95\xa6\xdc\xf1\x03i\xc2]S7\x14\xed\x0e6\\\t\xb6\xf0r\x18m\x9d7\x1fUo\u007f\xab\xcd\xf5\x17`\xb1&\u0529\xbd\xd9\xff\xa6t'\x0fR\xf2y\v\xf3y\xac?\xe9\xcd\x04\xc7y\xfc\xe6q\xeb\xe3\x19uf\x15\x9b\x18\x06\xb1\xdd8\xecS\xa8}\x1c\x0f\x95\x87\u075b\x16\xe2|\x8a\u02cdC\xd7\xec\xc7\u07b6n\x8d^\xe3]\\\xc3W\xf8l\x00\xb3\xb8t~\xad\xc3\xf1\x8e\xd8M\x92\xb6\b\xfa\b\xfa9\u04af\xf4\x93j\xb1E\x02\xe7\xed\xbd\r\x17\xda\u058f\xe1\x1e\xdb\x1b\xef\x87\xcc\x18\u0711\x1bT\x86\xd6\xf2xn\xcd\xfa\xd3\t\xf6\xc3cV\xae\xf7A\xcb\xf2S\x06{\xc1\xc1\u021b\x14\xce\xfc\x04\xec\a\xc7D|\xcb\xf4:\x1cw\u06cbw<\xbbd\xdbQ2>e:\x1b>\xea\xf2'\xa7\xc0E\xb5\u05a1\xe7\xfd\x13\x00\x00\xff\xffC\xa9X9\xac\x14\x00\x00")
