// Code generated by go-bindata. DO NOT EDIT.
// sources:
// resources/AWSWhitelist.json (11.191kB)
// resources/DefaultSamplingRules.json (97B)
// resources/ExampleSamplingRules.json (609B)

package resources

import (
	"bytes"
	"compress/gzip"
	"crypto/sha256"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"path/filepath"
	"strings"
	"time"
)

func bindataRead(data []byte, name string) ([]byte, error) {
	gz, err := gzip.NewReader(bytes.NewBuffer(data))
	if err != nil {
		return nil, fmt.Errorf("read %q: %v", name, err)
	}

	var buf bytes.Buffer
	_, err = io.Copy(&buf, gz)
	clErr := gz.Close()

	if err != nil {
		return nil, fmt.Errorf("read %q: %v", name, err)
	}
	if clErr != nil {
		return nil, err
	}

	return buf.Bytes(), nil
}

type asset struct {
	bytes  []byte
	info   os.FileInfo
	digest [sha256.Size]byte
}

type bindataFileInfo struct {
	name    string
	size    int64
	mode    os.FileMode
	modTime time.Time
}

func (fi bindataFileInfo) Name() string {
	return fi.name
}
func (fi bindataFileInfo) Size() int64 {
	return fi.size
}
func (fi bindataFileInfo) Mode() os.FileMode {
	return fi.mode
}
func (fi bindataFileInfo) ModTime() time.Time {
	return fi.modTime
}
func (fi bindataFileInfo) IsDir() bool {
	return false
}
func (fi bindataFileInfo) Sys() interface{} {
	return nil
}

