func RegisterEmbeddedBox(name string, box *EmbeddedBox) {
	if _, exists := EmbeddedBoxes[name]; exists {
		panic(fmt.Sprintf("EmbeddedBox with name `%s` exists already", name))
	}
	EmbeddedBoxes[name] = box
}
RegisterEmbeddedBox registers an EmbeddedBox
package embedded
import (
	"fmt"
	"path/filepath"
	"strings"
	"time"
)
const (
	EmbedTypeGo   = 0
	EmbedTypeSyso = 1
)
type EmbeddedBox struct {
	Name      string                    
	Time      time.Time                 
	EmbedType int                       
	Files     map[string]*EmbeddedFile  
	Dirs      map[string]*EmbeddedDir   
}
func (e *EmbeddedBox) Link() {
	for path, ed := range e.Dirs {
		fmt.Println(path)
		ed.ChildDirs = make([]*EmbeddedDir, 0)
		ed.ChildFiles = make([]*EmbeddedFile, 0)
	}
	for path, ed := range e.Dirs {
		parentDirpath, _ := filepath.Split(path)
		if strings.HasSuffix(parentDirpath, "/") {
			parentDirpath = parentDirpath[:len(parentDirpath)-1]
		}
		parentDir := e.Dirs[parentDirpath]
		if parentDir == nil {
			panic("parentDir `" + parentDirpath + "` is missing in embedded box")
		}
		parentDir.ChildDirs = append(parentDir.ChildDirs, ed)
	}
	for path, ef := range e.Files {
		dirpath, _ := filepath.Split(path)
		if strings.HasSuffix(dirpath, "/") {
			dirpath = dirpath[:len(dirpath)-1]
		}
		dir := e.Dirs[dirpath]
		if dir == nil {
			panic("dir `" + dirpath + "` is missing in embedded box")
		}
		dir.ChildFiles = append(dir.ChildFiles, ef)
	}
}
type EmbeddedDir struct {
	Filename   string
	DirModTime time.Time
	ChildDirs  []*EmbeddedDir   
	ChildFiles []*EmbeddedFile  
}
type EmbeddedFile struct {
	Filename    string  
	FileModTime time.Time
	Content     string
}
var EmbeddedBoxes = make(map[string]*EmbeddedBox)