// Code generated by go-bindata.
// sources:
// wski18n/resources/de_DE.all.json
// wski18n/resources/en_US.all.json
// wski18n/resources/es_ES.all.json
// wski18n/resources/fr_FR.all.json
// wski18n/resources/it_IT.all.json
// wski18n/resources/ja_JA.all.json
// wski18n/resources/ko_KR.all.json
// wski18n/resources/pt_BR.all.json
// wski18n/resources/zh_Hans.all.json
// wski18n/resources/zh_Hant.all.json
// DO NOT EDIT!

package wski18n

import (
	"bytes"
	"compress/gzip"
	"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
}

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 _wski18nResourcesDe_deAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")

func wski18nResourcesDe_deAllJsonBytes() ([]byte, error) {
	return bindataRead(
		_wski18nResourcesDe_deAllJson,
		"wski18n/resources/de_DE.all.json",
	)
}

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

	info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
	a := &asset{bytes: bytes, info: info}
	return a, nil
}

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

func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
	return bindataRead(
		_wski18nResourcesEn_usAllJson,
		"wski18n/resources/en_US.all.json",
	)
}

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

	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 14286, mode: os.FileMode(420), modTime: time.Unix(1523039220, 0)}
	a := &asset{bytes: bytes, info: info}
	return a, nil
}

var _wski18nResourcesEs_esAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")

func wski18nResourcesEs_esAllJsonBytes() ([]byte, error) {
	return bindataRead(
		_wski18nResourcesEs_esAllJson,
		"wski18n/resources/es_ES.all.json",
	)
}

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

	info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
	a := &asset{bytes: bytes, info: info}
	return a, nil
}

var _wski18nResourcesFr_frAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8a\xe6\x52\x50\xa8\xe6\x52\x50\x50\x50\x50\xca\x4c\x51\xb2\x52\x50\x4a\xaa\x2c\x48\x2c\x2e\x56\x48\x4e\x2d\x2a\xc9\x4c\xcb\x4c\x4e\x2c\x49\x55\x48\xce\x48\x4d\xce\xce\xcc\x4b\x57\xd2\x81\x28\x2c\x29\x4a\xcc\x2b\xce\x49\x2c\xc9\xcc\xcf\x03\xe9\x08\xce\xcf\x4d\x55\x40\x12\x53\xc8\xcc\x53\x70\x2b\x4a\xcd\x4b\xce\x50\xe2\x52\x50\xa8\xe5\x8a\xe5\x02\x04\x00\x00\xff\xff\x45\xa4\xe9\x62\x65\x00\x00\x00")

func wski18nResourcesFr_frAllJsonBytes() ([]byte, error) {
	return bindataRead(
		_wski18nResourcesFr_frAllJson,
		"wski18n/resources/fr_FR.all.json",
	)
}

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

	info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
	a := &asset{bytes: bytes, info: info}
	return a, nil
}

var _wski18nResourcesIt_itAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")

func wski18nResourcesIt_itAllJsonBytes() ([]byte, error) {
	return bindataRead(
		_wski18nResourcesIt_itAllJson,
		"wski18n/resources/it_IT.all.json",
	)
}

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

	info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
	a := &asset{bytes: bytes, info: info}
	return a, nil
}

var _wski18nResourcesJa_jaAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")

func wski18nResourcesJa_jaAllJsonBytes() ([]byte, error) {
	return bindataRead(
		_wski18nResourcesJa_jaAllJson,
		"wski18n/resources/ja_JA.all.json",
	)
}

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

	info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
	a := &asset{bytes: bytes, info: info}
	return a, nil
}

var _wski18nResourcesKo_krAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")

func wski18nResourcesKo_krAllJsonBytes() ([]byte, error) {
	return bindataRead(
		_wski18nResourcesKo_krAllJson,
		"wski18n/resources/ko_KR.all.json",
	)
}

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

	info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
	a := &asset{bytes: bytes, info: info}
	return a, nil
}

var _wski18nResourcesPt_brAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")