var _resourcesAwswhitelistJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x59\x4b\x73\xe2\x38\x10\xbe\xf3\x2b\x5c\x3e\xa7\xf6\xb2\xb7\xdc\x18\xf2\xa8\xd4\x92\x09\x09\xcc\xe6\xb0\xb5\x45\xc9\x52\xe3\x68\x62\x4b\x8e\x1e\x4c\xa8\xad\xfc\xf7\x2d\x49\x86\x80\x31\xb6\x90\x43\x86\x64\xe6\x30\x35\xc1\x6a\xab\xbf\xfe\xfa\xa1\x6e\xf9\xbf\x5e\x14\xc5\x12\xc4\x9c\x62\x90\xf1\x69\x64\x7e\x47\x51\x4c\x16\x0c\xe5\x9c\x24\xab\x27\x51\x14\xf3\x02\x04\x52\x94\x33\xb9\xf6\x34\x8a\xe2\x2f\x48\xe1\x87\x4b\x50\x57\x0a\xf2\x8d\x95\x28\x8a\x05\x3c\x69\x90\x6a\x4a\x40\x62\x41\x0b\xc5\x85\xac\x88\x44\x51\x7c\xe7\x84\xcc\xfb\xdb\xab\x51\x14\xe7\xa8\x88\x4f\x23\x25\x34\x9c\x54\x97\x52\x50\xd3\x47\x58\xc8\x5d\xeb\x02\x18\xca\x61\xaa\x78\x7c\x1a\xc5\x0a\x25\x19\x4c\xcd\x03\x19\x6f\x08\xbe\xac\xfd\x7a\x39\xd9\xc4\x2f\x0b\xce\x24\x4c\x0b\x24\x50\x0e\x0a\x2c\xfe\x7f\x36\xf1\x0f\x38\x93\x3a\x07\x32\x40\x05\xc2\x54\x2d\xd6\x37\xff\xb7\x57\xb3\xb1\xa3\xec\x5e\x50\x05\xbf\x49\x5b\x92\xb6\x09\x23\x36\x86\x0d\x78\x96\x01\x36\x21\x77\x0d\x4a\x50\x2c\xdb\x99\x1d\x08\x40\x0a\x26\x06\xf4\x2e\x5a\x9b\x50\x5d\x66\x3c\x41\xd9\x18\x30\x67\x04\x89\xc5\x15\x23\xf0\x0c\xb2\x8a\x6d\xc8\x71\xbb\xd0\x48\xf0\x39\x95\x94\x33\x20\x93\x07\xc1\x75\xfa\x50\x68\x55\x15\xb2\x40\xbf\xa2\x1c\xda\x2d\x3b\x83\x0c\x9a\xe3\xa5\xc9\xb0\x7a\x45\x47\xe3\x36\x67\x5c\xb0\xdb\xf6\xa2\xd1\x24\x55\xf2\x2e\xba\x5a\x8a\x62\x1b\xcf\x54\x2a\x60\xea\x0e\x10\xa9\x89\xad\xef\x8e\xe1\xf3\xe7\x42\x80\x34\x61\xe6\x17\x5a\xef\x51\xdd\x86\x54\x2a\xab\xbd\x5a\x98\xbc\x2c\x3f\x7f\xc6\x99\x96\x74\x0e\x63\x85\x84\x7a\xb5\xa2\x9a\x83\x34\xa7\xca\xc3\xb4\xc6\x22\xba\xda\xbd\xb6\x84\x66\x54\xaa\xa6\x1a\x8a\xb9\x66\x3b\x05\x6a\x8a\xa8\x93\xdf\x5d\x44\x6b\xc9\x1c\xe9\xe0\x18\x3a\xf2\x9c\xbf\xd5\x20\x16\x21\x76\xf5\x95\x12\x34\xd1\x0a\xe4\x84\x5f\xc2\x56\x4d\x6d\x4e\x1d\x5b\xad\x77\x07\x54\x40\xa2\x8d\x31\x62\x76\xd7\x0b\x2e\x7e\x20\xb1\xa5\x71\x0c\x86\x99\xe3\x49\x4f\x83\xf7\x33\xd0\x0e\x69\x0e\x6c\xeb\xd5\x36\xb6\xab\x0b\x5c\x99\xa3\xdc\x6e\x25\x0f\x9c\x27\x03\x9b\xff\x35\xd1\xc3\x80\x0c\xaa\xb5\xa1\xde\x77\xdf\x0a\x82\x3e\x6d\x13\xe0\x8c\x0b\x3e\x98\x57\xf1\x79\x06\x33\xca\xa8\x9b\x54\x4e\xda\xfb\x3b\xa7\xf6\x30\xfd\x5b\x6f\xfd\xff\xd2\xd6\x58\x3e\x49\x9f\xb9\xaa\x4f\xc8\x08\x44\x4e\x5d\xf4\x07\x10\x32\x44\x09\x64\x55\xc4\xb7\x1a\x34\x7c\x13\x99\x47\x2b\xfd\x80\x58\x0a\xd7\x20\x25\x4a\xe1\x6f\x2a\x69\x42\x33\xe3\xec\x00\x24\x2b\xa5\x15\x30\xaf\xbb\x4e\x68\x0e\x5c\x7b\x64\xc0\x0e\x54\x76\xa2\xea\x04\xad\x5b\x4a\x5c\x20\x9a\x01\xf1\x9d\x4f\xac\xd2\x6e\x35\xb8\xd6\xaf\xfb\x4c\x12\x25\x85\x6f\xc6\x59\xbb\xaa\x8f\xe2\x23\x07\x3a\xd8\x47\xfe\xec\x5c\x82\xb2\xc2\x6b\x5e\xfd\x79\xec\xac\x81\xf0\x06\x6e\xb4\x86\x22\xae\x3b\x8d\xed\xc2\xcd\x0f\x06\xa2\x7f\x3f\xee\x63\xdb\x30\x5f\x91\x8e\x86\xf9\xfb\xc3\x0c\x2e\x67\x80\xc8\x10\x94\x02\x31\xe6\x5a\x60\x17\x06\x3f\xd3\x2f\xcb\x6d\x3c\xdc\x62\xf0\x77\xc4\x6b\xbc\x32\x12\x30\xa3\xcf\x5d\x67\xab\x57\xdc\x07\x1d\xad\x9e\x8c\x9a\xd0\xd1\x4a\xa4\xef\x91\xe6\x77\x80\x81\xce\xbb\x14\xdc\x55\x6e\xba\x59\xb5\x92\x35\xd7\xe8\xf9\xab\xce\x13\x10\x37\xb3\x52\xc7\xb6\x88\x7b\xde\xbc\x8f\xff\x29\x5d\x11\xb8\x47\x54\x99\x25\xd7\x57\xf9\xb4\xd1\x8d\x91\xb3\x32\xe2\xa0\x81\x93\x3b\x2d\x61\xa1\x73\x07\x39\x9f\x43\xb7\xf6\xcc\x3f\x80\xc6\xc0\x48\x87\xe8\x39\x83\x0c\x2d\x96\xbe\xf1\x69\x07\x4f\xea\x34\xf8\xb8\x6c\xe7\x41\x66\x85\xde\xea\x4a\x7a\xe9\x39\xb4\xd4\x76\x80\xeb\xe9\xd2\xa0\x2b\x8f\x76\x61\xcd\x3b\x07\xed\x70\x3c\xdc\x70\xce\x94\xa0\xc7\x92\x38\x01\x99\x5f\x76\x68\x07\x85\x3f\xb3\x3a\x6a\xd1\x57\x47\x73\x8d\x31\x48\x39\xd3\xd5\x26\xe7\x8d\x11\xc9\x95\x9e\xb0\x62\x34\x7e\xb7\x36\xd2\x23\x04\xdf\xa7\x04\xf8\xa7\x7e\xaf\xfa\xd7\xe6\x2c\x9e\xa1\x3c\x21\xc8\x67\x1c\xbf\x62\x73\xfe\x18\x54\x7f\x2f\x34\xb3\x17\x21\x75\x1d\xaf\xd9\x15\x5b\x75\x93\x45\xb1\x7d\x39\xc6\xd3\xba\xc7\xb7\x1a\x65\x74\x46\x41\x74\x1d\x88\x4a\x60\xe7\x42\x70\xb1\x75\x31\xa5\x90\xd2\x72\xc0\x89\xc7\x44\xe9\xb8\xe9\xcb\x05\xc3\x9d\x09\xea\x66\x92\x43\xbd\xd7\x6d\xcc\x9f\x3e\xde\x77\x73\xfb\x17\x8d\x1f\x41\x05\x7d\xaf\xad\x7d\xd5\xae\xcc\x51\x66\x3b\xd0\xf6\xa8\x4f\xec\x1e\x36\xe4\xf7\xad\x11\x6e\xa6\xfd\xb8\xf8\x2f\x41\xdd\x24\xdf\x01\xef\x04\xdf\x14\x14\x7f\xc1\xa2\x63\x55\x3b\x0a\xef\xfd\x1a\x04\xec\x9f\xf3\xe5\x25\x13\x12\x8f\x95\x8a\xd8\xca\xe5\xce\x83\xf2\xa8\xb9\x68\x04\xe7\xcc\x3b\x70\x0f\x45\x9c\x92\x29\xb7\x2c\x86\x75\x2d\x43\x2a\x95\x63\xb2\xc6\x0b\x3e\x96\xd6\xbf\xfc\xc6\x96\x96\x7e\x0a\xb6\xf0\xd3\xc6\xd9\x80\x33\x65\xbf\x99\x1d\x94\xfe\x2e\x01\x36\xd2\xbf\xf2\x91\x31\xd2\x65\x76\x0d\x79\x9a\x52\x96\x1e\x79\x04\x36\xdb\x30\xe2\x19\xc5\x41\x5f\x9e\xca\x37\x3f\x87\x2b\x27\xe8\x63\xb9\xb2\xbe\xdf\x66\x5e\x5f\x3f\x47\x3a\xc9\xa8\x0c\xba\x4c\x99\xf0\x82\xe2\xbe\x60\xfb\x4c\x01\x42\x33\x45\x73\xf8\x43\xa2\x14\x72\x64\x1a\x09\xef\x91\xf0\x9c\x91\x82\x53\x16\x54\x66\x96\xef\x7a\x7f\x42\xee\x99\x7f\x2f\xbd\xff\x03\x00\x00\xff\xff\x0e\x2e\x89\x4c\xb7\x2b\x00\x00")

