summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x.travis.sh1
-rw-r--r--Makefile2
-rw-r--r--ast2json/renpy/ast.py190
-rwxr-xr-xconfigure89
-rw-r--r--www/js/api.js13
-rw-r--r--www/js/html5ks.js55
-rw-r--r--www/js/s2s.js1066
7 files changed, 1283 insertions, 133 deletions
diff --git a/.travis.sh b/.travis.sh
index ee286d3..c5a46aa 100755
--- a/.travis.sh
+++ b/.travis.sh
@@ -4,6 +4,7 @@ set -e -x
case "$1" in
before_install)
+ ln -s $(command -v python) /usr/local/bin/python
sudo service postgresql stop
sudo service mysql stop
sudo apt-get update -qq
diff --git a/Makefile b/Makefile
index 0b7e65d..3d20bb2 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,7 @@ MYJS := www/js/html5ks.js www/js/menu.js www/js/api.js \
www/js/characters.js www/js/imachine.js www/js/i18n.js
JSLIBS := www/js/lib/fastclick.js www/js/lib/modernizr-build.js \
www/js/lib/when.js www/js/lib/spin.js
-JSDATA := www/js/play.js www/js/images.js
+JSDATA := www/js/play.js www/js/images.js www/js/s2s.js
JS := $(JSLIBS) $(MYJS) $(JSDATA)
JSOUT := www/js/all.min.js
diff --git a/ast2json/renpy/ast.py b/ast2json/renpy/ast.py
index b5d2200..ef1df20 100644
--- a/ast2json/renpy/ast.py
+++ b/ast2json/renpy/ast.py
@@ -75,12 +75,12 @@ class ArgumentInfo(object):
def __newobj__(cls, *args):
- return cls.__new__(cls, *args)
+ return cls.__new__(cls, *args)
# This represents a string containing python code.
class PyExpr(str):
- __slots__ = [
+ __slots__ = [
'filename',
'linenumber'
]
@@ -93,8 +93,8 @@ class PyExpr(str):
def __getnewargs__(self):
return (str(self), self.filename, self.linenumber) # E1101
-
-
+
+
class PyCode(object):
__slots__ = [
@@ -113,7 +113,7 @@ class PyCode(object):
def __setstate__(self, state):
(_, self.source, self.location, self.mode) = state
self.bytecode = None
-
+
def __init__(self, source, loc=('<none>', 1), mode='exec'):
# The source code.
self.source = source
@@ -158,7 +158,7 @@ class Scry(object):
else:
return self._next.scry()
-
+
class Node(object):
"""
A node in the abstract syntax tree of the program.
@@ -168,7 +168,7 @@ class Node(object):
@ivar filename: The filename where this node comes from.
@ivar linenumber: The line number of the line on which this node is defined.
"""
-
+
__slots__ = [
'name',
'filename',
@@ -187,7 +187,7 @@ class Node(object):
self.filename, self.linenumber = loc
self.name = None
self.next = None
-
+
def diff_info(self):
"""
Returns a tuple of diff info about ourself. This is used to
@@ -216,14 +216,14 @@ class Node(object):
"""
return None
-
+
def chain(self, next):
"""
This is called with the Node node that should be followed after
executing this node, and all nodes that this node
executes. (For example, if this node is a block label, the
next is the node that should be executed after all nodes in
- the block.)
+ the block.)
"""
self.next = next
@@ -288,7 +288,7 @@ def say_menu_with(expression, callback):
if renpy.game.preferences.transitions:
# renpy.game.interface.set_transition(what)
callback(what)
-
+
class Say(Node):
__slots__ = [
@@ -314,9 +314,9 @@ class Say(Node):
else:
self.who_fast = False
else:
- self.who = None
+ self.who = None
self.who_fast = False
-
+
self.what = what
self.with_ = with_
self.interact = interact
@@ -336,7 +336,7 @@ class Say(Node):
what = self.what
if renpy.config.say_menu_text_filter:
what = renpy.config.say_menu_text_filter(what) # E1102
-
+
say_menu_with(self.with_, renpy.game.interface.set_transition)
renpy.exports.say(who, what, interact=getattr(self, 'interact', True))
@@ -375,7 +375,7 @@ class Say(Node):
rv = Node.scry(self)
rv.interacts = True # W0201
return rv
-
+
# Copy the descriptor.
setattr(Say, "with", Say.with_) # E1101
@@ -409,7 +409,7 @@ class Init(Node):
def execute(self):
return self.__next__
-
+
class Label(Node):
@@ -422,7 +422,7 @@ class Label(Node):
def __setstate__(self, state):
self.parameters = None
setstate(self, state)
-
+
def __init__(self, loc, name, block, parameters):
"""
Constructs a new Label node.
@@ -442,7 +442,7 @@ class Label(Node):
return (Label, self.name)
def get_children(self):
- return self.block
+ return self.block
def chain(self, next):
@@ -451,10 +451,10 @@ class Label(Node):
chain_block(self.block, next)
else:
self.next = next
-
+
def execute(self):
renpy.game.context().mark_seen()
-
+
args = renpy.store._args
kwargs = renpy.store._kwargs
@@ -472,8 +472,8 @@ class Label(Node):
if kwargs is None:
kwargs = { }
-
- values = { }
+
+ values = { }
params = self.parameters
for name, value in zip(params.positional, args):
@@ -498,7 +498,7 @@ class Label(Node):
else:
values[name] = renpy.python.py_eval(default)
-
+
renpy.exports.dynamic(name)
setattr(renpy.store, name, values[name])
del values[name]
@@ -525,7 +525,7 @@ class Label(Node):
if renpy.config.label_callback:
renpy.config.label_callback(self.name, renpy.game.context().last_abnormal)
-
+
return self.__next__
class Python(Node):
@@ -542,7 +542,7 @@ class Python(Node):
@param hide: If True, the code will be executed with its
own local dictionary.
"""
-
+
super(Python, self).__init__(loc)
self.hide = hide
@@ -577,7 +577,7 @@ class EarlyPython(Node):
@param hide: If True, the code will be executed with its
own local dictionary.
"""
-
+
super(EarlyPython, self).__init__(loc)
self.hide = hide
@@ -612,7 +612,7 @@ class Image(Node):
"""
super(Image, self).__init__(loc)
-
+
self.imgname = name
if expr:
@@ -621,16 +621,16 @@ class Image(Node):
else:
self.code = None
self.atl = atl
-
- def diff_info(self):
+
+ def diff_info(self):
return (Image, tuple(self.imgname))
def get_pycode(self):
- if self.code:
+ if self.code:
return [ self.code ]
else:
return [ ]
-
+
def execute(self):
# Note: We should always check that self.code is None before
@@ -646,7 +646,7 @@ class Image(Node):
return self.__next__
-
+
class Transform(Node):
__slots__ = [
@@ -658,20 +658,20 @@ class Transform(Node):
'atl',
# The parameters associated with the transform, if any.
- 'parameters',
+ 'parameters',
]
default_parameters = ParameterInfo([ ], [ ], None, None)
-
+
def __init__(self, loc, name, atl=None, parameters=default_parameters):
super(Transform, self).__init__(loc)
-
+
self.varname = name
self.atl = atl
self.parameters = parameters
-
- def diff_info(self):
+
+ def diff_info(self):
return (Transform, self.varname)
def execute(self):
@@ -684,10 +684,10 @@ class Transform(Node):
trans = renpy.display.motion.ATLTransform(self.atl, parameters=parameters)
renpy.exports.definitions[self.varname].append((self.filename, self.linenumber, "transform"))
setattr(renpy.store, self.varname, trans)
-
+
return self.__next__
-
+
def predict_imspec(imspec, callback, scene=False):
"""
Call this to use the given callback to predict the image named
@@ -702,8 +702,8 @@ def predict_imspec(imspec, callback, scene=False):
elif len(imspec) == 3:
name, at_list, layer = imspec
-
-
+
+
if expression:
try:
img = renpy.python.py_eval(expression)
@@ -722,28 +722,28 @@ def predict_imspec(imspec, callback, scene=False):
if scene:
renpy.game.context().predict_info.images.predict_scene(layer)
-
+
renpy.game.context().predict_info.images.predict_show(tag or name, layer)
-
+
img.predict(callback)
-
+
def show_imspec(imspec, atl=None):
if len(imspec) == 7:
name, expression, tag, at_list, layer, zorder, behind = imspec
-
+
elif len(imspec) == 6:
name, expression, tag, at_list, layer, zorder = imspec
behind = [ ]
-
+
elif len(imspec) == 3:
name, at_list, layer = imspec
expression = None
tag = None
zorder = None
behind = [ ]
-
+
if zorder is not None:
zorder = renpy.python.py_eval(zorder)
else:
@@ -781,8 +781,8 @@ class Show(Node):
self.imspec = imspec
self.atl = atl
-
- def diff_info(self):
+
+ def diff_info(self):
return (Show, tuple(self.imspec[0]))
def execute(self):
@@ -794,7 +794,7 @@ class Show(Node):
def predict(self, callback):
predict_imspec(self.imspec, callback)
return [ self.__next__ ]
-
+
class Scene(Node):
@@ -817,7 +817,7 @@ class Scene(Node):
self.layer = layer
self.atl = atl
- def diff_info(self):
+ def diff_info(self):
if self.imspec:
data = tuple(self.imspec[0])
@@ -834,15 +834,15 @@ class Scene(Node):
show_imspec(self.imspec, atl=getattr(self, "atl", None))
return self.__next__
-
+
def predict(self, callback):
-
+
if self.imspec:
predict_imspec(self.imspec, callback, scene=True)
return [ self.__next__ ]
-
+
class Hide(Node):
__slots__ = [
@@ -860,7 +860,7 @@ class Hide(Node):
self.imspec = imgspec
- def diff_info(self):
+ def diff_info(self):
return (Hide, tuple(self.imspec[0]))
def predict(self, callback):
@@ -878,11 +878,11 @@ class Hide(Node):
if tag is None:
tag = name[0]
-
+
renpy.game.context().predict_info.images.predict_hide(tag, layer)
return [ ]
-
+
def execute(self):
if len(self.imspec) == 3:
@@ -894,12 +894,12 @@ class Hide(Node):
name, expression, tag, at_list, layer, zorder = self.imspec
elif len(self.imspec) == 7:
name, expression, tag, at_list, layer, zorder, behind = self.imspec
-
+
renpy.config.hide(tag or name, layer)
return self.__next__
-
+
class With(Node):
__slots__ = [
@@ -910,7 +910,7 @@ class With(Node):
def __setstate__(self, state):
self.paired = None
setstate(self, state)
-
+
def __init__(self, loc, expr, paired=None):
"""
@param expr: An expression giving a transition or None.
@@ -922,7 +922,7 @@ class With(Node):
def diff_info(self):
return (With, self.expr)
-
+
def execute(self):
trans = renpy.python.py_eval(self.expr)
@@ -930,7 +930,7 @@ class With(Node):
if self.paired is not None:
paired = renpy.python.py_eval(self.paired)
else:
- paired = None
+ paired = None
renpy.exports.with_statement(trans, paired)
@@ -946,10 +946,10 @@ class With(Node):
except:
pass
-
+
return [ self.__next__ ]
-
-
+
+
class Call(Node):
__slots__ = [
@@ -961,7 +961,7 @@ class Call(Node):
def __setstate__(self, state):
self.arguments = None
setstate(self, state)
-
+
def __init__(self, loc, label, expression, arguments):
super(Call, self).__init__(loc)
@@ -1011,11 +1011,11 @@ class Call(Node):
renpy.store._args = tuple(args)
renpy.store._kwargs = kwargs
-
-
+
+
return rv
-
-
+
+
def predict(self, callback):
if self.expression:
return [ ]
@@ -1035,11 +1035,11 @@ class Return(Node):
def __setstate__(self, state):
self.expression = None
setstate(self, state)
-
+
def __init__(self, loc, expression):
super(Return, self).__init__(loc)
self.expression = expression
-
+
def diff_info(self):
return (Return, )
@@ -1056,7 +1056,7 @@ class Return(Node):
renpy.store._return = None
renpy.game.context().pop_dynamic()
-
+
return renpy.game.context().lookup_return(pop=True)
def predict(self, callback):
@@ -1071,7 +1071,7 @@ class Return(Node):
rv._next = None
return rv
-
+
class Menu(Node):
__slots__ = [
@@ -1111,7 +1111,7 @@ class Menu(Node):
def execute(self):
choices = [ ]
-
+
for i, (label, condition, block) in enumerate(self.items):
if renpy.config.say_menu_text_filter:
@@ -1129,7 +1129,7 @@ class Menu(Node):
return self.__next__
else:
return self.items[choice][2][0]
-
+
def predict(self, callback):
rv = [ ]
@@ -1154,12 +1154,12 @@ class Menu(Node):
rv._next = None
rv.interacts = True
return rv
-
+
setattr(Menu, "with", Menu.with_) # E1101
# Goto is considered harmful. So we decided to name it "jump"
-# instead.
+# instead.
class Jump(Node):
__slots__ = [
@@ -1204,7 +1204,7 @@ class Jump(Node):
rv._next = None
else:
rv._next = renpy.game.script.lookup(self.target)
-
+
return rv
@@ -1252,7 +1252,7 @@ class While(Node):
def predict(self, callback):
return [ self.block[0], self.__next__ ]
-
+
def scry(self):
rv = Node.scry(self)
rv._next = None
@@ -1319,7 +1319,7 @@ class UserStatement(Node):
# Do not store the parse quite yet.
renpy.statements.parse(self, self.line)
-
+
def diff_info(self):
return (UserStatement, self.line)
@@ -1332,12 +1332,12 @@ class UserStatement(Node):
for i in predicted:
callback(i)
-
+
return [ self.get_next() ]
-
+
def call(self, method, *args, **kwargs):
-
- parsed = self.parsed
+
+ parsed = self.parsed
if parsed is None:
parsed = renpy.statements.parse(self, self.line)
self.parsed = parsed
@@ -1350,14 +1350,14 @@ class UserStatement(Node):
return renpy.game.script.lookup(rv)
else:
return self.__next__
-
+
def scry(self):
rv = Node.scry(self)
rv._next = self.get_next()
self.call("scry", rv)
return rv
-
-
+
+
class Define(Node):
__slots__ = [
@@ -1374,23 +1374,23 @@ class Define(Node):
"""
super(Define, self).__init__(loc)
-
+
self.varname = name
self.code = PyCode(expr, loc=loc, mode='eval')
-
- def diff_info(self):
+
+ def diff_info(self):
return (Define, tuple(self.varname))
def get_pycode(self):
- if self.code:
+ if self.code:
return [ self.code ]
else:
return [ ]
-
+
def execute(self):
value = renpy.python.py_eval_bytecode(self.code.bytecode)
renpy.exports.definitions[self.varname].append((self.filename, self.linenumber, "define"))
- setattr(renpy.store, self.varname, value)
-
+ setattr(renpy.store, self.varname, value)
+
return self.__next__
diff --git a/configure b/configure
index 5396376..6ca1a0f 100755
--- a/configure
+++ b/configure
@@ -1,11 +1,80 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
+
+from __future__ import with_statement, print_function, unicode_literals
import os
import re
import shlex
-import shutil
-import subprocess
-from sys import stderr
+try:
+ from shutil import which
+except ImportError:
+ def which(cmd, mode=os.F_OK | os.X_OK, path=None):
+ """Given a command, mode, and a PATH string, return the path which
+ conforms to the given mode on the PATH, or None if there is no such
+ file.
+
+ `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result
+ of os.environ.get("PATH"), or can be overridden with a custom search
+ path.
+
+ """
+ # Check that a given file can be accessed with the correct mode.
+ # Additionally check that `file` is not a directory, as on Windows
+ # directories pass the os.access check.
+ def _access_check(fn, mode):
+ return (os.path.exists(fn) and os.access(fn, mode)
+ and not os.path.isdir(fn))
+
+ # If we're given a path with a directory part, look it up directly rather
+ # than referring to PATH directories. This includes checking relative to the
+ # current directory, e.g. ./script
+ if os.path.dirname(cmd):
+ if _access_check(cmd, mode):
+ return cmd
+ return None
+
+ if path is None:
+ path = os.environ.get("PATH", os.defpath)
+ if not path:
+ return None
+ path = path.split(os.pathsep)
+
+ if platform == "win32":
+ # The current directory takes precedence on Windows.
+ if not os.curdir in path:
+ path.insert(0, os.curdir)
+
+ # PATHEXT is necessary to check on Windows.
+ pathext = os.environ.get("PATHEXT", "").split(os.pathsep)
+ # See if the given file matches any of the expected path extensions.
+ # This will allow us to short circuit when given "python.exe".
+ # If it does match, only test that one, otherwise we have to try
+ # others.
+ if any(cmd.lower().endswith(ext.lower()) for ext in pathext):
+ files = [cmd]
+ else:
+ files = [cmd + ext for ext in pathext]
+ else:
+ # On other platforms you don't have things like PATHEXT to tell you
+ # what file suffixes are executable, so just pass on cmd as-is.
+ files = [cmd]
+
+ seen = set()
+ for dir in path:
+ normdir = os.path.normcase(dir)
+ if not normdir in seen:
+ seen.add(normdir)
+ for thefile in files:
+ name = os.path.join(dir, thefile)
+ if _access_check(name, mode):
+ return name
+ return None
+from subprocess import CalledProcessError, STDOUT, check_call, check_output, list2cmdline
+try:
+ from subprocess import DEVNULL
+except ImportError:
+ DEVNULL = open(os.devnull, 'wb')
+from sys import platform, stderr
cmds = {}
warnings = []
@@ -34,7 +103,7 @@ def check(name, why, flags=[], optional=False, var=None, run=True):
elif varvalue is None:
varvalue = name
split = shlex.split(varvalue)
- exe = shutil.which(split[0])
+ exe = which(split[0])
if not exe:
stderr.write("not found\n")
if not optional:
@@ -47,16 +116,16 @@ def check(name, why, flags=[], optional=False, var=None, run=True):
if run:
checking("%s usability" % exe)
try:
- subprocess.check_call(cmd + ["-h"], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)
+ check_call(cmd + ["-h"], stdout=DEVNULL, stderr=STDOUT)
stderr.write("yes\n")
- except subprocess.CalledProcessError as e:
- raise CheckError() from e
+ except CalledProcessError as e:
+ raise CheckError(e)
cmds[var] = cmd
return cmd
def run_ffmpeg(arg):
- return subprocess.check_output(ffmpeg + [arg], stderr=subprocess.STDOUT).decode('utf-8')
+ return check_output(ffmpeg + [arg], stderr=STDOUT).decode('utf-8')
def ffmpeg_check(name, regex, checks, output):
for check in checks:
@@ -92,7 +161,7 @@ if __name__ == "__main__":
stderr.write("creating Makefile.inc\n")
with open("Makefile.inc", "w") as f:
- f.write(''.join('%s := %s\n' % (k, subprocess.list2cmdline(cmds[k])) for k in cmds))
+ f.write(''.join('%s := %s\n' % (k, list2cmdline(cmds[k])) for k in cmds))
if len(warnings):
stderr.write("Warnings during configuration:\n")
diff --git a/www/js/api.js b/www/js/api.js
index b8c2f28..6b5f177 100644
--- a/www/js/api.js
+++ b/www/js/api.js
@@ -191,16 +191,15 @@ window.html5ks.api = {
iscene: function (target, is_h, is_end) {
html5ks.store.status = "scene";
var deferred = when.defer(),
- label = html5ks.data.script[html5ks.persistent.language + "_" + target],
+ real_target = html5ks.persistent.language + "_" + target,
i = 0;
- (function run(ret) {
- if (label[i]) {
- html5ks.api.runInst(label[i]).then(run, console.error);
- i++;
+ html5ks.fetch('script', html5ks.data.s2s[real_target]).then(function (l) {
+ if (l[i]) {
+ html5ks.api.runInst(l[i++]).then(run, console.error);
} else {
- deferred.resolve(ret);
+ deferred.resolve();
}
- }());
+ }, deferred.reject);
return deferred.promise;
},
diff --git a/www/js/html5ks.js b/www/js/html5ks.js
index 0a8eff3..7fe493a 100644
--- a/www/js/html5ks.js
+++ b/www/js/html5ks.js
@@ -4,7 +4,7 @@ window.assert = function (c, m) {
else if (!c) throw new Error(m);
};
window.html5ks = {
- data: {},
+ data: {script: {}},
persistent: {},
init: function () {
var defaultPersistent = {
@@ -55,7 +55,9 @@ window.html5ks = {
hanako: 0
},
play: {},
- speed: ""
+ speed: "",
+ nvl: false,
+ window: false
},
next: function () {
var _next = html5ks._next;
@@ -199,29 +201,42 @@ window.html5ks = {
html5ks.menu.mainMenu();
}, console.error);
},
- fetch: function (type, name) {
+ _fetch: function (obj, prop, path) {
var deferred = when.defer();
var xhr = new XMLHttpRequest();
+ if (obj[prop]) {
+ deferred.resolve();
+ } else {
+ xhr.open("GET", path);
+ xhr.onload = function () {
+ if (xhr.status === 200) {
+ var d = JSON.parse(xhr.responseText);
+ obj[prop] = d;
+ deferred.resolve(d);
+ } else {
+ xhr.onerror();
+ }
+ };
+ xhr.onerror = function () {
+ deferred.reject();
+ };
+ xhr.send();
+ }
+ return deferred.promise;
+ },
+ fetch: function (type, name) {
+ var deferred = when.defer();
switch (type) {
case "json":
- if (html5ks.data[name]) {
+ return this._fetch(html5ks.data, name, "json/" + name + ".json");
+ break;
+ case "script":
+ this._fetch(html5ks.data.script, name, "json/script-" + name + ".json").then(function (d) {
+ for (var i in d) {
+ html5ks.data.script[i] = d[i];
+ }
deferred.resolve();
- } else {
- xhr.open("GET", "json/" + name + ".json");
- xhr.onload = function () {
- if (xhr.status === 200) {
- var d = JSON.parse(xhr.responseText);
- html5ks.data[name] = d;
- deferred.resolve(d);
- } else {
- xhr.onerror();
- }
- };
- xhr.onerror = function () {
- deferred.reject();
- };
- xhr.send();
- }
+ });
break;
default:
throw new Error("fetchtype " + type + " not implemented");
diff --git a/www/js/s2s.js b/www/js/s2s.js
new file mode 100644
index 0000000..710b63e
--- /dev/null
+++ b/www/js/s2s.js
@@ -0,0 +1,1066 @@
+html5ks.data.s2s = {
+ en_A10: "a1-wednesday",
+ en_A10a: "a1-wednesday",
+ en_A10b: "a1-wednesday",
+ en_A10c: "a1-wednesday",
+ en_A11: "a1-wednesday",
+ en_A11a: "a1-wednesday",
+ en_A11b: "a1-wednesday",
+ en_A11c: "a1-wednesday",
+ en_A11d: "a1-wednesday",
+ en_A11x: "a1-wednesday",
+ en_A11y: "a1-wednesday",
+ en_A12: "a1-wednesday",
+ en_A13: "a1-wednesday",
+ en_A15: "a1-wednesday",
+ en_A16: "a1-wednesday",
+ en_A17: "a1-wednesday",
+ en_A17a: "a1-wednesday",
+ en_A17b: "a1-wednesday",
+ en_A17c: "a1-wednesday",
+ en_A18: "a1-wednesday",
+ en_A19: "a1-thursday",
+ en_A19a: "a1-thursday",
+ en_A19b: "a1-thursday",
+ en_A19c: "a1-thursday",
+ en_A19d: "a1-thursday",
+ en_A19e: "a1-thursday",
+ en_A19f: "a1-thursday",
+ en_A19g: "a1-thursday",
+ en_A19h: "a1-thursday",
+ en_A19i: "a1-thursday",
+ en_A19j: "a1-thursday",
+ en_A1: "a1-monday",
+ en_A1a: "a1-monday",
+ en_A1b: "a1-monday",
+ en_A1c: "a1-monday",
+ en_A20: "a1-thursday",
+ en_A21: "a1-thursday",
+ en_A21a: "a1-thursday",
+ en_A21b: "a1-thursday",
+ en_A21c: "a1-thursday",
+ en_A21d: "a1-thursday",
+ en_A22: "a1-thursday",
+ en_A22a: "a1-thursday",
+ en_A22b: "a1-thursday",
+ en_A23: "a1-thursday",
+ en_A23a: "a1-thursday",
+ en_A24: "a1-thursday",
+ en_A24a: "a1-thursday",
+ en_A24b: "a1-thursday",
+ en_A24c: "a1-thursday",
+ en_A24d: "a1-thursday",
+ en_A24e: "a1-thursday",
+ en_A25: "a1-friday",
+ en_A25a: "a1-friday",
+ en_A25b: "a1-friday",
+ en_A26: "a1-friday",
+ en_A26a: "a1-friday",
+ en_A26b: "a1-friday",
+ en_A26c: "a1-friday",
+ en_A26d: "a1-friday",
+ en_A26e: "a1-friday",
+ en_A27: "a1-friday",
+ en_A27a: "a1-friday",
+ en_A27b: "a1-friday",
+ en_A27c: "a1-friday",
+ en_A27d: "a1-friday",
+ en_A27e: "a1-friday",
+ en_A27f: "a1-friday",
+ en_A27h: "a1-friday",
+ en_A27i: "a1-friday",
+ en_A28: "a1-friday",
+ en_A28a: "a1-friday",
+ en_A28b: "a1-friday",
+ en_A29: "a1-friday",
+ en_A29a: "a1-friday",
+ en_A29b: "a1-friday",
+ en_A29c: "a1-friday",
+ en_A29x: "a1-friday",
+ en_A2: "a1-monday",
+ en_A2a: "a1-monday",
+ en_A2b: "a1-monday",
+ en_A2c: "a1-monday",
+ en_A2d: "a1-monday",
+ en_A2e: "a1-monday",
+ en_A2f: "a1-monday",
+ en_A30: "a1-friday",
+ en_A30a: "a1-friday",
+ en_A30b: "a1-friday",
+ en_A30c: "a1-friday",
+ en_A30d: "a1-friday",
+ en_A31: "a1-saturday",
+ en_A31b: "a1-saturday",
+ en_A31c: "a1-saturday",
+ en_A31d: "a1-saturday",
+ en_A31e: "a1-saturday",
+ en_A32: "a1-saturday",
+ en_A32a: "a1-saturday",
+ en_A32b: "a1-saturday",
+ en_A33: "a1-saturday",
+ en_A33a: "a1-saturday",
+ en_A33b: "a1-saturday",
+ en_A34: "a1-saturday",
+ en_A34a: "a1-saturday",
+ en_A34b: "a1-saturday",
+ en_A35: "a1-saturday",
+ en_A35a: "a1-saturday",
+ en_A36: "a1-saturday",
+ en_A37: "a1-saturday",
+ en_A38: "a1-sunday",
+ en_A38a: "a1-sunday",
+ en_A38b: "a1-sunday",
+ en_A38c: "a1-sunday",
+ en_A38d: "a1-sunday",
+ en_A38e: "a1-sunday",
+ en_A39: "a1-sunday",
+ en_A3: "a1-monday",
+ en_A3a: "a1-monday",
+ en_A3b: "a1-monday",
+ en_A3c: "a1-monday",
+ en_A3d: "a1-monday",
+ en_A40: "a1-sunday",
+ en_A41a: "a1-sunday",
+ en_A41b: "a1-sunday",
+ en_A42: "a1-sunday",
+ en_A43: "a1-sunday",
+ en_A44: "a1-sunday",
+ en_A4: "a1-monday",
+ en_A5: "a1-tuesday",
+ en_A6: "a1-tuesday",
+ en_A6a: "a1-tuesday",
+ en_A6b: "a1-tuesday",
+ en_A6c: "a1-tuesday",
+ en_A7: "a1-tuesday",
+ en_A8: "a1-tuesday",
+ en_A8a: "a1-tuesday",
+ en_A8aa: "a1-tuesday",
+ en_A8ab: "a1-tuesday",
+ en_A8b: "a1-tuesday",
+ en_A8c: "a1-tuesday",
+ en_A8d: "a1-tuesday",
+ en_A8e: "a1-tuesday",
+ en_A8f: "a1-tuesday",
+ en_A9: "a1-tuesday",
+ en_A9a: "a1-tuesday",
+ en_A9b: "a1-tuesday",
+ en_A9c: "a1-tuesday",
+ en_E10: "a2-emi",
+ en_E11a: "a2-emi",
+ en_E11b: "a2-emi",
+ en_E11c: "a2-emi",
+ en_E11d: "a2-emi",
+ en_E11x: "a2-emi",
+ en_E11y: "a2-emi",
+ en_E11z: "a2-emi",
+ en_E12a: "a2-emi",
+ en_E12b: "a2-emi",
+ en_E12c: "a2-emi",
+ en_E12d: "a2-emi",
+ en_E13: "a2-emi",
+ en_E14: "a2-emi",
+ en_E15: "a2-emi",
+ en_E16: "a3-emi",
+ en_E17: "a3-emi",
+ en_E17a: "a3-emi",
+ en_E17b: "a3-emi",
+ en_E17x: "a3-emi",
+ en_E18: "a3-emi",
+ en_E18a: "a3-emi",
+ en_E18b: "a3-emi",
+ en_E18x: "a3-emi",
+ en_E19: "a3-emi",
+ en_E20: "a3-emi",
+ en_E20h: "a3-emi",
+ en_E20x: "a3-emi",
+ en_E21: "a3-emi",
+ en_E21h: "a3-emi",
+ en_E21x: "a3-emi",
+ en_E22: "a3-emi",
+ en_E23: "a3-emi",
+ en_E24: "a3-emi",
+ en_E24a: "a3-emi",
+ en_E24b: "a3-emi",
+ en_E24c: "a3-emi",
+ en_E25: "a3-emi",
+ en_E25a: "a3-emi",
+ en_E25b: "a3-emi",
+ en_E25c: "a3-emi",
+ en_E26: "a3-emi",
+ en_E26a: "a3-emi",
+ en_E26b: "a3-emi",
+ en_E26c: "a3-emi",
+ en_E26d: "a3-emi",
+ en_E26e: "a3-emi",
+ en_E26f: "a3-emi",
+ en_E27: "a3-emi",
+ en_E27a: "a3-emi",
+ en_E27b: "a3-emi",
+ en_E28: "a4-emi",
+ en_E29: "a4-emi",
+ en_E30: "a4-emi",
+ en_E30a: "a4-emi",
+ en_E30b: "a4-emi",
+ en_E30c: "a4-emi",
+ en_E30d: "a4-emi",
+ en_E30e: "a4-emi",
+ en_E31: "a4-emi",
+ en_E31h: "a4-emi",
+ en_E31x: "a4-emi",
+ en_E32: "a4-emi",
+ en_E3: "a2-emi",
+ en_E4: "a2-emi",
+ en_E5: "a2-emi",
+ en_E6: "a2-emi",
+ en_E7: "a2-emi",
+ en_E8: "a2-emi",
+ en_E9: "a2-emi",
+ en_H10: "a2-hanako",
+ en_H11: "a3-hanako",
+ en_H12: "a3-hanako",
+ en_H12a: "a3-hanako",
+ en_H12b: "a3-hanako",
+ en_H12c: "a3-hanako",
+ en_H13: "a3-hanako",
+ en_H14: "a3-hanako",
+ en_H15: "a3-hanako",
+ en_H16: "a3-hanako",
+ en_H17: "a3-hanako",
+ en_H18: "a3-hanako",
+ en_H19: "a3-hanako",
+ en_H20: "a3-hanako",
+ en_H20_1: "a3-hanako",
+ en_H20_2: "a3-hanako",
+ en_H21: "a4-hanako",
+ en_H22: "a4-hanako",
+ en_H22a: "a4-hanako",
+ en_H22b: "a4-hanako",
+ en_H22c: "a4-hanako",
+ en_H23: "a4-hanako",
+ en_H24: "a4-hanako",
+ en_H25: "a4-hanako",
+ en_H25a: "a4-hanako",
+ en_H25c: "a4-hanako",
+ en_H26: "a4-hanako",
+ en_H27: "a4-hanako",
+ en_H28: "a4-hanako",
+ en_H29: "a4-hanako",
+ en_H29h: "a4-hanako",
+ en_H29x: "a4-hanako",
+ en_H2: "a2-hanako",
+ en_H30: "a4-hanako",
+ en_H31: "a4-hanako",
+ en_H3: "a2-hanako",
+ en_H4: "a2-hanako",
+ en_H5_1: "a2-hanako",
+ en_H5_2: "a2-hanako",
+ en_H6: "a2-hanako",
+ en_H7: "a2-hanako",
+ en_H7a: "a2-hanako",
+ en_H7b: "a2-hanako",
+ en_H7c: "a2-hanako",
+ en_H8: "a2-hanako",
+ en_H9: "a2-hanako",
+ en_L10: "a3-lilly",
+ en_L10a: "a3-lilly",
+ en_L10b: "a3-lilly",
+ en_L10c: "a3-lilly",
+ en_L10d: "a3-lilly",
+ en_L10e: "a3-lilly",
+ en_L10f: "a3-lilly",
+ en_L11: "a3-lilly",
+ en_L12: "a3-lilly",
+ en_L13: "a3-lilly",
+ en_L14: "a3-lilly",
+ en_L15: "a3-lilly",
+ en_L15a: "a3-lilly",
+ en_L15b: "a3-lilly",
+ en_L15c: "a3-lilly",
+ en_L16: "a3-lilly",
+ en_L17: "a3-lilly",
+ en_L17h: "a3-lilly",
+ en_L18: "a3-lilly",
+ en_L19: "a3-lilly",
+ en_L19h: "a3-lilly",
+ en_L1: "a2-lilly",
+ en_L20: "a3-lilly",
+ en_L20a: "a3-lilly",
+ en_L20b: "a3-lilly",
+ en_L20c: "a3-lilly",
+ en_L21: "a4-lilly",
+ en_L22: "a4-lilly",
+ en_L23: "a4-lilly",
+ en_L24: "a4-lilly",
+ en_L24a: "a4-lilly",
+ en_L24b: "a4-lilly",
+ en_L24c: "a4-lilly",
+ en_L25: "a4-lilly",
+ en_L26: "a4-lilly",
+ en_L26h: "a4-lilly",
+ en_L26x: "a4-lilly",
+ en_L27: "a4-lilly",
+ en_L28: "a4-lilly",
+ en_L29: "a4-lilly",
+ en_L2: "a2-lilly",
+ en_L30: "a4-lilly",
+ en_L31: "a4-lilly",
+ en_L32: "a4-lilly",
+ en_L33: "a4-lilly",
+ en_L3: "a2-lilly",
+ en_L4: "a2-lilly",
+ en_L5: "a2-lilly",
+ en_L6a: "a2-lilly",
+ en_L6b: "a2-lilly",
+ en_L6c: "a2-lilly",
+ en_L6i: "a2-lilly",
+ en_L7: "a2-lilly",
+ en_L8: "a2-lilly",
+ en_L9: "a3-lilly",
+ en_NOP1: "a1-monday",
+ en_NOP2: "a1-monday",
+ en_R10: "a2-rin",
+ en_R11: "a2-rin",
+ en_R11a: "a2-rin",
+ en_R11b: "a2-rin",
+ en_R11c: "a2-rin",
+ en_R11d: "a2-rin",
+ en_R11e: "a2-rin",
+ en_R11f: "a2-rin",
+ en_R11g: "a2-rin",
+ en_R11h: "a2-rin",
+ en_R11i: "a2-rin",
+ en_R11j: "a2-rin",
+ en_R12: "a2-rin",
+ en_R12a: "a2-rin",
+ en_R12b: "a2-rin",
+ en_R12c: "a2-rin",
+ en_R12d: "a2-rin",
+ en_R12e: "a2-rin",
+ en_R12f: "a2-rin",
+ en_R13: "a2-rin",
+ en_R14: "a2-rin",
+ en_R15: "a2-rin",
+ en_R16: "a2-rin",
+ en_R16a: "a2-rin",
+ en_R16b: "a2-rin",
+ en_R16c: "a2-rin",
+ en_R16d: "a2-rin",
+ en_R16e: "a2-rin",
+ en_R17: "a3-rin",
+ en_R18: "a3-rin",
+ en_R19: "a3-rin",
+ en_R19a: "a3-rin",
+ en_R19b: "a3-rin",
+ en_R1: "a2-rin",
+ en_R20: "a3-rin",
+ en_R20a: "a3-rin",
+ en_R20b: "a3-rin",
+ en_R20c: "a3-rin",
+ en_R21: "a3-rin",
+ en_R21a: "a3-rin",
+ en_R21b: "a3-rin",
+ en_R21c: "a3-rin",
+ en_R22: "a3-rin",
+ en_R23: "a3-rin",
+ en_R23_2: "a3-rin",
+ en_R24: "a3-rin",
+ en_R25: "a3-rin",
+ en_R26: "a3-rin",
+ en_R26a: "a3-rin",
+ en_R26b: "a3-rin",
+ en_R26c: "a3-rin",
+ en_R27: "a3-rin",
+ en_R27h: "a3-rin",
+ en_R27x: "a3-rin",
+ en_R28: "a3-rin",
+ en_R28a: "a3-rin",
+ en_R28b: "a3-rin",
+ en_R28c: "a3-rin",
+ en_R29: "a3-rin",
+ en_R2: "a2-rin",
+ en_R2a: "a2-rin",
+ en_R2b: "a2-rin",
+ en_R2c: "a2-rin",
+ en_R30: "a4-rin",
+ en_R30x: "a4-rin",
+ en_R30y: "a4-rin",
+ en_R30z: "a4-rin",
+ en_R31: "a4-rin",
+ en_R32: "a4-rin",
+ en_R32a: "a4-rin",
+ en_R32b: "a4-rin",
+ en_R33: "a4-rin",
+ en_R34: "a4-rin",
+ en_R35: "a4-rin",
+ en_R36: "a4-rin",
+ en_R36a: "a4-rin",
+ en_R36x: "a4-rin",
+ en_R37: "a4-rin",
+ en_R38: "a4-rin",
+ en_R39: "a4-rin",
+ en_R3: "a2-rin",
+ en_R40: "a4-rin",
+ en_R41: "a4-rin",
+ en_R41h: "a4-rin",
+ en_R42: "a4-rin",
+ en_R4: "a2-rin",
+ en_R5: "a2-rin",
+ en_R6: "a2-rin",
+ en_R6a: "a2-rin",
+ en_R6b: "a2-rin",
+ en_R6c: "a2-rin",
+ en_R7: "a2-rin",
+ en_R8: "a2-rin",
+ en_R9: "a2-rin",
+ en_R9a: "a2-rin",
+ en_R9b: "a2-rin",
+ en_R9c: "a2-rin",
+ en_S10: "a2-shizune",
+ en_S11: "a2-shizune",
+ en_S12: "a2-shizune",
+ en_S13: "a2-shizune",
+ en_S14: "a2-shizune",
+ en_S15: "a2-shizune",
+ en_S16: "a2-shizune",
+ en_S17: "a3-shizune",
+ en_S17a: "a3-shizune",
+ en_S17x: "a3-shizune",
+ en_S18: "a3-shizune",
+ en_S19: "a3-shizune",
+ en_S20: "a3-shizune",
+ en_S21: "a3-shizune",
+ en_S22: "a3-shizune",
+ en_S22a: "a3-shizune",
+ en_S22b: "a3-shizune",
+ en_S22c: "a3-shizune",
+ en_S22h: "a3-shizune",
+ en_S22x: "a3-shizune",
+ en_S23: "a3-shizune",
+ en_S23a: "a3-shizune",
+ en_S23x: "a3-shizune",
+ en_S24: "a3-shizune",
+ en_S25: "a3-shizune",
+ en_S26: "a3-shizune",
+ en_S26a: "a3-shizune",
+ en_S26b: "a3-shizune",
+ en_S26c: "a3-shizune",
+ en_S27: "a3-shizune",
+ en_S28: "a3-shizune",
+ en_S28a: "a3-shizune",
+ en_S28b: "a3-shizune",
+ en_S28h: "a3-shizune",
+ en_S29: "a3-shizune",
+ en_S29a: "a3-shizune",
+ en_S29b: "a3-shizune",
+ en_S29x: "a3-shizune",
+ en_S29xa: "a3-shizune",
+ en_S29xb: "a3-shizune",
+ en_S29xba: "a3-shizune",
+ en_S29xbb: "a3-shizune",
+ en_S29xbc: "a3-shizune",
+ en_S29y: "a3-shizune",
+ en_S29ya: "a3-shizune",
+ en_S29yb: "a3-shizune",
+ en_S30: "a4-shizune",
+ en_S31: "a4-shizune",
+ en_S32: "a4-shizune",
+ en_S33: "a4-shizune",
+ en_S34: "a4-shizune",
+ en_S34a: "a4-shizune",
+ en_S34b: "a4-shizune",
+ en_S34c: "a4-shizune",
+ en_S35: "a4-shizune",
+ en_S35h: "a4-shizune",
+ en_S35x: "a4-shizune",
+ en_S36: "a4-shizune",
+ en_S37: "a4-shizune",
+ en_S38: "a4-shizune",
+ en_S39: "a4-shizune",
+ en_S40: "a4-shizune",
+ en_S8: "a2-shizune",
+ en_S9: "a2-shizune",
+ en_choice2A27: "a1-friday",
+ en_choiceA10a: "a1-wednesday",
+ en_choiceA10b: "a1-wednesday",
+ en_choiceA10c: "a1-wednesday",
+ en_choiceA17: "a1-wednesday",
+ en_choiceA1: "a1-monday",
+ en_choiceA21: "a1-thursday",
+ en_choiceA25: "a1-friday",
+ en_choiceA26: "a1-friday",
+ en_choiceA27: "a1-friday",
+ en_choiceA30: "a1-friday",
+ en_choiceA33: "a1-saturday",
+ en_choiceA35: "a1-saturday",
+ en_choiceA3: "a1-monday",
+ en_choiceA6: "a1-tuesday",
+ en_choiceA8: "a1-tuesday",
+ en_choiceA9: "a1-tuesday",
+ en_choiceE11: "a2-emi",
+ en_choiceE17: "a3-emi",
+ en_choiceE24: "a3-emi",
+ en_choiceE25: "a3-emi",
+ en_choiceE26: "a3-emi",
+ en_choiceE27: "a3-emi",
+ en_choiceH12: "a3-hanako",
+ en_choiceH20: "a3-hanako",
+ en_choiceH22: "a4-hanako",
+ en_choiceH4: "a2-hanako",
+ en_choiceL10_1: "a3-lilly",
+ en_choiceL10_2: "a3-lilly",
+ en_choiceL15: "a3-lilly",
+ en_choiceL20: "a3-lilly",
+ en_choiceL24: "a4-lilly",
+ en_choiceL6_1: "a2-lilly",
+ en_choiceR11aaa: "a2-rin",
+ en_choiceR11aab: "a2-rin",
+ en_choiceR11aba: "a2-rin",
+ en_choiceR11abb: "a2-rin",
+ en_choiceR11baa: "a2-rin",
+ en_choiceR11bab: "a2-rin",
+ en_choiceR11bba: "a2-rin",
+ en_choiceR11bbb: "a2-rin",
+ en_choiceR16: "a2-rin",
+ en_choiceR20: "a3-rin",
+ en_choiceR21: "a3-rin",
+ en_choiceR26: "a3-rin",
+ en_choiceR28_1: "a3-rin",
+ en_choiceR28_2: "a3-rin",
+ en_choiceR2: "a2-rin",
+ en_choiceR32: "a4-rin",
+ en_choiceR6: "a2-rin",
+ en_choiceR9: "a2-rin",
+ en_choiceS28: "a3-shizune",
+ fr_A10: "a1-wednesday_FR",
+ fr_A10a: "a1-wednesday_FR",
+ fr_A10b: "a1-wednesday_FR",
+ fr_A10c: "a1-wednesday_FR",
+ fr_A11: "a1-wednesday_FR",
+ fr_A11a: "a1-wednesday_FR",
+ fr_A11b: "a1-wednesday_FR",
+ fr_A11c: "a1-wednesday_FR",
+ fr_A11d: "a1-wednesday_FR",
+ fr_A11x: "a1-wednesday_FR",
+ fr_A11y: "a1-wednesday_FR",
+ fr_A12: "a1-wednesday_FR",
+ fr_A13: "a1-wednesday_FR",
+ fr_A15: "a1-wednesday_FR",
+ fr_A16: "a1-wednesday_FR",
+ fr_A17: "a1-wednesday_FR",
+ fr_A17a: "a1-wednesday_FR",
+ fr_A17b: "a1-wednesday_FR",
+ fr_A17c: "a1-wednesday_FR",
+ fr_A18: "a1-wednesday_FR",
+ fr_A19: "a1-thursday_FR",
+ fr_A19a: "a1-thursday_FR",
+ fr_A19b: "a1-thursday_FR",
+ fr_A19c: "a1-thursday_FR",
+ fr_A19d: "a1-thursday_FR",
+ fr_A19e: "a1-thursday_FR",
+ fr_A19f: "a1-thursday_FR",
+ fr_A19g: "a1-thursday_FR",
+ fr_A19h: "a1-thursday_FR",
+ fr_A19i: "a1-thursday_FR",
+ fr_A19j: "a1-thursday_FR",
+ fr_A1: "a1-monday_FR",
+ fr_A1a: "a1-monday_FR",
+ fr_A1b: "a1-monday_FR",
+ fr_A1c: "a1-monday_FR",
+ fr_A20: "a1-thursday_FR",
+ fr_A21: "a1-thursday_FR",
+ fr_A21a: "a1-thursday_FR",
+ fr_A21b: "a1-thursday_FR",
+ fr_A21c: "a1-thursday_FR",
+ fr_A21d: "a1-thursday_FR",
+ fr_A22: "a1-thursday_FR",
+ fr_A22a: "a1-thursday_FR",
+ fr_A22b: "a1-thursday_FR",
+ fr_A23: "a1-thursday_FR",
+ fr_A23a: "a1-thursday_FR",
+ fr_A24: "a1-thursday_FR",
+ fr_A24a: "a1-thursday_FR",
+ fr_A24b: "a1-thursday_FR",
+ fr_A24c: "a1-thursday_FR",
+ fr_A24d: "a1-thursday_FR",
+ fr_A24e: "a1-thursday_FR",
+ fr_A25: "a1-friday_FR",
+ fr_A25a: "a1-friday_FR",
+ fr_A25b: "a1-friday_FR",
+ fr_A26: "a1-friday_FR",
+ fr_A26a: "a1-friday_FR",
+ fr_A26b: "a1-friday_FR",
+ fr_A26c: "a1-friday_FR",
+ fr_A26d: "a1-friday_FR",
+ fr_A26e: "a1-friday_FR",
+ fr_A27: "a1-friday_FR",
+ fr_A27a: "a1-friday_FR",
+ fr_A27b: "a1-friday_FR",
+ fr_A27c: "a1-friday_FR",
+ fr_A27d: "a1-friday_FR",
+ fr_A27e: "a1-friday_FR",
+ fr_A27f: "a1-friday_FR",
+ fr_A27h: "a1-friday_FR",
+ fr_A27i: "a1-friday_FR",
+ fr_A28: "a1-friday_FR",
+ fr_A28a: "a1-friday_FR",
+ fr_A28b: "a1-friday_FR",
+ fr_A29: "a1-friday_FR",
+ fr_A29a: "a1-friday_FR",
+ fr_A29b: "a1-friday_FR",
+ fr_A29c: "a1-friday_FR",
+ fr_A29x: "a1-friday_FR",
+ fr_A2: "a1-monday_FR",
+ fr_A2a: "a1-monday_FR",
+ fr_A2b: "a1-monday_FR",
+ fr_A2c: "a1-monday_FR",
+ fr_A2d: "a1-monday_FR",
+ fr_A2e: "a1-monday_FR",
+ fr_A2f: "a1-monday_FR",
+ fr_A30: "a1-friday_FR",
+ fr_A30a: "a1-friday_FR",
+ fr_A30b: "a1-friday_FR",
+ fr_A30c: "a1-friday_FR",
+ fr_A30d: "a1-friday_FR",
+ fr_A31: "a1-saturday_FR",
+ fr_A31b: "a1-saturday_FR",
+ fr_A31c: "a1-saturday_FR",
+ fr_A31d: "a1-saturday_FR",
+ fr_A31e: "a1-saturday_FR",
+ fr_A32: "a1-saturday_FR",
+ fr_A32a: "a1-saturday_FR",
+ fr_A32b: "a1-saturday_FR",
+ fr_A33: "a1-saturday_FR",
+ fr_A33a: "a1-saturday_FR",
+ fr_A33b: "a1-saturday_FR",
+ fr_A34: "a1-saturday_FR",
+ fr_A34a: "a1-saturday_FR",
+ fr_A34b: "a1-saturday_FR",
+ fr_A35: "a1-saturday_FR",
+ fr_A35a: "a1-saturday_FR",
+ fr_A36: "a1-saturday_FR",
+ fr_A37: "a1-saturday_FR",
+ fr_A38: "a1-sunday_FR",
+ fr_A38a: "a1-sunday_FR",
+ fr_A38b: "a1-sunday_FR",
+ fr_A38c: "a1-sunday_FR",
+ fr_A38d: "a1-sunday_FR",
+ fr_A38e: "a1-sunday_FR",
+ fr_A39: "a1-sunday_FR",
+ fr_A3: "a1-monday_FR",
+ fr_A3a: "a1-monday_FR",
+ fr_A3b: "a1-monday_FR",
+ fr_A3c: "a1-monday_FR",
+ fr_A3d: "a1-monday_FR",
+ fr_A40: "a1-sunday_FR",
+ fr_A41a: "a1-sunday_FR",
+ fr_A41b: "a1-sunday_FR",
+ fr_A42: "a1-sunday_FR",
+ fr_A43: "a1-sunday_FR",
+ fr_A44: "a1-sunday_FR",
+ fr_A4: "a1-monday_FR",
+ fr_A5: "a1-tuesday_FR",
+ fr_A6: "a1-tuesday_FR",
+ fr_A6a: "a1-tuesday_FR",
+ fr_A6b: "a1-tuesday_FR",
+ fr_A6c: "a1-tuesday_FR",
+ fr_A7: "a1-tuesday_FR",
+ fr_A8: "a1-tuesday_FR",
+ fr_A8a: "a1-tuesday_FR",
+ fr_A8aa: "a1-tuesday_FR",
+ fr_A8ab: "a1-tuesday_FR",
+ fr_A8b: "a1-tuesday_FR",
+ fr_A8c: "a1-tuesday_FR",
+ fr_A8d: "a1-tuesday_FR",
+ fr_A8e: "a1-tuesday_FR",
+ fr_A8f: "a1-tuesday_FR",
+ fr_A9: "a1-tuesday_FR",
+ fr_A9a: "a1-tuesday_FR",
+ fr_A9b: "a1-tuesday_FR",
+ fr_A9c: "a1-tuesday_FR",
+ fr_E10: "a2-emi_FR",
+ fr_E11a: "a2-emi_FR",
+ fr_E11b: "a2-emi_FR",
+ fr_E11c: "a2-emi_FR",
+ fr_E11d: "a2-emi_FR",
+ fr_E11x: "a2-emi_FR",
+ fr_E11y: "a2-emi_FR",
+ fr_E11z: "a2-emi_FR",
+ fr_E12a: "a2-emi_FR",
+ fr_E12b: "a2-emi_FR",
+ fr_E12c: "a2-emi_FR",
+ fr_E12d: "a2-emi_FR",
+ fr_E13: "a2-emi_FR",
+ fr_E14: "a2-emi_FR",
+ fr_E15: "a2-emi_FR",
+ fr_E16: "a3-emi_FR",
+ fr_E17: "a3-emi_FR",
+ fr_E17a: "a3-emi_FR",
+ fr_E17b: "a3-emi_FR",
+ fr_E17x: "a3-emi_FR",
+ fr_E18: "a3-emi_FR",
+ fr_E18a: "a3-emi_FR",
+ fr_E18b: "a3-emi_FR",
+ fr_E18x: "a3-emi_FR",
+ fr_E19: "a3-emi_FR",
+ fr_E20: "a3-emi_FR",
+ fr_E20h: "a3-emi_FR",
+ fr_E20x: "a3-emi_FR",
+ fr_E21: "a3-emi_FR",
+ fr_E21h: "a3-emi_FR",
+ fr_E21x: "a3-emi_FR",
+ fr_E22: "a3-emi_FR",
+ fr_E23: "a3-emi_FR",
+ fr_E24: "a3-emi_FR",
+ fr_E24a: "a3-emi_FR",
+ fr_E24b: "a3-emi_FR",
+ fr_E24c: "a3-emi_FR",
+ fr_E25: "a3-emi_FR",
+ fr_E25a: "a3-emi_FR",
+ fr_E25b: "a3-emi_FR",
+ fr_E25c: "a3-emi_FR",
+ fr_E26: "a3-emi_FR",
+ fr_E26a: "a3-emi_FR",
+ fr_E26b: "a3-emi_FR",
+ fr_E26c: "a3-emi_FR",
+ fr_E26d: "a3-emi_FR",
+ fr_E26e: "a3-emi_FR",
+ fr_E26f: "a3-emi_FR",
+ fr_E27: "a3-emi_FR",
+ fr_E27a: "a3-emi_FR",
+ fr_E27b: "a3-emi_FR",
+ fr_E28: "a4-emi_FR",
+ fr_E29: "a4-emi_FR",
+ fr_E30: "a4-emi_FR",
+ fr_E30a: "a4-emi_FR",
+ fr_E30b: "a4-emi_FR",
+ fr_E30c: "a4-emi_FR",
+ fr_E30d: "a4-emi_FR",
+ fr_E30e: "a4-emi_FR",
+ fr_E31: "a4-emi_FR",
+ fr_E31h: "a4-emi_FR",
+ fr_E31x: "a4-emi_FR",
+ fr_E32: "a4-emi_FR",
+ fr_E3: "a2-emi_FR",
+ fr_E4: "a2-emi_FR",
+ fr_E5: "a2-emi_FR",
+ fr_E6: "a2-emi_FR",
+ fr_E7: "a2-emi_FR",
+ fr_E8: "a2-emi_FR",
+ fr_E9: "a2-emi_FR",
+ fr_H10: "a2-hanako_FR",
+ fr_H11: "a3-hanako_FR",
+ fr_H12: "a3-hanako_FR",
+ fr_H12a: "a3-hanako_FR",
+ fr_H12b: "a3-hanako_FR",
+ fr_H12c: "a3-hanako_FR",
+ fr_H13: "a3-hanako_FR",
+ fr_H14: "a3-hanako_FR",
+ fr_H15: "a3-hanako_FR",
+ fr_H16: "a3-hanako_FR",
+ fr_H17: "a3-hanako_FR",
+ fr_H18: "a3-hanako_FR",
+ fr_H19: "a3-hanako_FR",
+ fr_H20: "a3-hanako_FR",
+ fr_H20_1: "a3-hanako_FR",
+ fr_H20_2: "a3-hanako_FR",
+ fr_H21: "a4-hanako_FR",
+ fr_H22: "a4-hanako_FR",
+ fr_H22a: "a4-hanako_FR",
+ fr_H22b: "a4-hanako_FR",
+ fr_H22c: "a4-hanako_FR",
+ fr_H23: "a4-hanako_FR",
+ fr_H24: "a4-hanako_FR",
+ fr_H25: "a4-hanako_FR",
+ fr_H25a: "a4-hanako_FR",
+ fr_H25c: "a4-hanako_FR",
+ fr_H26: "a4-hanako_FR",
+ fr_H27: "a4-hanako_FR",
+ fr_H28: "a4-hanako_FR",
+ fr_H29: "a4-hanako_FR",
+ fr_H29h: "a4-hanako_FR",
+ fr_H29x: "a4-hanako_FR",
+ fr_H2: "a2-hanako_FR",
+ fr_H30: "a4-hanako_FR",
+ fr_H31: "a4-hanako_FR",
+ fr_H3: "a2-hanako_FR",
+ fr_H4: "a2-hanako_FR",
+ fr_H5_1: "a2-hanako_FR",
+ fr_H5_2: "a2-hanako_FR",
+ fr_H6: "a2-hanako_FR",
+ fr_H7: "a2-hanako_FR",
+ fr_H7a: "a2-hanako_FR",
+ fr_H7b: "a2-hanako_FR",
+ fr_H7c: "a2-hanako_FR",
+ fr_H8: "a2-hanako_FR",
+ fr_H9: "a2-hanako_FR",
+ fr_L10: "a3-lilly_FR",
+ fr_L10a: "a3-lilly_FR",
+ fr_L10b: "a3-lilly_FR",
+ fr_L10c: "a3-lilly_FR",
+ fr_L10d: "a3-lilly_FR",
+ fr_L10e: "a3-lilly_FR",
+ fr_L10f: "a3-lilly_FR",
+ fr_L11: "a3-lilly_FR",
+ fr_L12: "a3-lilly_FR",
+ fr_L13: "a3-lilly_FR",
+ fr_L14: "a3-lilly_FR",
+ fr_L15: "a3-lilly_FR",
+ fr_L15a: "a3-lilly_FR",
+ fr_L15b: "a3-lilly_FR",
+ fr_L15c: "a3-lilly_FR",
+ fr_L16: "a3-lilly_FR",
+ fr_L17: "a3-lilly_FR",
+ fr_L17h: "a3-lilly_FR",
+ fr_L18: "a3-lilly_FR",
+ fr_L19: "a3-lilly_FR",
+ fr_L19h: "a3-lilly_FR",
+ fr_L1: "a2-lilly_FR",
+ fr_L20: "a3-lilly_FR",
+ fr_L20a: "a3-lilly_FR",
+ fr_L20b: "a3-lilly_FR",
+ fr_L20c: "a3-lilly_FR",
+ fr_L21: "a4-lilly_FR",
+ fr_L22: "a4-lilly_FR",
+ fr_L23: "a4-lilly_FR",
+ fr_L24: "a4-lilly_FR",
+ fr_L24a: "a4-lilly_FR",
+ fr_L24b: "a4-lilly_FR",
+ fr_L24c: "a4-lilly_FR",
+ fr_L25: "a4-lilly_FR",
+ fr_L26: "a4-lilly_FR",
+ fr_L26h: "a4-lilly_FR",
+ fr_L26x: "a4-lilly_FR",
+ fr_L27: "a4-lilly_FR",
+ fr_L28: "a4-lilly_FR",
+ fr_L29: "a4-lilly_FR",
+ fr_L2: "a2-lilly_FR",
+ fr_L30: "a4-lilly_FR",
+ fr_L31: "a4-lilly_FR",
+ fr_L32: "a4-lilly_FR",
+ fr_L33: "a4-lilly_FR",
+ fr_L3: "a2-lilly_FR",
+ fr_L4: "a2-lilly_FR",
+ fr_L5: "a2-lilly_FR",
+ fr_L6a: "a2-lilly_FR",
+ fr_L6b: "a2-lilly_FR",
+ fr_L6c: "a2-lilly_FR",
+ fr_L6i: "a2-lilly_FR",
+ fr_L7: "a2-lilly_FR",
+ fr_L8: "a2-lilly_FR",
+ fr_L9: "a3-lilly_FR",
+ fr_NOP1: "a1-monday_FR",
+ fr_NOP2: "a1-monday_FR",
+ fr_R10: "a2-rin_FR",
+ fr_R11: "a2-rin_FR",
+ fr_R11a: "a2-rin_FR",
+ fr_R11b: "a2-rin_FR",
+ fr_R11c: "a2-rin_FR",
+ fr_R11d: "a2-rin_FR",
+ fr_R11e: "a2-rin_FR",
+ fr_R11f: "a2-rin_FR",
+ fr_R11g: "a2-rin_FR",
+ fr_R11h: "a2-rin_FR",
+ fr_R11i: "a2-rin_FR",
+ fr_R11j: "a2-rin_FR",
+ fr_R12: "a2-rin_FR",
+ fr_R12a: "a2-rin_FR",
+ fr_R12b: "a2-rin_FR",
+ fr_R12c: "a2-rin_FR",
+ fr_R12d: "a2-rin_FR",
+ fr_R12e: "a2-rin_FR",
+ fr_R12f: "a2-rin_FR",
+ fr_R13: "a2-rin_FR",
+ fr_R14: "a2-rin_FR",
+ fr_R15: "a2-rin_FR",
+ fr_R16: "a2-rin_FR",
+ fr_R16a: "a2-rin_FR",
+ fr_R16b: "a2-rin_FR",
+ fr_R16c: "a2-rin_FR",
+ fr_R16d: "a2-rin_FR",
+ fr_R16e: "a2-rin_FR",
+ fr_R17: "a3-rin_FR",
+ fr_R18: "a3-rin_FR",
+ fr_R19: "a3-rin_FR",
+ fr_R19a: "a3-rin_FR",
+ fr_R19b: "a3-rin_FR",
+ fr_R1: "a2-rin_FR",
+ fr_R20: "a3-rin_FR",
+ fr_R20a: "a3-rin_FR",
+ fr_R20b: "a3-rin_FR",
+ fr_R20c: "a3-rin_FR",
+ fr_R21: "a3-rin_FR",
+ fr_R21a: "a3-rin_FR",
+ fr_R21b: "a3-rin_FR",
+ fr_R21c: "a3-rin_FR",
+ fr_R22: "a3-rin_FR",
+ fr_R23: "a3-rin_FR",
+ fr_R23_2: "a3-rin_FR",
+ fr_R24: "a3-rin_FR",
+ fr_R25: "a3-rin_FR",
+ fr_R26: "a3-rin_FR",
+ fr_R26a: "a3-rin_FR",
+ fr_R26b: "a3-rin_FR",
+ fr_R26c: "a3-rin_FR",
+ fr_R27: "a3-rin_FR",
+ fr_R27h: "a3-rin_FR",
+ fr_R27x: "a3-rin_FR",
+ fr_R28: "a3-rin_FR",
+ fr_R28a: "a3-rin_FR",
+ fr_R28b: "a3-rin_FR",
+ fr_R28c: "a3-rin_FR",
+ fr_R29: "a3-rin_FR",
+ fr_R2: "a2-rin_FR",
+ fr_R2a: "a2-rin_FR",
+ fr_R2b: "a2-rin_FR",
+ fr_R2c: "a2-rin_FR",
+ fr_R30: "a4-rin_FR",
+ fr_R30x: "a4-rin_FR",
+ fr_R30y: "a4-rin_FR",
+ fr_R30z: "a4-rin_FR",
+ fr_R31: "a4-rin_FR",
+ fr_R32: "a4-rin_FR",
+ fr_R32a: "a4-rin_FR",
+ fr_R32b: "a4-rin_FR",
+ fr_R33: "a4-rin_FR",
+ fr_R34: "a4-rin_FR",
+ fr_R35: "a4-rin_FR",
+ fr_R36: "a4-rin_FR",
+ fr_R36a: "a4-rin_FR",
+ fr_R36x: "a4-rin_FR",
+ fr_R37: "a4-rin_FR",
+ fr_R38: "a4-rin_FR",
+ fr_R39: "a4-rin_FR",
+ fr_R3: "a2-rin_FR",
+ fr_R40: "a4-rin_FR",
+ fr_R41: "a4-rin_FR",
+ fr_R41h: "a4-rin_FR",
+ fr_R42: "a4-rin_FR",
+ fr_R4: "a2-rin_FR",
+ fr_R5: "a2-rin_FR",
+ fr_R6: "a2-rin_FR",
+ fr_R6a: "a2-rin_FR",
+ fr_R6b: "a2-rin_FR",
+ fr_R6c: "a2-rin_FR",
+ fr_R7: "a2-rin_FR",
+ fr_R8: "a2-rin_FR",
+ fr_R9: "a2-rin_FR",
+ fr_R9a: "a2-rin_FR",
+ fr_R9b: "a2-rin_FR",
+ fr_R9c: "a2-rin_FR",
+ fr_S10: "a2-shizune_FR",
+ fr_S11: "a2-shizune_FR",
+ fr_S12: "a2-shizune_FR",
+ fr_S13: "a2-shizune_FR",
+ fr_S14: "a2-shizune_FR",
+ fr_S15: "a2-shizune_FR",
+ fr_S16: "a2-shizune_FR",
+ fr_S17: "a3-shizune_FR",
+ fr_S17a: "a3-shizune_FR",
+ fr_S17x: "a3-shizune_FR",
+ fr_S18: "a3-shizune_FR",
+ fr_S19: "a3-shizune_FR",
+ fr_S20: "a3-shizune_FR",
+ fr_S21: "a3-shizune_FR",
+ fr_S22: "a3-shizune_FR",
+ fr_S22a: "a3-shizune_FR",
+ fr_S22b: "a3-shizune_FR",
+ fr_S22c: "a3-shizune_FR",
+ fr_S22h: "a3-shizune_FR",
+ fr_S22x: "a3-shizune_FR",
+ fr_S23: "a3-shizune_FR",
+ fr_S23a: "a3-shizune_FR",
+ fr_S23x: "a3-shizune_FR",
+ fr_S24: "a3-shizune_FR",
+ fr_S25: "a3-shizune_FR",
+ fr_S26: "a3-shizune_FR",
+ fr_S26a: "a3-shizune_FR",
+ fr_S26b: "a3-shizune_FR",
+ fr_S26c: "a3-shizune_FR",
+ fr_S27: "a3-shizune_FR",
+ fr_S28: "a3-shizune_FR",
+ fr_S28a: "a3-shizune_FR",
+ fr_S28b: "a3-shizune_FR",
+ fr_S28h: "a3-shizune_FR",
+ fr_S29: "a3-shizune_FR",
+ fr_S29a: "a3-shizune_FR",
+ fr_S29b: "a3-shizune_FR",
+ fr_S29x: "a3-shizune_FR",
+ fr_S29xa: "a3-shizune_FR",
+ fr_S29xb: "a3-shizune_FR",
+ fr_S29xba: "a3-shizune_FR",
+ fr_S29xbb: "a3-shizune_FR",
+ fr_S29xbc: "a3-shizune_FR",
+ fr_S29y: "a3-shizune_FR",
+ fr_S29ya: "a3-shizune_FR",
+ fr_S29yb: "a3-shizune_FR",
+ fr_S30: "a4-shizune_FR",
+ fr_S31: "a4-shizune_FR",
+ fr_S32: "a4-shizune_FR",
+ fr_S33: "a4-shizune_FR",
+ fr_S34: "a4-shizune_FR",
+ fr_S34a: "a4-shizune_FR",
+ fr_S34b: "a4-shizune_FR",
+ fr_S34c: "a4-shizune_FR",
+ fr_S35: "a4-shizune_FR",
+ fr_S35h: "a4-shizune_FR",
+ fr_S35x: "a4-shizune_FR",
+ fr_S36: "a4-shizune_FR",
+ fr_S37: "a4-shizune_FR",
+ fr_S38: "a4-shizune_FR",
+ fr_S39: "a4-shizune_FR",
+ fr_S40: "a4-shizune_FR",
+ fr_S8: "a2-shizune_FR",
+ fr_S9: "a2-shizune_FR",
+ fr_choice2A27: "a1-friday_FR",
+ fr_choiceA10a: "a1-wednesday_FR",
+ fr_choiceA10b: "a1-wednesday_FR",
+ fr_choiceA10c: "a1-wednesday_FR",
+ fr_choiceA17: "a1-wednesday_FR",
+ fr_choiceA1: "a1-monday_FR",
+ fr_choiceA21: "a1-thursday_FR",
+ fr_choiceA25: "a1-friday_FR",
+ fr_choiceA26: "a1-friday_FR",
+ fr_choiceA27: "a1-friday_FR",
+ fr_choiceA30: "a1-friday_FR",
+ fr_choiceA33: "a1-saturday_FR",
+ fr_choiceA35: "a1-saturday_FR",
+ fr_choiceA3: "a1-monday_FR",
+ fr_choiceA6: "a1-tuesday_FR",
+ fr_choiceA8: "a1-tuesday_FR",
+ fr_choiceA9: "a1-tuesday_FR",
+ fr_choiceE11: "a2-emi_FR",
+ fr_choiceE17: "a3-emi_FR",
+ fr_choiceE24: "a3-emi_FR",
+ fr_choiceE25: "a3-emi_FR",
+ fr_choiceE26: "a3-emi_FR",
+ fr_choiceE27: "a3-emi_FR",
+ fr_choiceH12: "a3-hanako_FR",
+ fr_choiceH20: "a3-hanako_FR",
+ fr_choiceH22: "a4-hanako_FR",
+ fr_choiceH4: "a2-hanako_FR",
+ fr_choiceL10_1: "a3-lilly_FR",
+ fr_choiceL10_2: "a3-lilly_FR",
+ fr_choiceL15: "a3-lilly_FR",
+ fr_choiceL20: "a3-lilly_FR",
+ fr_choiceL24: "a4-lilly_FR",
+ fr_choiceL6_1: "a2-lilly_FR",
+ fr_choiceR11aaa: "a2-rin_FR",
+ fr_choiceR11aab: "a2-rin_FR",
+ fr_choiceR11aba: "a2-rin_FR",
+ fr_choiceR11abb: "a2-rin_FR",
+ fr_choiceR11baa: "a2-rin_FR",
+ fr_choiceR11bab: "a2-rin_FR",
+ fr_choiceR11bba: "a2-rin_FR",
+ fr_choiceR11bbb: "a2-rin_FR",
+ fr_choiceR16: "a2-rin_FR",
+ fr_choiceR20: "a3-rin_FR",
+ fr_choiceR21: "a3-rin_FR",
+ fr_choiceR26: "a3-rin_FR",
+ fr_choiceR28_1: "a3-rin_FR",
+ fr_choiceR28_2: "a3-rin_FR",
+ fr_choiceR2: "a2-rin_FR",
+ fr_choiceR32: "a4-rin_FR",
+ fr_choiceR6: "a2-rin_FR",
+ fr_choiceR9: "a2-rin_FR",
+ fr_choiceS28: "a3-shizune_FR"
+}