func wski18nResourcesPt_brAllJsonBytes() ([]byte, error) {
	return bindataRead(
		_wski18nResourcesPt_brAllJson,
		"wski18n/resources/pt_BR.all.json",
	)
}

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

	info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
	a := &asset{bytes: bytes, info: info}
	return a, nil
}

var _wski18nResourcesZh_hansAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")

func wski18nResourcesZh_hansAllJsonBytes() ([]byte, error) {
	return bindataRead(
		_wski18nResourcesZh_hansAllJson,
		"wski18n/resources/zh_Hans.all.json",
	)
}

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

	info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
	a := &asset{bytes: bytes, info: info}
	return a, nil
}

var _wski18nResourcesZh_hantAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")

func wski18nResourcesZh_hantAllJsonBytes() ([]byte, error) {
	return bindataRead(
		_wski18nResourcesZh_hantAllJson,
		"wski18n/resources/zh_Hant.all.json",
	)
}

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

	info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
	a := &asset{bytes: bytes, info: info}
	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) {
	cannonicalName := strings.Replace(name, "\\", "/", -1)
	if f, ok := _bindata[cannonicalName]; 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)
}

// 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
}

// 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) {
	cannonicalName := strings.Replace(name, "\\", "/", -1)
	if f, ok := _bindata[cannonicalName]; 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)
}

// 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){
	"wski18n/resources/de_DE.all.json":   wski18nResourcesDe_deAllJson,
	"wski18n/resources/en_US.all.json":   wski18nResourcesEn_usAllJson,
	"wski18n/resources/es_ES.all.json":   wski18nResourcesEs_esAllJson,
	"wski18n/resources/fr_FR.all.json":   wski18nResourcesFr_frAllJson,
	"wski18n/resources/it_IT.all.json":   wski18nResourcesIt_itAllJson,
	"wski18n/resources/ja_JA.all.json":   wski18nResourcesJa_jaAllJson,
	"wski18n/resources/ko_KR.all.json":   wski18nResourcesKo_krAllJson,
	"wski18n/resources/pt_BR.all.json":   wski18nResourcesPt_brAllJson,
	"wski18n/resources/zh_Hans.all.json": wski18nResourcesZh_hansAllJson,
	"wski18n/resources/zh_Hant.all.json": wski18nResourcesZh_hantAllJson,
}

// 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
// AssetDir("") will return []string{"data"}.
func AssetDir(name string) ([]string, error) {
	node := _bintree
	if len(name) != 0 {
		cannonicalName := strings.Replace(name, "\\", "/", -1)
		pathList := strings.Split(cannonicalName, "/")
		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{
	"wski18n": &bintree{nil, map[string]*bintree{
		"resources": &bintree{nil, map[string]*bintree{
			"de_DE.all.json":   &bintree{wski18nResourcesDe_deAllJson, map[string]*bintree{}},
			"en_US.all.json":   &bintree{wski18nResourcesEn_usAllJson, map[string]*bintree{}},
			"es_ES.all.json":   &bintree{wski18nResourcesEs_esAllJson, map[string]*bintree{}},
			"fr_FR.all.json":   &bintree{wski18nResourcesFr_frAllJson, map[string]*bintree{}},
			"it_IT.all.json":   &bintree{wski18nResourcesIt_itAllJson, map[string]*bintree{}},
			"ja_JA.all.json":   &bintree{wski18nResourcesJa_jaAllJson, map[string]*bintree{}},
			"ko_KR.all.json":   &bintree{wski18nResourcesKo_krAllJson, map[string]*bintree{}},
			"pt_BR.all.json":   &bintree{wski18nResourcesPt_brAllJson, map[string]*bintree{}},
			"zh_Hans.all.json": &bintree{wski18nResourcesZh_hansAllJson, map[string]*bintree{}},
			"zh_Hant.all.json": &bintree{wski18nResourcesZh_hantAllJson, 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
	}
	err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
	if err != nil {
		return err
	}
	return nil
}

// 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 {
	cannonicalName := strings.Replace(name, "\\", "/", -1)
	return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
}