func resourcesAwswhitelistJsonBytes() ([]byte, error) {
	return bindataRead(
		_resourcesAwswhitelistJson,
		"resources/AWSWhitelist.json",
	)
}

func resourcesAwswhitelistJson() (*asset, error) {
	bytes, err := resourcesAwswhitelistJsonBytes()
	if err != nil {
		return nil, err
	}

	info := bindataFileInfo{name: "resources/AWSWhitelist.json", size: 11191, mode: os.FileMode(0644), modTime: time.Unix(1573699810, 0)}
	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc0, 0xee, 0x6f, 0x3d, 0xd1, 0x64, 0x48, 0xfb, 0xd4, 0xf7, 0x9, 0xda, 0x78, 0xfe, 0x46, 0xd, 0x67, 0xa6, 0xb3, 0xa7, 0x22, 0x68, 0xee, 0x2, 0x3c, 0x30, 0xe4, 0x51, 0xa6, 0xe1, 0x9b, 0x5a}}
	return a, nil
}

var _resourcesDefaultsamplingrulesJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\x2a\x4b\x2d\x2a\xce\xcc\xcf\x53\xb2\x52\x30\xd2\x01\xf1\x53\x52\xd3\x12\x4b\x73\x4a\x94\xac\x14\x40\xd2\x0a\x0a\x4a\x69\x99\x15\xa9\x29\xf1\x25\x89\x45\xe9\xa9\x20\x51\x43\x1d\x88\x70\x51\x62\x49\xaa\x92\x95\x82\x81\x9e\x81\x29\x97\x82\x42\x2d\x58\x6f\x51\x69\x4e\x6a\xb1\x92\x95\x42\x34\x97\x82\x42\x2c\x57\x2d\x17\x20\x00\x00\xff\xff\x47\xbd\xc4\xe0\x61\x00\x00\x00")

func resourcesDefaultsamplingrulesJsonBytes() ([]byte, error) {
	return bindataRead(
		_resourcesDefaultsamplingrulesJson,
		"resources/DefaultSamplingRules.json",
	)
}

func resourcesDefaultsamplingrulesJson() (*asset, error) {
	bytes, err := resourcesDefaultsamplingrulesJsonBytes()
	if err != nil {
		return nil, err
	}

	info := bindataFileInfo{name: "resources/DefaultSamplingRules.json", size: 97, mode: os.FileMode(0644), modTime: time.Unix(1573698794, 0)}
	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xce, 0x2c, 0x7, 0xe9, 0x6a, 0x70, 0x3e, 0xab, 0x1, 0xcb, 0x1d, 0xc, 0x29, 0x18, 0x89, 0xf0, 0x34, 0xa, 0x26, 0x20, 0x2a, 0x2c, 0x60, 0xc3, 0xe8, 0x8c, 0x44, 0x23, 0xf8, 0xb9, 0x27, 0x69}}
	return a, nil
}

var _resourcesExamplesamplingrulesJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x90\xcd\xae\xd3\x30\x14\x84\xf7\x79\x8a\x91\x37\x17\xae\x72\x43\x8b\xc4\x26\x3b\x16\xbc\x00\x62\x87\x50\x74\x1a\x9f\xd4\x47\x38\x76\xea\x9f\xb6\x08\xf5\xdd\x91\x9d\x96\xd2\xb2\xcc\xcc\x38\x67\xbe\xf9\xdd\x00\xea\xc8\x21\x8a\x77\xaa\xc7\xc7\xb6\x7c\x6b\x9e\x28\xdb\xa4\x7a\x14\xbb\x0a\x71\x0c\xb2\xa4\x35\xa4\x3e\xe3\x9a\x40\xc8\x96\x5b\x50\x84\xb8\xd1\x66\xcd\x1a\x3b\xb6\xfe\xd4\x42\x22\x02\x1f\xb2\x04\xd6\x10\x07\x72\xbf\x10\x69\x5e\xac\xb8\x7d\x7d\x14\x31\x89\xe5\x0e\xef\x22\x87\xa3\x8c\x3c\x38\x9a\xb9\x85\x49\x69\x19\x66\x4e\xc6\xeb\x16\xe4\x34\x72\xb0\xc3\x42\xc9\x80\x02\x63\x92\x33\x6b\x24\x8f\x97\xd7\x17\x4c\x3e\x20\x99\x72\x27\x5b\xee\xde\xab\x76\xad\x5a\x33\x43\xa2\xb0\xe7\x02\xb0\xbd\xca\x81\x12\xab\x1e\x9b\x6e\xf3\xa9\x01\x2e\x15\xb3\xf6\x50\x3d\xbe\xd7\xc8\x8a\xfa\x3f\xec\x97\x73\xe9\xcd\x28\x2d\xde\x76\x14\x59\xd7\x8b\x2b\x68\x87\xaf\x15\xa6\xb4\xe3\x23\xd9\x4c\x69\x05\x16\xfd\xe6\x83\xe6\xd0\x22\x19\x7e\x98\x0b\x27\xb1\x16\x3b\x46\x2e\xbf\x92\x09\xce\x3b\xc6\x4c\x69\x34\x35\x2b\x6e\xf4\x73\x9d\x89\x0f\x99\x63\xea\xf0\xad\x50\x4a\x04\xad\xef\x57\x70\xc6\x68\x78\xfc\xe9\x73\xc2\x42\x7b\xee\xae\xfc\x80\x12\x5d\x6a\x6f\xef\x82\xf1\xb1\x4c\xa1\x5e\xff\x91\xee\x3b\x3f\x39\xb7\xc1\x8b\xfc\xe1\x76\xe2\x6e\x3f\xcf\xbb\xf9\xeb\x3c\x2e\x0c\x5c\x1a\xe0\x47\x73\xf9\x13\x00\x00\xff\xff\x8e\x14\x8f\x3e\x61\x02\x00\x00")

func resourcesExamplesamplingrulesJsonBytes() ([]byte, error) {
	return bindataRead(
		_resourcesExamplesamplingrulesJson,
		"resources/ExampleSamplingRules.json",
	)
}

func resourcesExamplesamplingrulesJson() (*asset, error) {
	bytes, err := resourcesExamplesamplingrulesJsonBytes()
	if err != nil {
		return nil, err
	}

	info := bindataFileInfo{name: "resources/ExampleSamplingRules.json", size: 609, mode: os.FileMode(0644), modTime: time.Unix(1573698794, 0)}
	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0xb2, 0x3e, 0xf4, 0x1b, 0x71, 0xde, 0x47, 0x26, 0x3d, 0xba, 0xd4, 0x75, 0xf1, 0xb2, 0x19, 0x63, 0x88, 0x1d, 0x1b, 0x8b, 0xda, 0x21, 0xaf, 0x67, 0xcd, 0x20, 0x27, 0x59, 0x9c, 0xe1, 0x6c}}
	return a, nil
}

// Asset loads and returns the asset for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
func Asset(name string) ([]byte, error) {
	canonicalName := strings.Replace(name, "\\", "/", -1)
	if f, ok := _bindata[canonicalName]; ok {
		a, err := f()
		if err != nil {
			return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
		}
		return a.bytes, nil
	}
	return nil, fmt.Errorf("Asset %s not found", name)
}

// AssetString returns the asset contents as a string (instead of a []byte).
func AssetString(name string) (string, error) {
	data, err := Asset(name)
	return string(data), err
}

// MustAsset is like Asset but panics when Asset would return an error.
// It simplifies safe initialization of global variables.
func MustAsset(name string) []byte {
	a, err := Asset(name)
	if err != nil {
		panic("asset: Asset(" + name + "): " + err.Error())
	}

	return a
}

// MustAssetString is like AssetString but panics when Asset would return an
// error. It simplifies safe initialization of global variables.
func MustAssetString(name string) string {
	return string(MustAsset(name))
}

// AssetInfo loads and returns the asset info for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
func AssetInfo(name string) (os.FileInfo, error) {
	canonicalName := strings.Replace(name, "\\", "/", -1)
	if f, ok := _bindata[canonicalName]; ok {
		a, err := f()
		if err != nil {
			return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
		}
		return a.info, nil
	}
	return nil, fmt.Errorf("AssetInfo %s not found", name)
}

// AssetDigest returns the digest of the file with the given name. It returns an
// error if the asset could not be found or the digest could not be loaded.
func AssetDigest(name string) ([sha256.Size]byte, error) {
	canonicalName := strings.Replace(name, "\\", "/", -1)
	if f, ok := _bindata[canonicalName]; ok {
		a, err := f()
		if err != nil {
			return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s can't read by error: %v", name, err)
		}
		return a.digest, nil
	}
	return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s not found", name)
}

// Digests returns a map of all known files and their checksums.
func Digests() (map[string][sha256.Size]byte, error) {
	mp := make(map[string][sha256.Size]byte, len(_bindata))
	for name := range _bindata {
		a, err := _bindata[name]()
		if err != nil {
			return nil, err
		}
		mp[name] = a.digest
	}
	return mp, nil
}

// AssetNames returns the names of the assets.
func AssetNames() []string {
	names := make([]string, 0, len(_bindata))
	for name := range _bindata {
		names = append(names, name)
	}
	return names
}

// _bindata is a table, holding each asset generator, mapped to its name.
var _bindata = map[string]func() (*asset, error){
	"resources/AWSWhitelist.json":         resourcesAwswhitelistJson,
	"resources/DefaultSamplingRules.json": resourcesDefaultsamplingrulesJson,
	"resources/ExampleSamplingRules.json": resourcesExamplesamplingrulesJson,
}

// AssetDir returns the file names below a certain
// directory embedded in the file by go-bindata.
// For example if you run go-bindata on data/... and data contains the
// following hierarchy:
//     data/
//       foo.txt
//       img/
//         a.png
//         b.png
// then AssetDir("data") would return []string{"foo.txt", "img"},
// AssetDir("data/img") would return []string{"a.png", "b.png"},
// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and
// AssetDir("") will return []string{"data"}.
func AssetDir(name string) ([]string, error) {
	node := _bintree
	if len(name) != 0 {
		canonicalName := strings.Replace(name, "\\", "/", -1)
		pathList := strings.Split(canonicalName, "/")
		for _, p := range pathList {
			node = node.Children[p]
			if node == nil {
				return nil, fmt.Errorf("Asset %s not found", name)
			}
		}
	}
	if node.Func != nil {
		return nil, fmt.Errorf("Asset %s not found", name)
	}
	rv := make([]string, 0, len(node.Children))
	for childName := range node.Children {
		rv = append(rv, childName)
	}
	return rv, nil
}

type bintree struct {
	Func     func() (*asset, error)
	Children map[string]*bintree
}

var _bintree = &bintree{nil, map[string]*bintree{
	"resources": &bintree{nil, map[string]*bintree{
		"AWSWhitelist.json":         &bintree{resourcesAwswhitelistJson, map[string]*bintree{}},
		"DefaultSamplingRules.json": &bintree{resourcesDefaultsamplingrulesJson, map[string]*bintree{}},
		"ExampleSamplingRules.json": &bintree{resourcesExamplesamplingrulesJson, map[string]*bintree{}},
	}},
}}

// RestoreAsset restores an asset under the given directory.
func RestoreAsset(dir, name string) error {
	data, err := Asset(name)
	if err != nil {
		return err
	}
	info, err := AssetInfo(name)
	if err != nil {
		return err
	}
	err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
	if err != nil {
		return err
	}
	err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
	if err != nil {
		return err
	}
	return os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
}

// RestoreAssets restores an asset under the given directory recursively.
func RestoreAssets(dir, name string) error {
	children, err := AssetDir(name)
	// File
	if err != nil {
		return RestoreAsset(dir, name)
	}
	// Dir
	for _, child := range children {
		err = RestoreAssets(dir, filepath.Join(name, child))
		if err != nil {
			return err
		}
	}
	return nil
}

func _filePath(dir, name string) string {
	canonicalName := strings.Replace(name, "\\", "/", -1)
	return filepath.Join(append([]string{dir}, strings.Split(canonicalName, "/")...)...)
}
